Skip to content

Release v3.16.0

Choose a tag to compare

@github-actions github-actions released this 29 Oct 18:00
e9e8ac9

Reactor and reducer handlers built and sent every result inline in one GenServer. One large partition blocked the whole observer, and copies of batches the kernel had abandoned piled up behind it.

Added

  • Batches for different partitions run concurrently, each in its own process, up to :max_concurrent_partitions (client option, default 16). Batches for one partition run one at a time and in order. The kernel matches results by DeliveryId, so results can complete out of order across partitions. max_concurrent_partitions: 1 restores the old serial behavior. (#192)
  • Replay notifications keep their place. Begin/end replay waits for everything before it, and partition replay begin/end waits for that partition's earlier batches.
  • A batch carrying DeliverWithinMilliseconds (from Cratis/Chronicle#5449) that is only reached after that window, counted from receipt, is answered as Failed without running. A kernel that does not send the field gets the previous behavior.
  • Telemetry: [:chronicle, :observer, :batch, :start | :stop | :exception], [:chronicle, :observer, :batch, :expired], [:chronicle, :observer, :queue].

Changed

  • Reactor and reducer results echo the delivery's DeliveryId.
  • handle/2 can now run in several processes at once. This is documented under Reactors → Concurrency.