Releases: akkadotnet/akka.net
Akka.NET v1.5.31
1.5.31 November 11th 2024
Akka.NET v1.5.31 is a maintenance release that addresses several bugs and added new features.
- Persistence: Add logging for failed DeleteAsync() that was caused by failed SaveSnapshot()
- Persistence: Fix RecoveryTick timer leak
- Serialization.Hyperion: Fix serializer config bug
- Sharding: Fix potential
ArgumentException
during shard re-balancing - Cluster: Fix multiple
Member
with the sameAddress
crashingClusterDaemon
- Core: Fix
Stash
filtering out identicalEnvelope
s - Streams: Fix
ShellRegistered
message deadletter log - Sharding: Make lease release in
Shard.PostStop
be blocking instead of using detached async task - Cluster.Tools: Add missing singleton detection feature for easier infrastructure debugging
Upgrade Advisory
There is a slight change in how actor Stash
behavior. In previous behavior, Stash
will filter out any messages that are identical (see explanation below) when it is prepended with another. It will not do so now, which is the actual intended behavior.
This change will affect Akka.Persistence
users or users who use the Stash.Prepend()
method in their code. You will need to add a de-duplication code if your code depends on sending identical messages multiple times to a persistence actor while it is recovering.
Messages are considered as identical if they are sent from the same sender actor and have a payload message that Equals()
to true against another message. Example payload types would be an object pointing to the same memory address (ReferenceEquals()
returns true), value types (enum, primitives, structs), and classes that implements the IEquatable
interface.
To see the full set of changes in Akka.NET v1.5.31, click here.
2 contributors since release 1.5.30
COMMITS | LOC+ | LOC- | AUTHOR |
---|---|---|---|
9 | 627 | 154 | Gregorius Soedharmo |
4 | 133 | 40 | Aaron Stannard |
Changes:
- fe6fa8d Update RELEASE_NOTES.md for 1.5.31 release (#7384)
- fb526e5 Add missing cluster singleton detection (#7363)
- 322c494 Block lease release in Shard PostStop (#7383)
- 902daf5 clarified that you don't need to handle ShardRegion.StartEntity after version v1.5.15 of Akka.NET (#7380)
- 699aff2 [Streams] Fix ShellRegistered message deadletter log (#7376)
- 3700809 Added reproduction for missing
Stash.Stash
messages in Akka.,Persistence actors (#7374) [ #7373 ] - 67fad90 Fix EventSourced Stash filtering out identical envelopes (#7375)
- 0cbddb5 fixed bugs with multiple
Member
s with sameAddress
crashingClusterDaemon
(#7371) [ #7370 ] - 02157c3 fix potential
ArgumentException
during shard rebalancing (#7367) [ #7365 ] - 7685a6f Fix Hyperion serializer config bug (#7364)
Akka.NET v1.5.30
1.5.30 October 1st 2024
Akka.NET v1.5.29 introduced an interface change on the IScheduler
that unfortunately caused a lot of other plugins to break due to API compatibility issues. v1.5.30 rolls back that change but still fixes the underlying bug in Akka.Persistence's handling and serialziation of timestamps without any interface changes. v1.5.29 will be deprecated from NuGet.
- DData: Remove Hyperion dependency
- Streams: Fix SelectAsync race condition bug
- Core: Add new IWithTimers API to allow sender override
- Persistence: Fix SnapshotMetadata default timestamp value (DateTimeKind.Utc bug)
- Core: Fix AskTimeoutException message formatting bug
To see the full set of changes in Akka.NET v1.5.30, click here.
3 contributors since release 1.5.28
COMMITS | LOC+ | LOC- | AUTHOR |
---|---|---|---|
8 | 259 | 104 | Gregorius Soedharmo |
1 | 10 | 10 | Simon Cropp |
1 | 0 | 1 | Aaron Stannard |
1.5.29 October 1st 2024
Note
Deprecated
This version introduced breaking changes that needs to be reverted. Please use 1.5.30 instead.
Akka.NET v1.5.29 is an emergency patch release that addresses a severe bug for persistence users whom also use protobuf serializer.
- DData: Remove Hyperion dependency
- Streams: Fix SelectAsync race condition bug
- Core: Add new IWithTimers API to allow sender override
- Persistence: Fix SnapshotMetadata default timestamp value (DateTimeKind.Utc bug)
- Core: Fix AskTimeoutException message formatting bug
To see the full set of changes in Akka.NET v1.5.29, click here.
3 contributors since release 1.5.28
COMMITS | LOC+ | LOC- | AUTHOR |
---|---|---|---|
4 | 177 | 14 | Gregorius Soedharmo |
1 | 10 | 10 | Simon Cropp |
1 | 0 | 1 | Aaron Stannard |
Changes:
- 6fd8701 Update RELEASE_NOTES.md for 1.5.30 release (#7355)
- d98d37f Fix SnapshotMetadata.Timestamp bug (#7354)
- e5aebed Revert #7349 and #7352 (#7353)
This list of changes was auto generated.
Akka.NET v1.5.29
1.5.29 October 1st 2024
Akka.NET v1.5.29 is an emergency patch release that addresses a severe bug for persistence users whom also use protobuf serializer.
- DData: Remove Hyperion dependency
- Streams: Fix SelectAsync race condition bug
- Core: Add new IWithTimers API to allow sender override
- Persistence: Fix SnapshotMetadata default timestamp value (DateTimeKind.Utc bug)
- Core: Fix AskTimeoutException message formatting bug
To see the full set of changes in Akka.NET v1.5.29, click here.
3 contributors since release 1.5.28
COMMITS | LOC+ | LOC- | AUTHOR |
---|---|---|---|
4 | 177 | 14 | Gregorius Soedharmo |
1 | 10 | 10 | Simon Cropp |
1 | 0 | 1 | Aaron Stannard |
Changes:
- f5c4e63 Fix unit tests related to the Persistence DateTime bug (#7352)
- 5db9d86 Update RELEASE_NOTES.md for 1.5.29 release (#7351)
- 42dfbce Fix AskTimeoutException message formatting bug (#7350)
- 33fd92d Fix DateTimeOffset.DateTime UTC bug (#7349)
- c295010 sdk 8.0.402 (#7348)
- 554086c Add IWithTimers API with sender override (#7341)
- 8e2e11d Streams: Fix SelectAsync race condition bug (#7338)
- 6f937b5 Remove Hyperion from DData (#7337)
This list of changes was auto generated.
Akka.NET v1.5.28
1.5.28 September 5th 2024
Akka.NET v1.5.28 is a release with several bug fixes and improvements.
- Singleton: Fix oldest member transition log message
- Core: Make ITimeProvider injectable into consuming classes
- Singleton: Fix ClusterSingletonProxy failed to re-acquire singleton actor
- Persistence: Make DateTime.UtcNow the default SnapshotMetadata timestamp
- Remote.TestKit: Improve diagnostics and code modernization
- Persistence.TestKit: Add new ConnectionInterceptor and improve usability
- Sharding: Disable durable DData if RememberEntity does not use DData storage
- Persistence.Sql.Common: Harden journal and snapshot store initialization
- Streams: Fix missing AlsoTo public API in Flow, SubFlow, and Source
- Streams: Fix StreamRefSerializer NRE bug
- Persistence: Fix SnapshotStore.SaveSnapshot metadata timestamp bug
- Persistence.TCK: Add new optional SnapshotStore save data integrity spec
To see the full set of changes in Akka.NET v1.5.28, click here.
2 contributors since release 1.5.27.1
COMMITS | LOC+ | LOC- | AUTHOR |
---|---|---|---|
10 | 5318 | 5153 | Aaron Stannard |
8 | 1568 | 158 | Gregorius Soedharmo |
Changes:
- 3df80f2 Update RELEASE_NOTES.md for 1.5.28 release (#7336)
- cfd25ef Persistence.TCK: Add SnapshotStore SaveSnapshot spec (#7335)
- cb11702 Fix SaveSnapshot timestamp metadata (#7334)
- e8beec4 Fix StreamRefSerializer NRE bug (#7333)
- b47b922 Move ClusterClientDiscovery docs to H1 (#7331)
- df33c31 Update RELEASE_NOTES.md for 1.5.28-beta1 release (#7329)
- 4856230 Fix missing AlsoTo public APIs (#7328)
- 2502ea9 Akka.Persistence.Sql.Common: harden
SqlJournal
andSqlSnapshotStore
against initialization failures (#7325) - ae942d0 Don't enable durable DData for RE unless DData is storage engine (#7327) [ #7326 ]
- 19162bd Improve Akka.Persistence.TestKit (#7324)
See More
- 355439e TestKit and Akka.Remote.TestKit: diagnostic improvements and code modernization (#7321)
- 801ce60 rename ".NET 7" build tasks to just ".NET" (#7323)
- d1f481f fixed ClusterClientDiscoverySpec (#7322)
- 5e2bd0e chore: added 2024 headers (#7319)
- 96c6a60 fixed Akka.Persistence.Tck snapshot load specs (#7320)
- d6a8063 Akka.Persistence: Made
DateTime.UtcNow
the default timestamp forSnapshotMetdata
(#7313) - 5e7be3a Fix ClusterSingletonProxy fails to reacquire singleton actor (#7315)
- da3ded3 Akka.Actor: make
ITimeProvider
injectable into consuming classes (#7314) - acc8bd3 Update ClusterClientDiscovery Akka.Hosting documentation (#7310)
- 177a7c9 Akka.Cluster.Tools.Singleton: log the correct oldest member on transition (#7309)
This list of changes was auto generated.
Akka.NET v1.5.28-beta1
1.5.28-beta1 August 23rd 2024
Akka.NET v1.5.28-beta1 is a patch beta release with several bug fixes and improvements.
- Singleton: Fix oldest member transition log message
- Core: Make ITimeProvider injectable into consuming classes
- Singleton: Fix ClusterSingletonProxy failed to re-acquire singleton actor
- Persistence: Make DateTime.UtcNow the default SnapshotMetadata timestamp
- Remote.TestKit: Improve diagnostics and code modernization
- Persistence.TestKit: Add new ConnectionInterceptor and improve usability
- Sharding: Disable durable DData if RememberEntity does not use DData storage
- Persistence.Sql.Common: Harden journal and snapshot store initialization
- Streams: Fix missing AlsoTo public API in Flow, SubFlow, and Source
To see the full set of changes in Akka.NET v1.5.28-beta1, click here.
COMMITS | LOC+ | LOC- | AUTHOR |
---|---|---|---|
10 | 5318 | 5153 | Aaron Stannard |
4 | 1440 | 115 | Gregorius Soedharmo |
Changes:
- df33c31 Update RELEASE_NOTES.md for 1.5.28-beta1 release (#7329)
- 4856230 Fix missing AlsoTo public APIs (#7328)
- 2502ea9 Akka.Persistence.Sql.Common: harden
SqlJournal
andSqlSnapshotStore
against initialization failures (#7325) - ae942d0 Don't enable durable DData for RE unless DData is storage engine (#7327) [ #7326 ]
- 19162bd Improve Akka.Persistence.TestKit (#7324)
- 355439e TestKit and Akka.Remote.TestKit: diagnostic improvements and code modernization (#7321)
- 801ce60 rename ".NET 7" build tasks to just ".NET" (#7323)
- d1f481f fixed ClusterClientDiscoverySpec (#7322)
- 5e2bd0e chore: added 2024 headers (#7319)
- 96c6a60 fixed Akka.Persistence.Tck snapshot load specs (#7320)
See More
- d6a8063 Akka.Persistence: Made
DateTime.UtcNow
the default timestamp forSnapshotMetdata
(#7313) - 5e7be3a Fix ClusterSingletonProxy fails to reacquire singleton actor (#7315)
- da3ded3 Akka.Actor: make
ITimeProvider
injectable into consuming classes (#7314) - acc8bd3 Update ClusterClientDiscovery Akka.Hosting documentation (#7310)
- 177a7c9 Akka.Cluster.Tools.Singleton: log the correct oldest member on transition (#7309)
This list of changes was auto generated.
Akka.NET v1.5.27.1
1.5.27.1 July 25th 2024
Akka.NET v1.5.27.1 is a minor patch to fix a race condition between the logging and remoting system.
To see the full set of changes in Akka.NET v1.5.27.1, click here.
COMMITS | LOC+ | LOC- | AUTHOR |
---|---|---|---|
1 | 4 | 0 | Aaron Stannard |
1 | 10 | 3 | Gregorius Soedharmo |
Changes:
- 55827b7 Update RELEASE_NOTES.md for 1.5.27.1 (#7306)
- 3e2d49c Fix remoting logging DefaultAddress race condition (#7305)
- 3eacb6c Added v1.5.28 placeholder
This list of changes was auto generated.
Akka.NET v1.5.27
1.5.27 July 25th 2024
Akka.NET v1.5.27 is a significant release that includes new features, mission-critical bug fixes, and some performance improvements.
Major Akka.Cluster.Sharding and Akka.Cluster.Tools.Singleton Bug Fixes
In all prior versions of Akka.NET, there are two high impact distributed systems bugs:
- Akka.Cluster.Tools.Singleton: singleton moves earlier than expected - as soon as new node joins
- Akka.Cluster.Sharding: duplicate shards / entities
As we discovered during the course of our pains-taking bug investigation, these were, in fact, the same issue:
- The
ClusterSingletonManager
is supposed to always belong on the oldest node of a given role type, but an original design error from the time Akka.Cluster.Tools was first introduced to Akka.NET meant that nodes were always sorted in descending order ofUpNumber
. This is backwards: nodes should always be sorted in ascending order ofUpNumber
- this means that the oldest possible node is always at the front of the "who is oldest?" list held by theClusterSingletonManager
. This explains why the singleton could appear to move early during deployments and restarts. - The
ClusterSingletonManager
was suspectible to a race condition where if nodes were shutdown and restarted with the same address in under 20 seconds, the default "down removal margin" used by theClusterSingletonManager
to tolerate dirty exits, it would be possible after multiple successive, fast, restarts for multiple instances of the singleton to be alive at the same time (for a short period.)
Both of these varieties of problem, duplicate singletons, is what lead to duplicate shards.
As a result we've made the following fixes:
- Akka.Cluster.Tools: deprecate ClustersSingletonManagerSettings.ConsiderAppVersion -
AppVersion
is no longer considered for singleton placement as it could easily result in split brains. - Akka.Cluster.Tools: fix mutability and oldest state bugs with
ClusterSingletonManager
- resolves the issue with rapid rolling restarts creating duplicates. We've tested this fix in our test lab across thousands of coordinator restarts and haven't been able to reproduce the issue since (we could easily do it before.) - Akka.Cluster.Tools.Singleton / Akka.Cluster.Sharding: fix duplicate shards caused by incorrect
ClusterSingletonManager
HandOver
- we fixed the member age problem here, which could cause a second singleton to start at inappropriate times.
Akka.Discovery and ClusterClient
Discovery Support
In Akka.NET v1.5.27 we've added support for using Akka.Cluster.Tools.ClusterClient alongside with Akka.Discovery plugins to automatically discover the initial contacts you need for ClusterClientReceptionist
instances in your environment.
You can read the documentation for how this works here: https://getakka.net/articles/clustering/cluster-client.html#contact-auto-discovery-using-akkadiscovery
Related PRs and issues:
- Akka.Discovery: Add multi-config support to config-based discovery
- Cluster.Tools: Fix missing VerboseLogging in ClusterClientSettings.Copy method
- Cluster.Tools: Improve ClusterClientDiscovery to avoid thundering herd problem
- Cluster.Tools: Change ClusterClientDiscovery to use the new Akka.Management "/cluster-client/receptionist" endpoint
Other Bug Fixes and Improvements
- Akka.Cluster: improve gossip serialization performance
- Akka.Streams: Fix
ActorMaterializerImpl
null
LogSource
- Akka.Streams:
AlsoTo
may not be failing graph when its sink throws exception - Akka.DistributedData: if
lmdb.dir
is null or empty, log a warning and set to default
To see the full set of changes in Akka.NET v1.5.27, click here.
COMMITS | LOC+ | LOC- | AUTHOR |
---|---|---|---|
15 | 835 | 1001 | Aaron Stannard |
12 | 1123 | 207 | Gregorius Soedharmo |
Changes:
- b34d645 V1.5.27 release notes (#7303)
- 6a81fd3 Akka.Cluster.Tools: deprecate ClustersSingletonManagerSettings.ConsiderAppVersion (#7302)
- 7180810 Akka.Cluster.Tools: fix mutability and oldest state bugs with
ClusterSingletonManager
(#7298) - 6b6afe4 Add AlsoTo downstream failure propagation support (#7301)
- 7811504 Fix ActorMaterializerImpl null LogSource (#7300)
- f2e81c5 Akka.Cluster.Tools.Singleton / Akka.Cluster.Sharding: fix duplicate shards caused by incorrect
ClusterSingletonManager
HandOver
(#7297) [ #6973, #6793, #7196 ] - f4501e8 migrated
ClusterSingletonManager
toswitch
statements (#7296) - 9eb670a
ShardCoordinator
: misc cleanup (#7295) - a6daed7 remove unused
reference.confg
from DistributedData.LightningDb (#7294) - d3b3613 DData: if
lmdb.dir
is null or empty, log a warning and set to default (#7292)
See More
- 50ef7b9 Akka.Cluster: added sanity check for
Member.AgeComparer
(#7291) [ #6973 ] - f7f9078 Akka.Cluster.Sharding: enable
prefer-oldest
by default onReplicator
(#7290) - 4b7cff3 Akka.Cluster.Sharding: added tests for DData consistency settings (#7288)
- 5176dfb Akka.Cluster: improve gossip serialization performance (#7281)
- 9981d83 Fix busted Windows Build stage (#7283)
- 7947c1f Optimize cluster message serializer benchmarks (#7282)
- 7fb0c2b Add
ActorBase
lifecycle flow unit tests (#7128) - 8843a21 Akka.Cluster:
ClusterMessageSerializer
benchmarks (#7280) - 9f5de84 Akka.Cluster: harden ignored gossip messages (#7278)
- 8f200ef Update RELEASE_NOTES.md for 1.5.27-beta2 release (#7277)
- 03a469f Fix ClusterClientDiscovery, missing port name in lookup (#7276)
- 67e7754 Update RELEASE_NOTES.md for 1.5.27-beta1 release (#7275)
- e4e4ca4 Improve ClusterClientDiscovery feature (#7274)
- 7f37465 Fix possible problems with ClusterClient Discovery (#7270)
- dab2a5e Update failure message syntax (#7273)
- 000d8fe Fix missing ClusterClientSettings.VerboseLogging in Copy method (#7272)
- 399c548 Update ConfigServiceDiscovery to support multi-config (#7271)
- 7136919 Added v1.5.27 placeholder
- f797f8d Update RELEASE_NOTES.md for 1.5.26 release (#7268)
This list of changes was auto generated.
Akka.NET v1.5.27-beta2
1.5.27-beta2 July 3rd 2024
COMMITS | LOC+ | LOC- | AUTHOR |
---|---|---|---|
1 | 1 | 1 | Gregorius Soedharmo |
1.5.27-beta1 July 3rd 2024
Akka.NET v1.5.27-beta1 improves upon the new ClusterClient initial contact auto-discovery feature to make it more robust in implementation.
- Akka.Discovery: Add multi-config support to config-based discovery
- Cluster.Tools: Fix missing VerboseLogging in ClusterClientSettings.Copy method
- Cluster.Tools: Improve ClusterClientDiscovery to avoid thundering herd problem
- Cluster.Tools: Change ClusterClientDiscovery to use the new Akka.Management "/cluster-client/receptionist" endpoint
COMMITS | LOC+ | LOC- | AUTHOR |
---|---|---|---|
5 | 422 | 183 | Gregorius Soedharmo |
1 | 4 | 0 | Aaron Stannard |
1 | 1 | 1 | Sean Killeen |
Changes:
- 8f200ef Update RELEASE_NOTES.md for 1.5.27-beta2 release (#7277)
- 03a469f Fix ClusterClientDiscovery, missing port name in lookup (#7276)
- 67e7754 Update RELEASE_NOTES.md for 1.5.27-beta1 release (#7275)
- e4e4ca4 Improve ClusterClientDiscovery feature (#7274)
- 7f37465 Fix possible problems with ClusterClient Discovery (#7270)
- dab2a5e Update failure message syntax (#7273)
- 000d8fe Fix missing ClusterClientSettings.VerboseLogging in Copy method (#7272)
- 399c548 Update ConfigServiceDiscovery to support multi-config (#7271)
- 7136919 Added v1.5.27 placeholder
- f797f8d Update RELEASE_NOTES.md for 1.5.26 release (#7268)
This list of changes was auto generated.
Akka.NET v1.5.27-beta1
1.5.27-beta1 July 3rd 2024
Akka.NET v1.5.27-beta1 improves upon the new ClusterClient initial contact auto-discovery feature to make it more robust in implementation.
- Akka.Discovery: Add multi-config support to config-based discovery
- Cluster.Tools: Fix missing VerboseLogging in ClusterClientSettings.Copy method
- Cluster.Tools: Improve ClusterClientDiscovery to avoid thundering herd problem
- Cluster.Tools: Change ClusterClientDiscovery to use the new Akka.Management "/cluster-client/receptionist" endpoint
COMMITS | LOC+ | LOC- | AUTHOR |
---|---|---|---|
5 | 422 | 183 | Gregorius Soedharmo |
1 | 4 | 0 | Aaron Stannard |
1 | 1 | 1 | Sean Killeen |
Changes:
- 67e7754 Update RELEASE_NOTES.md for 1.5.27-beta1 release (#7275)
- e4e4ca4 Improve ClusterClientDiscovery feature (#7274)
- 7f37465 Fix possible problems with ClusterClient Discovery (#7270)
- dab2a5e Update failure message syntax (#7273)
- 000d8fe Fix missing ClusterClientSettings.VerboseLogging in Copy method (#7272)
- 399c548 Update ConfigServiceDiscovery to support multi-config (#7271)
- 7136919 Added v1.5.27 placeholder
- f797f8d Update RELEASE_NOTES.md for 1.5.26 release (#7268)
This list of changes was auto generated.
Akka.NET v1.5.26
1.5.26 June 27th 2024
Akka.NET v1.5.26 introduces a new Akka.Cluster.Tools feature and a logging improvement.
Preliminary ClusterClient Initial Contact Auto-Discovery Feature
To use this feature, you will need to use Akka.Discovery implementation (Kubernetes or Azure) version 1.5.26-beta1 or higher
This feature allows ClusterClient to use Akka.Discovery to automatically query for cluster client receptionists inside a dynamic environment such as Kubernetes.
The preliminary documentation for this feature can be read here
You can see the full set of changes for Akka.NET v1.5.26 here.
COMMITS | LOC+ | LOC- | AUTHOR |
---|---|---|---|
3 | 45 | 11 | Aaron Stannard |
2 | 945 | 15 | Gregorius Soedharmo |
Changes:
- c8fc3d4 Add notes to cluster client bit
- 8d60093 Update RELEASE_NOTES.md for 1.5.26 release
- 1cce480 Update ClusterClient documentation to include the new discovery feature (#7265)
- 0fd7ca0 Improve traceability of
ITimerMsg
(#7262) - 8fd8c62 Add ClusterClient initial contact discovery feature (#7261)
- 299fedf made examples, benchmarks, and internal libraries unpackable (#7263)
- 851a72b Added v1.5.26 placeholder (#7258)
This list of changes was auto generated.