Placeholder for nightlies
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- theWireTapstage attaches a givenSinkto aFlowwithout 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:
- Akka.Streams:
Sourcethat flattens aTasksource and keeps the materialized value - Akka.Streams: made
GraphStageLogic.LogSourcevirtual and change defaultStageLogicLogSource - Akka.IO:
UdpListenerResponds IPv6 Bound message with IPv4 Bind message - Akka.MultiNodeTestRunner: now runs on Linux and as a
dotnet testpackage - we will keep you posted on this, as we're still working on getting Rider / VS Code / Visual Studio debugger-attached support to work correctly. - Akka.Persistence.Sql.Common: Cancel
DBCommandafter finish reading events by PersistenceId - massive performance fix for Akka.Persistence with many log entries on SQL-based journals. - Akka.Actor:
DefaultResizerdoes not reisize whenReceiveAsyncis used
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! akkadotnet#5312
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] |
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
- Akka.Remote / Akka.Persistence: PrimitiveSerializers manifest backwards compatibility problem - this could cause regressions when upgrading to Akka.NET v1.4.20 and later. We have resolved this issue in Akka.NET v1.4.26. Please see our Akka.NET v1.4.26 upgrade advisory for details.
- Akka.DistributedData.LightningDb: Revert #5180, switching back to original LightningDB packages
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] |
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
- Akka.IO.Tcp: connecting to an unreachable DnsEndpoint never times out
- Akka.Actor: need to enforce
stdout-loglevel = offall the way through ActorSystem lifecycle - Akka.Actor:
Askshould push unhandled answers into deadletter - Akka.Routing: Make Router.Route` virtual
- Akka.Actor: Improve performance on
IActorRef.ChildAPI - signficantly improves performance of many Akka.NET functions, but includes a public API change onIActorRefthat is source compatible but not necessarily binary-compatible.IActorRef GetChild(System.Collections.Generic.IEnumerable<string> name)is nowIActorRef GetChild(System.Collections.Generic.IReadOnlyList<string> name). This API is almost never called directly by user code (it's almost always called via the internals of theActorSystemwhen resolvingActorSelections or remote messages) so this change should be safe. - Akka.Actor:
IsNobodythrows NRE - Akka.Cluster.Tools: singleton fix cleanup of overdue _removed members
- Akka.DistributedData: ddata exclude
Exitingmembers in Read/WriteMajorityPlus
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 |
Maintenance Release for Akka.NET 1.4
Bug Fixes and Improvements
- Akka: Make
Routeropen to extensions - Akka: Allow null response to
Ask<T> - Akka.Cluster: Fix cluster startup race condition
- Akka.Streams: Fix RestartFlow bug
- Akka.Persistence.Sql: Implement TimestampProvider in BatchingSqlJournal
- Akka.Serialization.Hyperion: Bump Hyperion version from 0.11.0 to 0.11.1
- Akka.Serialization.Hyperion: Add Hyperion unsafe type filtering security feature
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 |
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 |
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
- Akka: Use ranged nuget versioning for Newtonsoft.Json
- Akka: Pipe of Canceled Tasks
- Akka: CircuitBreaker's Open state should return a faulted Task instead of throwing
- Akka.Remote: Can DotNetty socket exception include information about the address?
- Akka.Remote: log full exception upon deserialization failure
- Akka.Cluster: SBR fix & update
- Akka.Streams: Restart Source|Flow|Sink: Configurable stream restart deadline
- Akka.DistributedData: ddata replicator stops but doesn't look like it can be restarted easily
- Akka.DistributedData: ddata ReadMajorityPlus and WriteMajorityPlus
- Akka.DistributedData: DData Max-Delta-Elements may not be fully honoured
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 |