|
2 | 2 | <PropertyGroup> |
3 | 3 | <Copyright>Copyright © 2013-$([System.DateTime]::Now.Year) Akka.NET Team</Copyright> |
4 | 4 | <Authors>Akka.NET Team</Authors> |
5 | | - <VersionPrefix>1.5.70</VersionPrefix> |
| 5 | + <VersionPrefix>1.5.71</VersionPrefix> |
6 | 6 | <PackageIcon>akkalogo.png</PackageIcon> |
7 | 7 | <PackageProjectUrl>https://getakka.net/</PackageProjectUrl> |
8 | 8 | <PackageLicenseExpression>Apache-2.0</PackageLicenseExpression> |
|
54 | 54 | <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies> |
55 | 55 | </PropertyGroup> |
56 | 56 | <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. |
58 | 58 |
|
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. |
61 | 61 |
|
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<T>)` 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<T>` 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. |
65 | 66 |
|
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. |
68 | 69 |
|
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<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. |
71 | 74 |
|
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 |
73 | 82 |
|
74 | 83 | | COMMITS | LOC+ | LOC- | AUTHOR | |
75 | 84 | | --- | --- | --- | --- | |
76 | | -| 22 | 2274 | 332 | Aaron Stannard | |
77 | | -| 1 | 97 | 4 | beminee | |
| 85 | +| 11 | 1376 | 468 | Aaron Stannard | |
78 | 86 |
|
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> |
80 | 88 | </PropertyGroup> |
81 | 89 | <ItemGroup Label="Analyzers" Condition="'$(MSBuildProjectName)' != 'Akka'"> |
82 | 90 | <PackageReference Include="Akka.Analyzers" Version="$(AkkaAnalyzerVersion)" PrivateAssets="all" /> |
|
0 commit comments