1.5.70 July 2nd, 2026
Akka.NET v1.5.70 is a maintenance release that adds a new "last-N" query offset to Akka.Persistence.Query, resolves two Akka.Streams reliability issues and improves BroadcastHub performance under high consumer counts, and fixes a consistent-hashing router bug that could wedge an entire cluster after a 32-bit hash collision.
Akka.Persistence.Query
- Add
Offset.FromEnd(int count)— "last-N events" query offset: IntroducesOffset.FromEnd(int count), a new query-input-only offset type that begins a read journal query at the Nth event from the end of history rather than from the beginning. The offset is resolved at stream materialization into a concreteSequencestart position; no interface changes or wire-format changes are required. Includes opt-in TCK spec (FromEndOffsetSpec) for plugin authors.
Akka.Streams Bug Fixes
- Fix: async enumerable source disposal ordering: Fixes a race in
Source.From(IAsyncEnumerable<T>)where the underlying enumerator could be disposed before all elements were delivered to downstream, causingObjectDisposedExceptionon high-throughput pipelines. - Fix:
ChannelSinkdrops final element on backpressure - Fixes #8285:ChannelSinkwas discarding the last element in a sequence whenever the downstreamChannel<T>applied backpressure during completion. The sink now correctly delivers all elements before signaling completion.
Akka.Streams Performance
- Improve BroadcastHub high-consumer wheel performance: Reduces per-element cost in
BroadcastHubwhen many consumers are attached by optimizing the internal consumer-wheel iteration, yielding measurable throughput improvements at high fan-out.
Akka.Core Bug Fixes
- Fix: consistent-hashing router could wedge cluster-wide after a 32-bit hash collision - Fixes #8031: When two virtual nodes collided in the 32-bit consistent-hash ring (increasingly likely at high routee counts, e.g. when the ring was rebuilt after a node was downed),
ConsistentHash.Createthrew"An entry with the same key already exists". The consistent-hashing router swallowed the exception and returnedNoRouteefor every subsequent message until a manual restart. The ring now linear-probes to the next free slot on a collision instead of throwing. This keeps the hash distribution unchanged and produces a byte-identical ring to prior versions whenever no collision occurs (safe for rolling upgrades), and also protectsAkka.Cluster.Tools'ClusterReceptionist, which builds the same ring.
2 contributors since release 1.5.69
| COMMITS | LOC+ | LOC- | AUTHOR |
|---|---|---|---|
| 22 | 2274 | 332 | Aaron Stannard |
| 1 | 97 | 4 | beminee |
To see the full set of changes in Akka.NET v1.5.70, click here.
Changes:
- d484572 Release Akka.NET v1.5.70 (#8306)
- cdec84e Fix #8031: consistent-hashing router wedges cluster-wide on 32-bit hash collision (#8294) [ #8293, #2, #3, #1 ]
- 71e8a96 Fix ClusterClientSpec with two-phase shutdown handshake (#8008)
- 7976627 Fix ClusterClientSpec flaky shutdown test with ask-pattern confirmation (#8007)
- 611e2ed Fix racy ClusterClientSpec server restart test (#8004)
- 0d0c953 Fix EventFilterTestBase logger-subscription race (#7797, partial) [ #8301 ]
- 2c25543 Fix race condition in TcpSpec connection failure test (#7870)
- 4a2098b Fix race condition in TCP abort test for Linux compatibility (#7815) [ #7813 ]
- 47ebf2a Harden TcpSpec Outgoing_TCP_stream_must_handle_when_connection_actor_terminates_unexpectedly (backport of #7827) (#8301) [ #8132, #8078 ]
- 8d1caea fix: make A_dispatcher_must_process_messages_one_at_a_time deterministic (#8300)
See More
- a8b3b2f fix: prevent ephemeral-port overflow in DotNettyTransportShutdownSpec (#8273)
- 362c9c3 Fix metrics specs race conditions and constructor deadlocks (#7798)
- e473402 Fix race condition in DistributedPubSubRestartSpec (#8013)
- c82fef5 fix: Eliminate race condition in Log_dead_letters test (#7950)
- 01c01e4 fix(cluster.tools): fix race condition in DistributedPubSubRestartSpec (#7924)
- 05bea51 Fix race condition in HubSpec.MergeHub_must_keep_working_even_if_one_of_the_producers_fail (#7852) [ #7712 ]
- 5bc9fb2 Fix race condition in ClusterLogSpec tests (#7831)
- 4078bd4 Release Akka.NET v1.5.70-beta2 (#8292)
- 8b44f14 fix: #8285 ChannelSink drops final element on backpressure (backport to v1.5) (#8291) [ #8289 ]
- 0bbbc62 Release Akka.NET v1.5.70-beta1 (#8283)
- 938a629 Add a "from the end" (last-N) query Offset to Akka.Persistence.Query (#8245) [ #8244 ]
- 9b56af8 Backport PR #8265 and PR #8264 to v1.5
- 3b91d55 fix: backport #8278 — suppress GHSA-2m69-gcr7-jv3q in v1.5 (#8280) [ dev/netclaw#1444 ]
This list of changes was auto generated.