Skip to content

Commit a5b9182

Browse files
Release Akka.NET v1.5.71 (#8493)
* Bump version to 1.5.71 and update release notes * Correct XML escaping in release notes for v1.5.71
1 parent 885f466 commit a5b9182

2 files changed

Lines changed: 57 additions & 15 deletions

File tree

Directory.Build.props

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<PropertyGroup>
33
<Copyright>Copyright © 2013-$([System.DateTime]::Now.Year) Akka.NET Team</Copyright>
44
<Authors>Akka.NET Team</Authors>
5-
<VersionPrefix>1.5.70</VersionPrefix>
5+
<VersionPrefix>1.5.71</VersionPrefix>
66
<PackageIcon>akkalogo.png</PackageIcon>
77
<PackageProjectUrl>https://getakka.net/</PackageProjectUrl>
88
<PackageLicenseExpression>Apache-2.0</PackageLicenseExpression>
@@ -54,29 +54,37 @@
5454
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
5555
</PropertyGroup>
5656
<PropertyGroup>
57-
<PackageReleaseNotes>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.
57+
<PackageReleaseNotes>Akka.NET v1.5.71 is a maintenance release that fixes a Cluster Sharding private-replicator recovery bug, hardens MultiNodeTestRunner conductor reliability, flushes graceful `Disassociate` PDUs before transport force-close on shutdown, and resolves a handful of TestKit, ClusterClientDiscovery, and DotNetty fixes.
5858

59-
**Akka.Persistence.Query**
60-
* [Add `Offset.FromEnd(int count)` — "last-N events" query offset](https://github.com/akkadotnet/akka.net/pull/8245): Introduces `Offset.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 concrete `Sequence` start position; no interface changes or wire-format changes are required. Includes opt-in TCK spec (`FromEndOffsetSpec`) for plugin authors.
59+
**Akka.Cluster.Sharding**
60+
* [Fix Cluster Sharding private replicator recovery](https://github.com/akkadotnet/akka.net/pull/8480): Fixes a bug where a Cluster Sharding private replicator could fail to recover its state, leaving shard state inconsistent after a coordinated shutdown / recovery cycle. Adds a `ClusterShardingReplicatorResiliencySpec` covering the recovery path.
6161

62-
**Akka.Streams Bug Fixes**
63-
* [Fix: async enumerable source disposal ordering](https://github.com/akkadotnet/akka.net/pull/8265): Fixes a race in `Source.From(IAsyncEnumerable&lt;T&gt;)` where the underlying enumerator could be disposed before all elements were delivered to downstream, causing `ObjectDisposedException` on high-throughput pipelines.
64-
* [Fix: `ChannelSink` drops final element on backpressure](https://github.com/akkadotnet/akka.net/pull/8291) - Fixes [#8285](https://github.com/akkadotnet/akka.net/issues/8285): `ChannelSink` was discarding the last element in a sequence whenever the downstream `Channel&lt;T&gt;` applied backpressure during completion. The sink now correctly delivers all elements before signaling completion.
62+
**Akka.Remote**
63+
* [Backport #8421 to v1.5: flush graceful `Disassociate` PDUs before transport force-close on shutdown](https://github.com/akkadotnet/akka.net/pull/8487): Ensures in-flight graceful `Disassociate` control messages are flushed to the wire before the transport force-closes the connection on shutdown, preventing an abrupt teardown from silently dropping them.
64+
* [Akka.Remote: stop, don't restart, failed throttler children](https://github.com/akkadotnet/akka.net/pull/8437) - Fixes [#8433](https://github.com/akkadotnet/akka.net/issues/8433) and [#8434](https://github.com/akkadotnet/akka.net/issues/8434): A failing outbound-throttler child is now stopped rather than restarted, avoiding an unbounded restart loop that could stall remote message throughput.
65+
* [Clarify DotNetty hostname validation direction](https://github.com/akkadotnet/akka.net/pull/8464): Clarifies the direction of the DotNetty hostname validation check so it validates the expected peer identity instead of the local endpoint.
6566

66-
**Akka.Streams Performance**
67-
* [Improve BroadcastHub high-consumer wheel performance](https://github.com/akkadotnet/akka.net/pull/8264): Reduces per-element cost in `BroadcastHub` when many consumers are attached by optimizing the internal consumer-wheel iteration, yielding measurable throughput improvements at high fan-out.
67+
**Akka.Remote.TestKit (MultiNodeTestRunner)**
68+
* [Backport MNTR conductor reliability to v1.5](https://github.com/akkadotnet/akka.net/pull/8488) - Backports [#8431](https://github.com/akkadotnet/akka.net/issues/8431) and [#8485](https://github.com/akkadotnet/akka.net/issues/8485): Hardens the MNTR `BarrierCoordinator`, `Conductor`, `Controller`, `Player`, and `RemoteConnection` against conductor-side races and disconnect handling, reducing multi-node spec flakiness.
6869

69-
**Akka.Core Bug Fixes**
70-
* [Fix: consistent-hashing router could wedge cluster-wide after a 32-bit hash collision](https://github.com/akkadotnet/akka.net/pull/8294) - Fixes [#8031](https://github.com/akkadotnet/akka.net/issues/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.Create` threw `"An entry with the same key already exists"`. The consistent-hashing router swallowed the exception and returned `NoRoutee` for **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 protects `Akka.Cluster.Tools`' `ClusterReceptionist`, which builds the same ring.
70+
**Akka.TestKit**
71+
* [Add AutoDilate metadata to TestKit timeouts](https://github.com/akkadotnet/akka.net/pull/8441): Adds AutoDilate dilation metadata to TestKit timeout expectations so dilated deadlines are correctly tracked and reported.
72+
* [Fix torn read in `PromiseActorRef.GetPath` that made `Path` return null](https://github.com/akkadotnet/akka.net/pull/8436): Fixes a torn read in `PromiseActorRef.GetPath` that could return `null` under concurrent access.
73+
* [Fix double-dilated timeout in `ExpectMsgAsync&lt;T&gt;(Func&lt;T, IActorRef, bool&gt;, ...)`](https://github.com/akkadotnet/akka.net/pull/8430): Fixes a bug where the overload of `ExpectMsgAsync` that takes a predicate could apply its timeout dilation twice, causing spurious timeout failures.
7174

72-
2 contributors since release 1.5.69
75+
**Akka.Cluster.Tools**
76+
* [Fix ClusterClientDiscovery: preserve contact-point subscriptions across rediscovery](https://github.com/akkadotnet/akka.net/pull/8426): Ensures `ClusterClientDiscovery` keeps its contact-point subscriptions alive across rediscovery cycles instead of dropping them.
77+
78+
**Tests**
79+
* [Make `ClusterShardingQueriesSpec` stats/region-state queries converge-then-assert (async)](https://github.com/akkadotnet/akka.net/pull/8311): Hardens `ClusterShardingQueriesSpec` by making its stats and region-state query assertions wait for convergence before asserting, reducing CI flakiness.
80+
81+
1 contributor since release 1.5.70
7382

7483
| COMMITS | LOC+ | LOC- | AUTHOR |
7584
| --- | --- | --- | --- |
76-
| 22 | 2274 | 332 | Aaron Stannard |
77-
| 1 | 97 | 4 | beminee |
85+
| 11 | 1376 | 468 | Aaron Stannard |
7886

79-
To see the full set of changes in Akka.NET v1.5.70, [click here](https://github.com/akkadotnet/akka.net/milestone/153?closed=1).</PackageReleaseNotes>
87+
To see the full set of changes in Akka.NET v1.5.71, [click here](https://github.com/akkadotnet/akka.net/milestone/154?closed=1).</PackageReleaseNotes>
8088
</PropertyGroup>
8189
<ItemGroup Label="Analyzers" Condition="'$(MSBuildProjectName)' != 'Akka'">
8290
<PackageReference Include="Akka.Analyzers" Version="$(AkkaAnalyzerVersion)" PrivateAssets="all" />

RELEASE_NOTES.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,37 @@
1+
#### 1.5.71 August 26th, 2026 ####
2+
3+
Akka.NET v1.5.71 is a maintenance release that fixes a Cluster Sharding private-replicator recovery bug, hardens MultiNodeTestRunner conductor reliability, flushes graceful `Disassociate` PDUs before transport force-close on shutdown, and resolves a handful of TestKit, ClusterClientDiscovery, and DotNetty fixes.
4+
5+
**Akka.Cluster.Sharding**
6+
* [Fix Cluster Sharding private replicator recovery](https://github.com/akkadotnet/akka.net/pull/8480): Fixes a bug where a Cluster Sharding private replicator could fail to recover its state, leaving shard state inconsistent after a coordinated shutdown / recovery cycle. Adds a `ClusterShardingReplicatorResiliencySpec` covering the recovery path.
7+
8+
**Akka.Remote**
9+
* [Backport #8421 to v1.5: flush graceful `Disassociate` PDUs before transport force-close on shutdown](https://github.com/akkadotnet/akka.net/pull/8487): Ensures in-flight graceful `Disassociate` control messages are flushed to the wire before the transport force-closes the connection on shutdown, preventing an abrupt teardown from silently dropping them.
10+
* [Akka.Remote: stop, don't restart, failed throttler children](https://github.com/akkadotnet/akka.net/pull/8437) - Fixes [#8433](https://github.com/akkadotnet/akka.net/issues/8433) and [#8434](https://github.com/akkadotnet/akka.net/issues/8434): A failing outbound-throttler child is now stopped rather than restarted, avoiding an unbounded restart loop that could stall remote message throughput.
11+
* [Clarify DotNetty hostname validation direction](https://github.com/akkadotnet/akka.net/pull/8464): Clarifies the direction of the DotNetty hostname validation check so it validates the expected peer identity instead of the local endpoint.
12+
13+
**Akka.Remote.TestKit (MultiNodeTestRunner)**
14+
* [Backport MNTR conductor reliability to v1.5](https://github.com/akkadotnet/akka.net/pull/8488) - Backports [#8431](https://github.com/akkadotnet/akka.net/issues/8431) and [#8485](https://github.com/akkadotnet/akka.net/issues/8485): Hardens the MNTR `BarrierCoordinator`, `Conductor`, `Controller`, `Player`, and `RemoteConnection` against conductor-side races and disconnect handling, reducing multi-node spec flakiness.
15+
16+
**Akka.TestKit**
17+
* [Add AutoDilate metadata to TestKit timeouts](https://github.com/akkadotnet/akka.net/pull/8441): Adds AutoDilate dilation metadata to TestKit timeout expectations so dilated deadlines are correctly tracked and reported.
18+
* [Fix torn read in `PromiseActorRef.GetPath` that made `Path` return null](https://github.com/akkadotnet/akka.net/pull/8436): Fixes a torn read in `PromiseActorRef.GetPath` that could return `null` under concurrent access.
19+
* [Fix double-dilated timeout in `ExpectMsgAsync<T>(Func<T, IActorRef, bool>, ...)`](https://github.com/akkadotnet/akka.net/pull/8430): Fixes a bug where the overload of `ExpectMsgAsync` that takes a predicate could apply its timeout dilation twice, causing spurious timeout failures.
20+
21+
**Akka.Cluster.Tools**
22+
* [Fix ClusterClientDiscovery: preserve contact-point subscriptions across rediscovery](https://github.com/akkadotnet/akka.net/pull/8426): Ensures `ClusterClientDiscovery` keeps its contact-point subscriptions alive across rediscovery cycles instead of dropping them.
23+
24+
**Tests**
25+
* [Make `ClusterShardingQueriesSpec` stats/region-state queries converge-then-assert (async)](https://github.com/akkadotnet/akka.net/pull/8311): Hardens `ClusterShardingQueriesSpec` by making its stats and region-state query assertions wait for convergence before asserting, reducing CI flakiness.
26+
27+
1 contributor since release 1.5.70
28+
29+
| COMMITS | LOC+ | LOC- | AUTHOR |
30+
| --- | --- | --- | --- |
31+
| 11 | 1376 | 468 | Aaron Stannard |
32+
33+
To see the full set of changes in Akka.NET v1.5.71, [click here](https://github.com/akkadotnet/akka.net/milestone/154?closed=1).
34+
135
#### 1.5.70 July 2nd, 2026 ####
236

337
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.

0 commit comments

Comments
 (0)