Skip to content

Latest commit

 

History

History
1720 lines (1264 loc) · 106 KB

RELEASE_NOTES.md

File metadata and controls

1720 lines (1264 loc) · 106 KB

1.5.32 November 12th 2024

Placeholder for nightlies

1.5.31 November 11th 2024

Akka.NET v1.5.31 is a maintenance release that addresses several bugs and added new features.

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

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.

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.

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

1.5.28 September 5th 2024

Akka.NET v1.5.28 is a release with several bug fixes and improvements.

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

1.5.28-beta1 August 23rd 2024

Akka.NET v1.5.28-beta1 is a patch beta release with several bug fixes and improvements.

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

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

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:

  1. Akka.Cluster.Tools.Singleton: singleton moves earlier than expected - as soon as new node joins
  2. 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:

  1. 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 of UpNumber. This is backwards: nodes should always be sorted in ascending order of UpNumber - this means that the oldest possible node is always at the front of the "who is oldest?" list held by the ClusterSingletonManager. This explains why the singleton could appear to move early during deployments and restarts.
  2. 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 the ClusterSingletonManager 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.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:

Other Bug Fixes and Improvements

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

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.

COMMITS LOC+ LOC- AUTHOR
5 422 183 Gregorius Soedharmo
1 4 0 Aaron Stannard
1 1 1 Sean Killeen

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

1.5.25 June 14th 2024

Akka.NET v1.5.25 includes a critical bug fix for logging and some other minor fixes.

Logging Errors Introduced in v1.5.21

Versions [v1.5.21,v1.5.24] are all affected by Akka.Logging: v1.5.21 appears to have truncated log source, timestamps, etc from all log messages - this was a bug introduced when we added the log-filtering feature we shipped in Akka.NET v1.5.21.

This issue has been resolved in v1.5.25 and we've added regression tests to ensure that the log format gets version-checked just like our APIs going forward.

Other fixes:

You can see the full set of changes for Akka.NET v1.5.25 here.

COMMITS LOC+ LOC- AUTHOR
6 347 44 Aaron Stannard
2 1197 1015 Gregorius Soedharmo

1.5.24 June 7th 2024

Akka.NET v1.5.24 is a patch release for Akka.NET that addresses CVE-2018-8292 and also adds a quality of life improvement to IActorRef serialization.

COMMITS LOC+ LOC- AUTHOR
3 35 22 Gregorius Soedharmo
1 26 51 Mike Perrin
1 15 2 Aaron Stannard

You can see the full set of changes for Akka.NET v1.5.24 here.

1.5.23 June 4th 2024

COMMITS LOC+ LOC- AUTHOR
2 299 44 Aaron Stannard
1 47 49 Gregorius Soedharmo
1 1 1 Hassan Abu Bakar

You can see the full set of changes for Akka.NET v1.5.23 here.

1.5.22 June 4th 2024

Akka.NET v1.5.22 is a patch release for Akka.NET with a few bug fixes and logging improvement.

On Resolving CVE-2018-8292

In order to resolve this CVE, we had to update DotNetty.Handlers to the latest version and unfortunately, this comes with about 10% network throughput performance hit. We are looking into possible replacement for DotNetty to improve this performance lost in the future (see #7225 for updates).

Before

Num clients, Total [msg], Msgs/sec, Total [ms], Start Threads, End Threads  
         1,  200000,    125000,    1600.62,            46,              76  
         5, 1000000,    494072,    2024.04,            84,              95  
        10, 2000000,    713013,    2805.73,           103,             107  
        15, 3000000,    724463,    4141.38,           115,             115  
        20, 4000000,    714669,    5597.66,           123,             123  
        25, 5000000,    684932,    7300.37,           131,             107  
        30, 6000000,    694525,    8639.88,           115,              93  

After

Num clients, Total [msg], Msgs/sec, Total [ms], Start Threads, End Threads
         1,  200000,    123763,    1616.32,            46,              73
         5, 1000000,    386101,    2590.66,            81,              90
        10, 2000000,    662691,    3018.54,            98,             104
        15, 3000000,    666223,    4503.86,           112,             113
        20, 4000000,    669681,    5973.89,           121,             113
        25, 5000000,    669255,    7471.86,           121,             105
        30, 6000000,    669121,    8967.61,           113,              92
COMMITS LOC+ LOC- AUTHOR
6 167 188 Aaron Stannard
3 93 10 Gregorius Soedharmo

You can see the full set of changes for Akka.NET v1.5.22 here.

1.5.21 May 28th 2024

Akka.NET v1.5.21 is a significant release for Akka.NET with a major feature additions and bug fixes.

Log Message Filtering

You can now filter out unwanted log messages based on either its source or message content. Documentation can be read in the logging documentation.

New Akka.Analyzers Rule

Added AK1006 rule to suggest user to use PersistAll() and PersistAllAsync() when applicable. Documentation can be read in the documentation

COMMITS LOC+ LOC- AUTHOR
7 900 53 Aaron Stannard
5 497 1187 Gregorius Soedharmo
1 1 1 Åsmund

You can see the full set of changes for Akka.NET v1.5.21 here.

1.5.20 April 29th 2024

Akka.NET v1.5.20 is a patch release for Akka.NET with a few bug fixes and Akka.Streams quality of life improvement.

COMMITS LOC+ LOC- AUTHOR
5 360 93 Aaron Stannard
3 187 20 Gregorius Soedharmo
1 81 41827 Yan Pitangui

You can see the full set of changes for Akka.NET v1.5.20 here.

1.5.19 April 15th 2024

Akka.NET v1.5.19 is a patch release for Akka.NET with a few bug fixes.

Akka.Analyzers

We've added 3 new analyzer rules to Akka.Analyzers:

  • AK1004

    AK1004 warns users to replace any ScheduleTellOnce() and ScheduleTellRepeatedly() invocation inside an actor to implement IWithTimers interface instead. Documentation can be read here

  • AK1005

    AK1005 warns users about improper Sender and Self access from inside an async lambda callbacks inside actor implementation. Documentation can be read here

  • AK1007

    AK1007 is an error message for any Timers.StartSingleTimer() and Timers.StartPeriodicTimer() invocation from inside the actor PreRestart() and AroundPreRestart() lifecycle callback methods. Documentation can be read here

COMMITS LOC+ LOC- AUTHOR
9 366 1951 Aaron Stannard
9 14 14 dependabot[bot]
2 516 30 Gregorius Soedharmo

You can see the full set of changes for Akka.NET v1.5.19 here.

1.5.18 March 13th 2024

Akka.NET v1.5.18 is a patch release for Akka.NET with a feature addition.

COMMITS LOC+ LOC- AUTHOR
1 9 9 Aaron Stannard
1 1 1 dependabot[bot]

You can see the full set of changes for Akka.NET v1.5.18 here.

1.5.17.1 March 1st 2024

Akka.NET v1.5.17.1 is a patch release for Akka.NET with a bug fix.

COMMITS LOC+ LOC- AUTHOR
1 1 1 Gregorius Soedharmo
1 1 1 Aaron Stannard

1.5.17 February 29th 2024

Akka.NET v1.5.17 is a patch release for Akka.NET with some feature additions and bug fixes.

Akka.Analyzers

  • The AK1001 rule has been removed due to the discussion here.
  • AK1002 has been enhanced with better problem detection.

You can see the full set of changes for Akka.NET v1.5.17 here.

COMMITS LOC+ LOC- AUTHOR
7 1342 732 Gregorius Soedharmo
4 5 5 dependabot[bot]
3 158 4 Aaron Stannard
2 3 3 hassan-me
1 2 8 Massimiliano Donini
1 12 12 Mattias Jakobsson

1.5.16 January 29th 2024

Akka.NET v1.5.16 is a patch release for Akka.NET with some feature additions and changes.

Akka.Analyzers

We have expanded Akka.Analyzer and introduced 2 new rules to the Roslyn analyzer:

  • AK1002: Error: Must not await Self.GracefulStop() inside ReceiveAsync<T>() or ReceiveAnyAsync
  • AK1003: Warning: ReceiveAsync<T>() or ReceiveAnyAsync() message handler without async lambda body

See the full set of supported Akka.Analyzers rules here

You can see the full set of changes for Akka.NET v1.5.16 here.

COMMITS LOC+ LOC- AUTHOR
6 1268 628 Gregorius Soedharmo
5 6 6 dependabot[bot]
2 286 224 Aaron Stannard
1 2120 0 Yan Pitangui
1 2 2 Mattias Jakobsson
1 2 0 Ebere Abanonu
1 0 65 Simon Cropp

1.5.15 January 9th 2024

Akka.NET v1.5.15 is a significant release for Akka.NET with some major feature additions and changes.

Akka.Analyzers

The core Akka NuGet package now references Akka.Analyzers, a new set of Roslyn Code Analysis and Code Fix Providers that we distribute via NuGet. You can see the full set of supported Akka.Analyzers rules here.

Akka.Cluster.Sharding Changes

In #6863 we made some major changes to the Akka.Cluster.Sharding API aimed at helping improve Cluster.Sharding's performance and ease of use. However, these changes may require some effort on the part of the end user in order to take full advantage:

  • ExtractEntityId and ExtractShardId have been deprecated as they fundamentally can't be extended and can't benefit from the performance improvements introduced into Akka.NET v1.5.15. It is imperative that you migrate to using the HashCodeMessageExtractor instead.
  • You no longer need to handle ShardRegion.StartEntity or ShardingEnvelope inside your IMessageExtractor implementations, and in fact AK2001 (part of Akka.Analyzers) will automatically detect this and remove those handlers for you. Akka.NET automatically handles these two message types internally now.

ClusterClient Serialization Changes

In #7032 we solved a long-standing serialization problem with the ClusterClient where Send, SendToAll, and Publish were not handled by the correct internal serializer. This has been fixed by default in Akka.NET v1.5.15, but this can potentially cause wire compatibility problems during upgrades - therefore we have introduced a configuration setting to toggle this:

# re-enable legacy serialization
akka.cluster.client.use-legacy-serialization = on

That setting is currently set to on by default, so v1.5.15 will still behave like previous versions of Akka.NET. However, if you have been affected by serialization issues with the ClusterClient (such as #6803) you should toggle this setting to off.

See "Akka.NET v1.5.15 Upgrade Advisories" for full details on some of the things you might need to do while upgrading to this version of Akka.NET.

You can see the full set of changes for Akka.NET v1.5.15 here.

COMMITS LOC+ LOC- AUTHOR
16 2228 1490 Aaron Stannard
9 9 9 dependabot[bot]
2 610 173 Gregorius Soedharmo
2 337 0 Drew
2 124 118 Lehonti Ramos
1 2 2 Sergey Popov
1 108 25 Yaroslav Paslavskiy
1 1 1 Bert Lamb

1.5.14 September 24th 2023

Akka.NET v1.5.14 is a maintenance release with several bug fixes.

If you want to see the full set of changes made in Akka.NET v1.5.14, click here.

COMMITS LOC+ LOC- AUTHOR
11 25 21 dependabot[bot]
3 14 2 Aaron Stannard
3 114 369 Simon Cropp
2 36 31 Gregorius Soedharmo
1 41 43 Lehonti Ramos
1 38 0 Yaroslav Paslavskiy
1 3 0 Sean Killeen
1 227 25 Drew
1 1 1 szaliszali

1.5.13 August 26th 2023

Akka.NET v1.5.13 is a maintenance release with several bug fixes and also performance and QOL improvements.

If you want to see the full set of changes made in Akka.NET v1.5.13, click here.

COMMITS LOC+ LOC- AUTHOR
18 25 25 dependabot[bot]
6 435 200 Gregorius Soedharmo
4 512 293 Aaron Stannard
2 3 7 Simon Cropp
1 7 0 Sergey Popov
1 66 17 Ismael Hamed
1 1 1 HamzaAmjad-RG

1.5.13-beta1 August 26th 2023

Akka.NET v1.5.13-beta1 is a maintenance release with several performance and QOL improvements.

If you want to see the full set of changes made in Akka.NET v1.5.13-beta1, click here.

COMMITS LOC+ LOC- AUTHOR
11 15 15 dependabot[bot]
3 302 143 Aaron Stannard
2 384 195 Gregorius Soedharmo
1 7 0 Sergey Popov
1 66 17 Ismael Hamed
1 3 5 Simon Cropp
1 1 1 HamzaAmjad-RG

1.5.12 August 2nd 2023

Akka.NET v1.5.12 is a maintenance release with a minor API change and a minor bug fix.

If you want to see the full set of changes made in Akka.NET v1.5.12, click here.

COMMITS LOC+ LOC- AUTHOR
5 34 18 Aaron Stannard
2 150 51 Gregorius Soedharmo
1 1 1 dependabot[bot]
1 1 1 Jim Aho

1.5.11 July 27th 2023

Akka.NET v1.5.11 is a maintenance release with a minor API change and internal code modernization/cleanup.

If you want to see the full set of changes made in Akka.NET v1.5.11, click here.

COMMITS LOC+ LOC- AUTHOR
1 465 321 Gregorius Soedharmo
1 22 2 Aaron Stannard

1.5.10 July 26th 2023

Akka.NET v1.5.10 is a maintenance release with a minor API change.

If you want to see the full set of changes made in Akka.NET v1.5.10, click here.

COMMITS LOC+ LOC- AUTHOR
1 70 12 Gregorius Soedharmo

1.5.9 July 18th 2023

Akka.NET v1.5.9 is a maintenance release that introduces some performance improvements and internal code cleanup/modernization.

Changes:

Improvements:

Code modernization:

Update dependency versions:

Akka.TestKit.Xunit Changes

Due to breaking API change in Xunit 2.5.0, updating to Akka.NET 1.5.9 might break your unit tests. Some of the breaking change that we've noticed are:

  • AkkaEqualException constructor has been changed due to changes in Xunit API. If you're using this class, please use the AkkaEqualException.ForMismatchedValues() static method instead of using the constructor.
  • Testing for exception types by calling async code inside a sync delegate will not unwrap the AggregateException thrown. Either use async all the way or manually unwrap the exception.
  • Xunit Asset.Equal() does not automatically check for collection item equality anymore, that means doing Assert.Equal() between two dictionary or list would not work anymore.
  • Some Xunit classes have been changed from public to private. If you're using these classes, you will need to refactor your code.
  • FsCheck.Xunit: Xunit Roslyn analyzer has become a bit too overzealous and insists that all unit test method can only return either void or Task and will raise a compilation error if you tried to return anything else. If you're using FsCheck.Xunit, you will need to use a pragma to disable this check: #pragma warning disable xUnit1028.

If you want to see the full set of changes made in Akka.NET v1.5.9, click here.

COMMITS LOC+ LOC- AUTHOR
12 171 155 dependabot[bot]
7 466 165 Aaron Stannard
4 1648 1725 Simon Cropp
1 9 4 Gregorius Soedharmo
1 7 1 Michael Buck

1.5.8 June 15th 2023

Akka.NET v1.5.8 is a maintenance release that introduces some new features and fixes some bugs with Akka.NET v1.5.7 and earlier.

If you want to see the full set of changes made in Akka.NET v1.5.8, click here.

COMMITS LOC+ LOC- AUTHOR
9 11 11 dependabot[bot]
2 8 0 Aaron Stannard
2 75 4 Gregorius Soedharmo
2 132 158 Simon Cropp
1 431 1 Ismael Hamed
1 1 1 Andrea Di Stefano

1.5.7 May 17th 2023

Akka.NET v1.5.7 is a significant release that introduces a major new reliable message delivery feature to Akka.NET and Akka.Cluster.Sharding: Akka.Delivery.

Akka.Delivery

Akka.Delivery is a reliable delivery system that leverages built-in actors, serialization, and persistence to help guarantee that all messages sent from one producer to one consumer will be delivered, in-order, even across process restarts / actor restarts / network outages.

Akka.Delivery's functionality is divded across four libraries:

  • Akka - defines the base definitions for all messages, the ProducerController type, and the ConsumerController type;
  • Akka.Cluster - contains the serialization definitions for Akka.Delivery;
  • Akka.Persistence - contains the EventSourcedProducerQueue implementation, an optional feature that can be used to make the ProducerController's outbound delivery queue persisted to the Akka.Persistence Journal and SnapshotStore; and
  • Akka.Cluster.Sharding - contains the definitions for the ShardingProducerController and ShardingConsumerController.

We've documented how these features work in the following two detailed articles official website:

If you want to see the full set of changes made in Akka.NET v1.5.7, click here.

COMMITS LOC+ LOC- AUTHOR
9 13972 135 Aaron Stannard
6 92 88 Ebere Abanonu
4 803 807 Simon Cropp
3 70 53 Gregorius Soedharmo
3 3 3 dependabot[bot]

1.5.6 May 8th 2023

Version 1.5.6 is a patch with a few minor bug fix

If you want to see the full set of changes made in Akka.NET v1.5.6, click here.

COMMITS LOC+ LOC- AUTHOR
2 4 4 Aaron Stannard
2 33 84 Simon Cropp
2 2 2 dependabot[bot]
2 2 2 Richard Smith
1 2 2 Gregorius Soedharmo
1 2 12 Sergey Popov

1.5.5 May 4th 2023

If you want to see the full set of changes made in Akka.NET v1.5.5, click here.

7 contributors since release 1.5.4

COMMITS LOC+ LOC- AUTHOR
16 68 34 Ebere Abanonu
9 598 1053 Simon Cropp
4 4 4 dependabot[bot]
2 229 5 Gregorius Soedharmo
1 33 28 Aaron Stannard
1 256 3 Malcolm Learner
1 148 140 Sergey Popov

1.5.4 April 25th 2023

IStash Enhancements

IStash API have been improved with metrics API and its bound/capacity can be programatically set. Documentation can be read here

If you want to see the full set of changes made in Akka.NET v1.5.4, click here.

5 contributors since release 1.5.3

COMMITS LOC+ LOC- AUTHOR
7 477 486 Ebere Abanonu
4 627 143 Aaron Stannard
2 2 2 dependabot[bot]
1 87 0 Sergey Popov
1 0 1 Gregorius Soedharmo

1.5.3 April 20th 2023

SQL Transaction Isolation Level Setting

In 1.5.3, we're introducing fine-grained control over transaction isolation level inside the Akka.Persistence.Sql.Common common library. This setting will be propagated to the rest of the SQL persistence plugin ecosystem and the Akka.Hosting package in their next release version.

Four new HOCON settings are introduced:

  • akka.persistence.journal.{plugin-name}.read-isolation-level
  • akka.persistence.journal.{plugin-name}.write-isolation-level
  • akka.persistence.snapshot-store.{plugin-name}.read-isolation-level
  • akka.persistence.snapshot-store.{plugin-name}.write-isolation-level

you can go to the official Microsoft documentation to read more about these isolation level settings.

If you want to see the full set of changes made in Akka.NET v1.5.3, click here.

COMMITS LOC+ LOC- AUTHOR
23 1284 1248 Ebere Abanonu
4 7 7 dependabot[bot]
3 933 267 Gregorius Soedharmo
2 4498 4407 Aaron Stannard

1.5.2 April 5th 2023

There are some major behavioral changes introduced to Akka.Cluster and Akka.Persistence in Akka.NET v1.5.2 - to learn how these changes might affect your Akka.NET applications, please see our Akka.NET v1.5.2 Upgrade Advisories on the Akka.NET website.

If you want to see the full set of changes made in Akka.NET v1.5.2, click here.

COMMITS LOC+ LOC- AUTHOR
56 2580 2913 Ebere Abanonu
5 201 82 Aaron Stannard
4 754 558 Ismael Hamed
3 4 4 dependabot[bot]
2 33 12 Sergey Popov
1 511 53 Gregorius Soedharmo
1 1 1 ondravondra
1 0 2 Simon Cropp

1.5.1 March 15th 2023

If you want to see the full set of changes made in Akka.NET v1.5.1, click here.

COMMITS LOC+ LOC- AUTHOR
9 425 331 Ebere Abanonu
5 6 6 dependabot[bot]
3 2399 109 Sergey Popov
1 97 4 Gregorius Soedharmo
1 2 2 Aaron Stannard

1.5.0 March 2nd 2023

Version 1.5.0 is a major new release of Akka.NET that is now marked as stable and ready for production use.

You can read the full notes about what's changed in Akka.NET v1.5 here. We also encourage you to watch our video: "Akka NET v1.5 New Features and Upgrade Guide"

If you want to see the full set of changes made in Akka.NET v1.5.0 so far, click here.

COMMITS LOC+ LOC- AUTHOR
95 25041 24976 Gregorius Soedharmo
85 89784 18362 Aaron Stannard
76 95 95 dependabot[bot]
18 3201 908 Ismael Hamed
5 230 251 Sergey Popov
2 77 7 Vagif Abilov
2 38 8 Brah McDude
1 92 92 nabond251
1 843 0 Drew
1 7 6 Tjaart Blignaut
1 5 4 Sean Killeen
1 32 1 JonnyII
1 26 4 Thomas Stegemann
1 203 5 Ebere Abanonu
1 2 2 Popov Sergey
1 2 2 Denis
1 16 0 Damian
1 11 2 Nicolai Davies
1 101 3 aminchenkov
1 1 1 zbynek001
1 1 1 Michel van Os
1 1 1 Adrian D. Alvarez

1.5.0-beta5 February 28th 2023

Version 1.5.0-beta5 contains breaking API changes and new API changes for Akka.NET.

COMMITS LOC+ LOC- AUTHOR
2 50 28 Aaron Stannard
1 22 32 Gregorius Soedharmo

1.5.0-beta4 February 28th 2023

Version 1.5.0-beta4 contains breaking API changes and new API changes for Akka.NET.

COMMITS LOC+ LOC- AUTHOR
2 110 37 Aaron Stannard
1 253 7 Gregorius Soedharmo

1.5.0-beta3 February 27th 2023

Version 1.5.0-beta3 contains breaking API changes and new API changes for Akka.NET.

COMMITS LOC+ LOC- AUTHOR
14 68 794 Gregorius Soedharmo
5 997 498 Aaron Stannard
3 6 6 dependabot[bot]

1.5.0-beta2 February 20th 2023

Version 1.5.0-beta2 contains breaking API changes and new API changes for Akka.NET.

COMMITS LOC+ LOC- AUTHOR
8 260 942 Aaron Stannard
5 169 60 Gregorius Soedharmo

1.5.0-beta1 February 20th 2023

Version 1.5.0-beta1 contains breaking API changes and new API changes for Akka.NET.

Breaking Changes: Logging

In #6408 the entire ILoggingAdapter interface was rewritten in order to improve extensibility and performance (logging is now 30-40% faster in all cases and allocates ~50% fewer objects for large format strings).

All of the changes made here are source compatible, but not binary compatible - meaning that users and package authors will need to do the following:

  • Add using Akka.Event in all files that used the ILoggingAdapter and
  • Recompile.

NOTE: you can use a global using Akka.Event directive to do this solution / project-wide if your project supports C# 10 and / or .NET 6.

In addition to improving the performance of the ILoggingAdapter system, we've also made it more extensible - for instance, you can now globally configure the ILogMessageFormatter via the following HOCON:

akka { 
    loglevel=INFO,
    loggers=["Akka.Logger.Serilog.SerilogLogger, Akka.Logger.Serilog"]
    logger-formatter="Akka.Logger.Serilog.SerilogLogMessageFormatter, Akka.Logger.Serilog"
}

That will allow users to use the SerilogLogMessageFormatter globally throughout their applications - no more annoying calls like this inside individual actors that want to use semantic logging:

private readonly ILoggingAdapter _logger = Context.GetLogger<SerilogLoggingAdapter>();

Breaking Changes: Akka.Persistence.Sql.Common

This is a breaking change that should effect almost no users, but we deleted some old, bad ideas from the API surface and it might require all Akka.Persistence.Sql* plugins to be recompiled.

For what it's worth, Akka.Persistence.Sql.Common's performance has been improved significantly and we'll continue working on that with some additional API changes this week.

Other Changes and Additions

If you want to see the full set of changes made in Akka.NET v1.5.0 so far, click here.

COMMITS LOC+ LOC- AUTHOR
12 15 15 dependabot[bot]
11 1930 1278 Aaron Stannard
2 143 73 Sergey Popov
1 26 4 Thomas Stegemann
1 1 1 Michel van Os

1.5.0-alpha4 February 1st 2023

Version 1.5.0-alpha3 contains several bug fixes and new features to Akka.NET

If you want to see the full set of changes made in Akka.NET v1.5.0 so far, click here.

COMMITS LOC+ LOC- AUTHOR
27 30 30 dependabot[bot]
11 2212 165 Gregorius Soedharmo
4 741 208 Ismael Hamed
4 680 112 Aaron Stannard
3 87 178 Sergey Popov
1 843 0 Drew
1 2 2 Popov Sergey

1.5.0-alpha3 November 15th 2022

Akka.NET v1.5.0-alpha3 is a security patch for Akka.NET v1.5.0-alpha2 but also includes some other fixes.

Security Advisory: Akka.NET v1.5.0-alpha2 and earlier depend on an old System.Configuration.ConfigurationManager version 4.7.0 which transitively depends on System.Common.Drawing v4.7.0. The System.Common.Drawing v4.7.0 is affected by a remote code execution vulnerability GHSA-ghhp-997w-qr28.

We have separately created a security advisory for Akka.NET Versions < 1.4.46 and < 1.5.0-alpha3 to track this issue.

Fixes and Updates

You can see the full set of tracked issues for Akka.NET v1.5.0 here.

1.5.0-alpha2 October 17th 2022

Akka.NET v1.5.0-alpha2 is a maintenance release for Akka.NET v1.5 that contains numerous performance improvements in critical areas, including core actor message processing and Akka.Remote.

Performance Fixes

In sum you should expect to see total memory consumption, garbage collection, and throughput improve when you upgrade to Akka.NET v1.5.0-alpha2.

Other Features and Improvements

1.5.0-alpha1 August 22 2022

Akka.NET v1.5.0-alpha1 is a major release that contains a lot of code improvement and rewrites/refactors. Major upgrades to Akka.Cluster.Sharding in particular.

Deprecation

Some codes and packages are being deprecated in v1.5

Changes

Akka

Akka.Cluster

Akka.Cluster.Sharding

The Akka.Cluster.Sharding changes in Akka.NET v1.5 are significant, but backwards compatible with v1.4 and upgrades should happen seamlessly.

Akka.Cluster.Sharding's state-store-mode has been split into two parts:

  • CoordinatorStore
  • ShardStore

Which can use different persistent mode configured via akka.cluster.sharding.state-store-mode & akka.cluster.sharding.remember-entities-store.

Possible combinations:

state-store-mode remember-entities-store CoordinatorStore mode ShardStore mode
persistence (default) - (ignored) persistence persistence
ddata ddata ddata ddata
ddata eventsourced (new) ddata persistence

There should be no breaking changes from user perspective. Only some internal messages/objects were moved. There should be no change in the PersistentId behavior and default persistent configuration (akka.cluster.sharding.state-store-mode)

This change is designed to speed up the performance of Akka.Cluster.Sharding coordinator recovery by moving remember-entities recovery into separate actors - this also solves major performance problems with the ddata recovery mode overall.

The recommended settings for maximum ease-of-use for Akka.Cluster.Sharding going forward will be:

akka.cluster.sharding{
  state-store-mode = ddata
  remember-entities-store = eventsourced
}

However, for the sake of backwards compatibility the Akka.Cluster.Sharding defaults have been left as-is:

akka.cluster.sharding{
  state-store-mode = persistence
  # remember-entities-store (not set - also uses legacy Akka.Persistence)
}

Switching over to using remember-entities-store = eventsourced will cause an initial migration of data from the ShardCoordinator's journal into separate event journals going forward - this migration is irreversible without taking the cluster offline and deleting all Akka.Cluster.Sharding-related data from Akka.Persistence, so plan accordingly.

Akka.Cluster.Tools

Akka.Persistence.Query

Akka.Remote

Akka.Streams

Akka.TestKit

1.4.37 April 14 2022

Akka.NET v1.4.37 is a minor release that contains some minor bug fixes.

If you want to see the full set of changes made in Akka.NET v1.4.37, click here.

COMMITS LOC+ LOC- AUTHOR
3 15 4 Gregorius Soedharmo
1 2 2 dependabot[bot]

1.4.36 April 4 2022

Akka.NET v1.4.36 is a minor release that contains some bug fixes. Most of the changes have been aimed at improving our web documentation and code cleanup to modernize some of our code.

Bug fixes:

If you want to see the full set of changes made in Akka.NET v1.4.36, click here.

COMMITS LOC+ LOC- AUTHOR
5 274 33 Gregorius Soedharmo
4 371 6 Ebere Abanonu
3 9 3 Aaron Stannard
1 34 38 Ismael Hamed
1 2 3 Adrian Leonhard

1.4.35 March 18 2022

Akka.NET v1.4.35 is a minor release that contains some bug fixes. Most of the changes have been aimed at improving our web documentation and code cleanup to modernize some of our code.

Bug fixes:

If you want to see the full set of changes made in Akka.NET v1.4.35, click here.

COMMITS LOC+ LOC- AUTHOR
6 2178 174 Aaron Stannard
2 43 33 Gregorius Soedharmo
1 71 19 Ismael Hamed
1 1 1 dependabot[bot]

1.4.34 March 7 2022

Akka.NET v1.4.34 is a minor release that contains some bug fixes. Most of the changes have been aimed at improving our web documentation and code cleanup to modernize some of our code.

Bug fixes:

Improvements:

If you want to see the full set of changes made in Akka.NET v1.4.34, click here.

COMMITS LOC+ LOC- AUTHOR
12 1177 718 Ebere Abanonu
6 192 47 Gregorius Soedharmo
3 255 167 Ismael Hamed
1 3 0 Aaron Stannard
1 126 10 Drew

1.4.33 February 14 2022

Akka.NET v1.4.33 is a minor release that contains some bug fixes. Most of the changes have been aimed at improving our web documentation and code cleanup to modernize some of our code. The most important bug fix is the actor Props memory leak when actors are cached inside Akka.Remote.

If you want to see the full set of changes made in Akka.NET v1.4.33, click here.

COMMITS LOC+ LOC- AUTHOR
63 1264 1052 Ebere Abanonu
9 221 27 Brah McDude
8 2537 24 Gregorius Soedharmo
2 4 1 Aaron Stannard
1 2 2 ignobilis

1.4.32 January 19 2022

Akka.NET v1.4.32 is a minor release that contains some API improvements. Most of the changes have been aimed at improving our web documentation and code cleanup to modernize some of our code. One big improvement in this version release is the Hyperion serialization update.

Hyperion 0.12.0 introduces a new deserialization security mechanism to allow users to selectively filter allowed types during deserialization to prevent deserialization of untrusted data described here. This new feature is exposed in Akka.NET in HOCON through the new akka.actor.serialization-settings.hyperion.allowed-types settings or programmatically through the new WithTypeFilter method in the HyperionSerializerSetup class.

The simplest way to programmatically describe the type filter is to use the convenience class TypeFilterBuilder:

var typeFilter = TypeFilterBuilder.Create()
    .Include<AllowedClassA>()
    .Include<AllowedClassB>()
    .Build();
var setup = HyperionSerializerSetup.Default
    .WithTypeFilter(typeFilter);

You can also create your own implementation of ITypeFilter and pass an instance of it into the WithTypeFilter method.

For complete documentation, please read the Hyperion readme on filtering types for secure deserialization.

If you want to see the full set of changes made in Akka.NET v1.4.32, click here.

COMMITS LOC+ LOC- AUTHOR
11 1752 511 Aaron Stannard
8 1433 534 Gregorius Soedharmo
3 754 222 Ismael Hamed
2 3 6 Brah McDude
2 227 124 Ebere Abanonu
1 331 331 Sean Killeen
1 1 1 TangkasOka

1.4.31 December 20 2021

Akka.NET v1.4.31 is a minor release that contains some bug fixes.

Akka.NET v1.4.30 contained a breaking change that broke binary compatibility with all Akka.DI plugins. Even though those plugins are deprecated that change is not compatible with our SemVer standards and needed to be reverted. We regret the error.

Bug fixes:

COMMITS LOC+ LOC- AUTHOR
1 9 2 Gregorius Soedharmo

1.4.30 December 20 2021

Akka.NET v1.4.30 is a minor release that contains some enhancements for Akka.Streams and some bug fixes.

New features:

Bug fixes:

If you want to see the full set of changes made in Akka.NET v1.4.30, click here.

COMMITS LOC+ LOC- AUTHOR
6 75 101 Aaron Stannard
2 53 5 Brah McDude
2 493 12 Drew
1 289 383 Andreas Dirnberger
1 220 188 Gregorius Soedharmo
1 173 28 Ismael Hamed

1.4.29 December 13 2021

Maintenance Release for Akka.NET 1.4 Akka.NET v1.4.29 is a minor release that contains some enhancements for Akka.Streams and some bug fixes.

New features:

Documentation:

Bug fixes:

If you want to see the full set of changes made in Akka.NET v1.4.29, click here.

COMMITS LOC+ LOC- AUTHOR
7 82 51 Aaron Stannard
6 1381 483 Gregorius Soedharmo
4 618 85 Andreas Dirnberger
1 4 4 Luca V
1 1 1 dependabot[bot]

1.4.28 November 10 2021

Maintenance Release for Akka.NET 1.4 Akka.NET v1.4.28 is a minor release that contains some enhancements for Akka.Streams and some bug fixes.

New Akka.Streams Stages Akka.NET v1.4.28 includes two new Akka.Streams stages:

  • Source.Never - a utility stage that never emits any elements, never completes, and never fails. Designed primarily for unit testing.
  • Flow.WireTap - the WireTap stage attaches a given Sink to a Flow without affecting any of the upstream or downstream elements. This stage is designed for performance monitoring and instrumentation of Akka.Streams graphs.

In addition to these, here are some other changes introduced Akka.NET v1.4.28:

If you want to see the full set of changes made in Akka.NET v1.4.28, click here.

COMMITS LOC+ LOC- AUTHOR
16 2707 1911 Sean Killeen
8 1088 28 Ismael Hamed
6 501 261 Gregorius Soedharmo
5 8 8 dependabot[bot]
4 36 86 Aaron Stannard
1 1 0 Jarl Sveinung Flø Rasmussen

Special thanks for @SeanKilleen for contributing extensive Markdown linting and automated CI checks for that to our documentation! #5312

1.4.27 October 11 2021

Maintenance Release for Akka.NET 1.4 Akka.NET v1.4.27 is a small release that contains some major performance improvements for Akka.Remote.

Performance Fixes In RemoteActorRefProvider address paring, caching and resolving improvements Akka.NET contributor @Zetanova introduced some major changes that make the entire ActorPath class much more reusable and more parse-efficient.

Our last major round of Akka.NET performance improvements in Akka.NET v1.4.25 produced the following:

OSVersion:                         Microsoft Windows NT 6.2.9200.0
ProcessorCount:                    16
ClockSpeed:                        0 MHZ
Actor Count:                       32
Messages sent/received per client: 200000  (2e5)
Is Server GC:                      True
Thread count:                      111

Num clients, Total [msg], Msgs/sec, Total [ms]
         1,  200000,    130634,    1531.54
         5, 1000000,    246975,    4049.20
        10, 2000000,    244499,    8180.16
        15, 3000000,    244978,   12246.39
        20, 4000000,    245159,   16316.37
        25, 5000000,    243333,   20548.09
        30, 6000000,    241644,   24830.55

In Akka.NET v1.4.27 those numbers now look like:

OSVersion:                         Microsoft Windows NT 6.2.9200.
ProcessorCount:                    16                            
ClockSpeed:                        0 MHZ                         
Actor Count:                       32                            
Messages sent/received per client: 200000  (2e5)                 
Is Server GC:                      True                          
Thread count:                      111                           
                                                                 
Num clients, Total [msg], Msgs/sec, Total [ms]                   
         1,  200000,    105043,    1904.29                       
         5, 1000000,    255494,    3914.73                       
        10, 2000000,    291843,    6853.30                       
        15, 3000000,    291291,   10299.75                       
        20, 4000000,    286513,   13961.68                       
        25, 5000000,    292569,   17090.64                       
        30, 6000000,    281492,   21315.35

To put these numbers in comparison, here's what Akka.NET's performance looked like as of v1.4.0:

Num clients (actors)    Total [msg] Msgs/sec    Total [ms]
1   200000  69736   2868.60
5   1000000 141243  7080.98
10  2000000 136771  14623.27
15  3000000 38190   78556.49
20  4000000 32401   123454.60
25  5000000 33341   149967.08
30  6000000 126093  47584.92

We've made Akka.Remote consistently faster, more predictable, and reduced total memory consumption significantly in the process.

You can see the full set of changes introduced in Akka.NET v1.4.27 here

COMMITS LOC+ LOC- AUTHOR
3 89 8 Aaron Stannard
1 856 519 Andreas Dirnberger
1 3 4 Vadym Artemchuk
1 261 233 Gregorius Soedharmo
1 1 1 dependabot[bot]

1.4.26 September 28 2021

Maintenance Release for Akka.NET 1.4 Akka.NET v1.4.26 is a very small release that addresses one wire format regression introduced in Akka.NET v1.4.20.

Bug Fixes and Improvements

You can see the full set of changes introduced in Akka.NET v1.4.26 here

COMMITS LOC+ LOC- AUTHOR
4 99 96 Gregorius Soedharmo
3 79 5 Aaron Stannard
1 1 1 dependabot[bot]

1.4.25 September 08 2021

Maintenance Release for Akka.NET 1.4 Akka.NET v1.4.25 includes some significant performance improvements for Akka.Remote and a number of important bug fixes and improvements.

Bug Fixes and Improvements

Performance Improvements Using our standard RemotePingPong benchmark, the difference between v1.4.24 and v1.4.24 is significant:

v1.4.24

OSVersion:                         Microsoft Windows NT 6.2.9200.0 
ProcessorCount:                    16                              
ClockSpeed:                        0 MHZ                           
Actor Count:                       32                              
Messages sent/received per client: 200000  (2e5)                   
Is Server GC:                      True                            
Thread count:                      111                             
                                                                   
Num clients, Total [msg], Msgs/sec, Total [ms]                     
         1,  200000,     96994,    2062.08                         
         5, 1000000,    194818,    5133.93                         
        10, 2000000,    198966,   10052.93                         
        15, 3000000,    199455,   15041.56                         
        20, 4000000,    198177,   20184.53                         
        25, 5000000,    197613,   25302.80                         
        30, 6000000,    197349,   30403.82                         

v1.4.25

OSVersion:                         Microsoft Windows NT 6.2.9200.0
ProcessorCount:                    16
ClockSpeed:                        0 MHZ
Actor Count:                       32
Messages sent/received per client: 200000  (2e5)
Is Server GC:                      True
Thread count:                      111

Num clients, Total [msg], Msgs/sec, Total [ms]
         1,  200000,    130634,    1531.54
         5, 1000000,    246975,    4049.20
        10, 2000000,    244499,    8180.16
        15, 3000000,    244978,   12246.39
        20, 4000000,    245159,   16316.37
        25, 5000000,    243333,   20548.09
        30, 6000000,    241644,   24830.55

This represents a 24% overall throughput improvement in Akka.Remote across the board. We have additional PRs staged that should get aggregate performance improvements above 40% for Akka.Remote over v1.4.24 but they didn't make it into the Akka.NET v1.4.25 release.

You can see the full set of changes introduced in Akka.NET v1.4.25 here

COMMITS LOC+ LOC- AUTHOR
32 1301 400 Aaron Stannard
4 358 184 Andreas Dirnberger
3 414 149 Gregorius Soedharmo
3 3 3 dependabot[bot]
2 43 10 zbynek001
1 14 13 tometchy
1 139 3 carlcamilleri

1.4.24 August 17 2021

Maintenance Release for Akka.NET 1.4

Bug Fixes and Improvements

You can see the full set of changes introduced in Akka.NET v1.4.24 here

COMMITS LOC+ LOC- AUTHOR
5 360 200 Aaron Stannard
3 4 4 dependabot[bot]
1 548 333 Arjen Smits
1 42 19 Martijn Schoemaker
1 26 27 Andreas Dirnberger
1 171 27 Gregorius Soedharmo

1.4.23 August 09 2021

Maintenance Release for Akka.NET 1.4

Akka.NET v1.4.23 is designed to patch an issue that occurs on Linux machines using Akka.Cluster.Sharding with akka.cluster.sharding.state-store-mode=ddata and akka.cluster.sharding.remember-entities=on: "System.DllNotFoundException: Unable to load shared library 'lmdb' or one of its dependencies"

In Akka.NET v1.4.21 we added built-in support for Akka.DistributedData.LightningDb for use with the remember-entities setting, but we never received any reports about this issue until shortly after v1.4.22 was released. Fundamentally, the problem was that our downstream dependency, Lightning.NET, doesn't include any of the necessary Linux native binaries in their distributions currently. So in the meantime, we've published our own "vendored" distribution of Lightning.NET to NuGet until a new official one is released that includes these binaries.

There are some other small fixes included in Akka.NET v1.4.23 and you can read about them here.

COMMITS LOC+ LOC- AUTHOR
8 136 2803 Aaron Stannard
2 61 3 Gregorius Soedharmo

1.4.22 August 05 2021

Maintenance Release for Akka.NET 1.4

Akka.NET v1.4.22 is a fairly large release that includes an assortment of performance and bug fixes.

Performance Fixes Akka.NET v1.4.22 includes a significant performance improvement for Ask<T>, which now requires 1 internal await operation instead of 3:

Before

Method Iterations Mean Error StdDev Gen 0 Gen 1 Gen 2 Allocated
RequestResponseActorSelection 10000 83.313 ms 0.7553 ms 0.7065 ms 4666.6667 - - 19 MB
CreateActorSelection 10000 5.572 ms 0.1066 ms 0.1140 ms 953.1250 - - 4 MB

After

Method Iterations Mean Error StdDev Gen 0 Gen 1 Gen 2 Allocated
RequestResponseActorSelection 10000 71.216 ms 0.9885 ms 0.9246 ms 4285.7143 - - 17 MB
CreateActorSelection 10000 5.462 ms 0.0495 ms 0.0439 ms 953.1250 - - 4 MB

Bug Fixes and Improvements

You can see the full set of changes introduced in Akka.NET v1.4.22 here

Akka.Cluster.Sharding.RepairTool In addition to the work done on Akka.NET itself, we've also created a separate tool for cleaning up any left-over data in the event of an Akka.Cluster.Sharding cluster running with akka.cluster.sharding.state-store-mode=persistence was terminated abruptly before it had a chance to cleanup.

We've added documentation to the Akka.NET website that explains how to use this tool here: https://getakka.net/articles/clustering/cluster-sharding.html#cleaning-up-akkapersistence-shard-state

And the tool itself has documentation here: https://github.com/petabridge/Akka.Cluster.Sharding.RepairTool

COMMITS LOC+ LOC- AUTHOR
16 1254 160 Gregorius Soedharmo
7 104 83 Aaron Stannard
5 8 8 dependabot[bot]
4 876 302 Ismael Hamed
2 3942 716 zbynek001
2 17 3 Andreas Dirnberger
1 187 2 andyfurnival
1 110 5 Igor Fedchenko