1.4.51 June 28th 2023
- Perf: Backoff Supervisor uses Expression based
Props
- Akka.Streams: Do not use expression based props for long lived streams
1.4.50 March 15th 2023
- Query.Sql: Fix PersistenceIdPublisher froze on failure messages
- Akka: Improve DeadLetter log message
- Akka: Fix StackOverflow exception in NewtonsoftJsonSerializer
- Akka.Persistence: Add Persistence.Query support to InMemory journal
- Akka: Fix bugs reported by PVS-Studio static analyzer
COMMITS | LOC+ | LOC- | AUTHOR |
---|---|---|---|
6 | 2402 | 241 | Gregorius Soedharmo |
1.4.49 January 26th 2023
Akka.NET v1.4.49 includes some new core Akka.NET APIs and bug fixes to fundamental Akka.Actor
behavior.
- Akka.Actor: Read stash capacity from actor's mailbox or dispatcher configuration
- Akka.Actor: Added support for
UnrestrictedStash
- Akka.Actor: Add API for
UntypedActorWithStash
types - Akka.Actor: set default
PoolRouter.SupervisorStrategy
toRestart
- Akka.Persistence.Sql.Common: FailChunkExecution does not handle
DbExceptions
wrapped in anAggregateException
You can see the full set of tracked issues for Akka.NET v1.4.49 here.
COMMITS | LOC+ | LOC- | AUTHOR |
---|---|---|---|
2 | 711 | 186 | Ismael Hamed |
2 | 41 | 182 | Aaron Stannard |
1.4.48 January 5th 2023
Akka.NET v1.4.48 is a minor release that introduces some additional APIs to Akka.NET.
- Akka.Streams:
ChannelSource<T>
andChannelSink<T>
moved from Alpakka into main project - these stages are now part of the normal Akka.Streams.Dsl. - Akka: make
FutureActorRef<T>
unsealed
You can see the full set of tracked issues for Akka.NET v1.4.48 here.
COMMITS | LOC+ | LOC- | AUTHOR |
---|---|---|---|
3 | 846 | 29 | Aaron Stannard |
1.4.47 December 9th 2022
Akka.NET v1.4.47 is a maintenance patch for Akka.NET v1.4.46 that includes a variety of bug fixes, performance improvements, and new features.
Actor Telemetry
Starting in Akka.NET v1.4.47 local and remotely deployed actors will now emit events when being started, stopped, and restarted:
public interface IActorTelemetryEvent : INoSerializationVerificationNeeded, INotInfluenceReceiveTimeout
{
/// <summary>
/// The actor who emitted this event.
/// </summary>
IActorRef Subject {get;}
/// <summary>
/// The implementation type for this actor.
/// </summary>
Type ActorType { get; }
}
/// <summary>
/// Event emitted when actor starts.
/// </summary>
public sealed class ActorStarted : IActorTelemetryEvent
{
public IActorRef Subject { get; }
public Type ActorType { get; }
}
/// <summary>
/// Event emitted when actor shuts down.
/// </summary>
public sealed class ActorStopped : IActorTelemetryEvent
{
public IActorRef Subject { get; }
public Type ActorType { get; }
}
/// <summary>
/// Emitted when an actor restarts.
/// </summary>
public sealed class ActorRestarted : IActorTelemetryEvent
{
public IActorRef Subject { get; }
public Type ActorType { get; }
public Exception Reason { get; }
}
These events will be consumed from popular Akka.NET observability and management tools such as Phobos and Petabridge.Cmd to help provide users with more accurate insights into actor workloads over time, but you can also consume these events yourself by subscribing to them via the EventStream
:
// subscribe to all actor telemetry events
Context.System.EventStream.Subscribe(Self, typeof(IActorTelemetryEvent));
By default actor telemetry is disabled - to enable it you'll need to turn it on via the following HOCON setting:
akka.actor.telemetry.enabled = on
The performance impact of enabling telemetry is negligible, as you can see via our benchmarks.
Fixes and Updates
- Akka.Streams: Fixed
System.NotSupportedException
when disposing stage with materializedIAsyncEnumerable
- Akka.Streams:
ReuseLatest
stage to repeatedly emit the most recent value until a newer one is pushed - Akka.Remote: eliminate
ActorPath.ToSerializationFormat
UID allocations - should provide a noticeable Akka.Remote performance improvement. - Akka.Remote: Remoting and an exception as a payload message -
Exception
types are now serialized properly insideStatus.Failure
messages over the wire.Status.Failure
andStatus.Success
messages are now managed by Protobuf - so you might see some deserialization errors while upgrading if those types are being exchanged over the wire. - Akka.TestKit:
TestActorRef
can not catch exceptions on asynchronous methods
You can see the full set of tracked issues for Akka.NET v1.4.47 here.
COMMITS | LOC+ | LOC- | AUTHOR |
---|---|---|---|
10 | 2027 | 188 | Aaron Stannard |
1 | 157 | 10 | Gregorius Soedharmo |
1.4.46 November 15th 2022
Akka.NET v1.4.46 is a security patch for Akka.NET v1.4.45 but also includes some other fixes.
Security Advisory: Akka.NET v1.4.45 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
- Akka: Upgrade to Newtonsoft.Json 13.0.1 as minimum version
- Akka: Upgrade to System.Configuration.ConfigurationManager 6.0.1 - resolves security issue.
- Akka.IO: Report cause for Akka/IO TCP
CommandFailed
events - Akka.Cluster.Tools: Make sure that
DeadLetter
s published byDistributedPubSubMediator
contain full context of topic - Akka.Cluster.Metrics: Improve CPU/Memory metrics collection at Akka.Cluster.Metrics - built-in metrics are now much more accurate.
You can see the full set of tracked issues for Akka.NET v1.4.46 here.
1.4.45 October 19th 2022
Akka.NET v1.4.45 is a patch release for Akka.NET v1.4 for a bug introduced in v1.4.44.
Patch
1.4.44 October 17th 2022
Akka.NET v1.4.44 is a maintenance release for Akka.NET v1.4 that contains numerous performance improvements in critical areas, including core actor message processing and Akka.Remote.
Performance Fixes
- remove delegate allocation from
ForkJoinDispatcher
andDedicatedThreadPool
- eliminate
Mailbox
delegate allocations - Reduce
FSM<TState, TData>
allocations - removed boxing allocations inside
FSM.State.Equals
- Eliminate
DefaultLogMessageFormatter
allocations
In sum you should expect to see total memory consumption, garbage collection, and throughput improve when you upgrade to Akka.NET v1.4.44.
Other Features and Improvements
- Akka.Cluster and Akka.Cluster.Sharding: should throw human-friendly exception when accessing cluster / sharding plugins when clustering is not running
- Akka.Cluster.Sharding: Add
HashCodeMessageExtractor
factory - Akka.Persistence.Sql.Common: Fix
DbCommand.CommandTimeout
inBatchingSqlJournal
You can see the full list of fixes in Akka.NET v1.4.44 here.
COMMITS | LOC+ | LOC- | AUTHOR |
---|---|---|---|
10 | 651 | 69 | @Aaronontheweb |
4 | 275 | 17 | @Arkatufus |
1.4.42 September 23 2022
Akka.NET v1.4.42 is a minor release that contains some minor bug fixes.
-
In order to use this query, "remember entities" should be turned on or the provided shard
IMessageExtractor
supports theShardRegion.StartEntity
message. Complete documentation can be read here
If you want to see the full set of changes made in Akka.NET v1.4.42, click here.
COMMITS | LOC+ | LOC- | AUTHOR |
---|---|---|---|
3 | 66 | 3 | Gregorius Soedharmo |
1 | 557 | 118 | Aaron Stannard |
1.4.41 August 31 2022
Akka.NET v1.4.41 is a minor release that contains some minor bug fix and throughput performance improvement for Akka.Remote
-
Akka: Fix AddLogger in LoggingBus
Akka loggers are now loaded asynchronously by default. The
ActorSystem
will wait at mostakka.logger-startup-timeout
period long (5 seconds by default) for all loggers to report that they are ready before continuing the start-up process.A warning will be logged on each loggers that did not report within this grace period. These loggers will still be awaited upon inside a detached Task until either it is ready or the
ActorSystem
is shut down.These late loggers will not capture all log events until they are ready. If your logs are missing portion of the start-up events, check that the logger were loaded within this grace period.
-
Akka: Log Exception cause inside Directive.Resume SupervisorStrategy warning log
-
DData: Add "verbose-debug-logging" setting to suppress debug message spam
-
Akka: Regenerate protobuf codes
All protobuf codes were re-generated, causing a significant improvement in message deserialization, increasing
Akka.Remote
throughput.
Before
BenchmarkDotNet=v0.13.1, OS=Windows 10.0.19041.1415 (2004/May2020Update/20H1)
AMD Ryzen 9 3900X, 1 CPU, 24 logical and 12 physical cores
.NET SDK=6.0.200
[Host] : .NET 6.0.2 (6.0.222.6406), X64 RyuJIT
DefaultJob : .NET 6.0.2 (6.0.222.6406), X64 RyuJIT
Method | Mean | Error | StdDev | Gen 0 | Gen 1 | Allocated |
---|---|---|---|---|---|---|
WritePayloadPdu | 1,669.6 ns | 21.10 ns | 19.74 ns | 0.2156 | - | 1,808 B |
DecodePayloadPdu | 2,039.7 ns | 12.52 ns | 11.71 ns | 0.2156 | 0.0031 | 1,816 B |
DecodePduOnly | 131.3 ns | 1.32 ns | 1.11 ns | 0.0563 | 0.0002 | 472 B |
DecodeMessageOnly | 1,665.0 ns | 15.03 ns | 14.05 ns | 0.1406 | - | 1,184 B |
DeserializePayloadOnly | 151.2 ns | 1.88 ns | 1.76 ns | 0.0199 | - | 168 B |
After
BenchmarkDotNet=v0.13.1, OS=Windows 10.0.19041.1415 (2004/May2020Update/20H1)
AMD Ryzen 9 3900X, 1 CPU, 24 logical and 12 physical cores
.NET SDK=6.0.200
[Host] : .NET 6.0.2 (6.0.222.6406), X64 RyuJIT
DefaultJob : .NET 6.0.2 (6.0.222.6406), X64 RyuJIT
Method | Mean | Error | StdDev | Gen 0 | Gen 1 | Allocated |
---|---|---|---|---|---|---|
WritePayloadPdu | 1,623.4 ns | 19.95 ns | 18.66 ns | 0.2219 | 0.0031 | 1,880 B |
DecodePayloadPdu | 1,738.6 ns | 22.79 ns | 21.31 ns | 0.2250 | - | 1,888 B |
DecodePduOnly | 175.1 ns | 2.31 ns | 1.93 ns | 0.0572 | - | 480 B |
DecodeMessageOnly | 1,296.8 ns | 11.89 ns | 10.54 ns | 0.1469 | 0.0016 | 1,232 B |
DeserializePayloadOnly | 143.6 ns | 1.59 ns | 1.33 ns | 0.0199 | 0.0002 | 168 B |
If you want to see the full set of changes made in Akka.NET v1.4.41, click here.
COMMITS | LOC+ | LOC- | AUTHOR |
---|---|---|---|
4 | 13003 | 1150 | Gregorius Soedharmo |
1 | 3 | 4 | Aaron Stannard |
1.4.40 July 19 2022
Akka.NET v1.4.40 is a minor release that contains a bug fix for DotNetty SSL support.
- Akka.Remote: SSL Configuration Fails even EnbleSsl property is set to false
- Akka.Streams: Add IAsyncEnumerable Source
If you want to see the full set of changes made in Akka.NET v1.4.40, click here.
COMMITS | LOC+ | LOC- | AUTHOR |
---|---|---|---|
8 | 544 | 64 | Gregorius Soedharmo |
1 | 669 | 3 | Aaron Stannard |
1 | 123 | 26 | Ebere Abanonu |
1 | 101 | 3 | aminchenkov |
1.4.39 June 1 2022
Akka.NET v1.4.39 is a minor release that contains some very important bug fixes for Akka.Remote and Akka.Cluster users.
- Akka.Cluster: Error in
SplitBrainResolver.PreStart
when usingChannelTaskScheduler
for internal-dispatcher - Akka.Cluster.Sharding: make PersistentShardCoordinator a tolerant reader - Akka.Persistence-backed sharding is more lenient when recovering state.
- Akka.Remote: Trap all
Exception
s thrown while trying to dispatch messages inAkka.Remote.EndpointReader
- any kind of exception thrown during deserialization can no longer force a disassociation to occur in Akka.Remote.
If you want to see the full set of changes made in Akka.NET v1.4.39, click here.
COMMITS | LOC+ | LOC- | AUTHOR |
---|---|---|---|
3 | 204 | 99 | Aaron Stannard |
1 | 1 | 13 | Gregorius Soedharmo |
1.4.38 May 6 2022
Akka.NET v1.4.38 is a minor release that contains some minor bug fixes.
- Streams: Add
allowClosedSubstreamRecreation
option to GroupBy - Streams: Fix
Source.ActorRef
not completing bug - Remote: Fix typo thumbprint in
akka.remote
HOCON configuration - Cluster: Fix
ChannelTaskScheduler
to work insideAkka.Cluster
If you want to see the full set of changes made in Akka.NET v1.4.38, click here.
COMMITS | LOC+ | LOC- | AUTHOR |
---|---|---|---|
6 | 177 | 93 | Gregorius Soedharmo |
5 | 424 | 156 | Ismael Hamed |
2 | 86 | 89 | Aaron Stannard |
1 | 45 | 209 | Simon Cropp |
1 | 1 | 1 | dependabot[bot] |
1.4.37 April 14 2022
Akka.NET v1.4.37 is a minor release that contains some minor bug fixes.
- Persistence.Query: Change AllEvents query failure log severity from Debug to Error
- Coordination: Harden LeaseProvider instance Activator exception handling
- Akka: Make ActorSystemImpl.Abort skip the CoordinatedShutdown check
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:
- Akka: Fix CoordinatedShutdown memory leak
- Akka: Fix TcpConnection error handling and death pact de-registration
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:
- Akka: Fixed IActorRef leak inside EventStream
- Akka: Fixed ActorSystemSetup.And forgetting registered types
- Akka.Persistence.Query.Sql: Fixed Query PersistenceIds query bug
- Akka.Streams: Add MapMaterializedValue for SourceWithContext and FlowWithContext
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:
- Akka: Added support to pass a state object into CircuitBreaker to reduce allocations
- Akka.DistributedData: ORSet merge operation performance improvement
- Akka.Streams: FlowWithContext generic type parameters have been reordered to make them easier to read
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.
- Akka: Fix memory leak bug within actor Props
- Akka: Fix ChannelExecutor configuration backward compatibility bug
- Akka.TestKit: Fix ExpectAsync detached Task bug
- DistributedPubSub: Fix DeadLetter suppression for topics with no subscribers
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.
- Akka.Streams: Added Flow.LazyInitAsync and Sink.LazyInitSink to replace Sink.LazyInit
- Akka.Serialization.Hyperion: Implement the new ITypeFilter security feature
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:
- Akka: Added StringBuilder pooling in NewtonsoftJsonSerializer
- Akka.TestKit: Added InverseFishForMessage
- Akka.Streams: Added custom frame sized Flow to Framing
- Akka.Streams: Allow Stream to be consumed as IAsyncEnumerable
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:
- Akka.Cluster: Changed Akka.Cluster startup sequence
- Akka.DistributedData: Fix LightningDB throws MDB_NOTFOUND when data directory already exist
- Akka.IO: Fix memory leak on UDP connector
- Akka.Persistence.Sql: Fix performance issue with highest sequence number query
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
- theWireTap
stage attaches a givenSink
to aFlow
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:
- Akka.Streams:
Source
that flattens aTask
source and keeps the materialized value - Akka.Streams: made
GraphStageLogic.LogSource
virtual and change defaultStageLogic
LogSource
- Akka.IO:
UdpListener
Responds IPv6 Bound message with IPv4 Bind message - Akka.MultiNodeTestRunner: now runs on Linux and as a
dotnet test
package - 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
DBCommand
after finish reading events by PersistenceId - massive performance fix for Akka.Persistence with many log entries on SQL-based journals. - Akka.Actor:
DefaultResizer
does not reisize whenReceiveAsync
is 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! #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
- 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] |
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
- Akka.IO.Tcp: connecting to an unreachable DnsEndpoint never times out
- Akka.Actor: need to enforce
stdout-loglevel = off
all the way through ActorSystem lifecycle - Akka.Actor:
Ask
should push unhandled answers into deadletter - Akka.Routing: Make Router.Route` virtual
- Akka.Actor: Improve performance on
IActorRef.Child
API - signficantly improves performance of many Akka.NET functions, but includes a public API change onIActorRef
that 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 theActorSystem
when resolvingActorSelection
s or remote messages) so this change should be safe. - Akka.Actor:
IsNobody
throws NRE - Akka.Cluster.Tools: singleton fix cleanup of overdue _removed members
- Akka.DistributedData: ddata exclude
Exiting
members 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 |
1.4.24 August 17 2021
Maintenance Release for Akka.NET 1.4
Bug Fixes and Improvements
- Akka: Make
Router
open 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 |
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
- 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 |
Changes:
- 9e9d6ec Added v1.4.51 release notes (#6819)
- 9a35630 Do not use expression based props for long lived streams (#6807)
- 931775a Do not use expression based options for backoff props (#6805)
- 8372f75 Update RELEASE_NOTES.md for 1.4.50 release (#6523)
- 42f9d9d [BACKPORT #6497] Fix of PVS-Studio warnings. (#6521)
- 3970e40 [BACKPORT #6409] Realization of Persistence Query for InMemory Read Journal (#6520)
- 5a697ec [BACKPORT #6503] Fix
StackOverflow
exception whenNewtonsoftJsonSerializer
tries to deserialize aJObject
inside anobject
field (#6522) [ #6502 ] - 3a85e17 Append message content to deadletter log message (#6448) (#6492)
- a455019 Fix ActorTelemetrySpecs pool router unit test (#6376)
- 7cee0ed [BACKPORT #6374] Fix PersistenceIdsPublisher hung on failure messages (#6375)
See More
- 8a2afc2 added v1.4.49 release notes (#6369)
- ffd9a9e close #6295 - set default PoolRouter SupervisorStrategy to Restart (#6366)
- 579741d Fixes FailChunkExecution does not handle
DbExceptions
wrapped in anAggregateException
(#6361) (#6364) - ba9ff3e [BACKPORT] Several stashing improvements (#6323, #6325 and #6327) (#6358)
- 7a33b50 Revert "Add compression option for NewtonSoftJsonSerializer (#6341)" (#6349)
- e5a916c Update RELEASE_NOTES.md for 1.4.49-beta1 release (#6344)
- d7daf56 Add compression option for NewtonSoftJsonSerializer (#6341)
- 062c80c added v1.4.48 release notes (#6330)
- 8613880 Upgrade all v1.4 build systems to use
{os}-latest
(#6329) - 2cd11f5 make
FutureActorRef<T>
unsealed (#6322) - fb507b1 [BACKPORT] move Move Channel Stages from Alpakka to main project. (#6317) [ #6268 ]
- 791bd10 added v1.4.47 release notes (#6301)
- 998dcca
Exception
serialization support for built-in messages (#6297) [ #3903 ] - 7f68c48 add simple actor telemetry (#6294) [ #6293 ]
- 3156272 Akka:Streams Resolve
IAsyncEnumerator.DisposeAsync
bug (#6290) [ #6280 ] - 1974404 Added .NET 7.0 support for release pipelines (#6288) (#6289)
- 2eb3004 [BACKPORT #6281] Add ReceiveAsync to TestActorRef (#6286)
- 37179fe eliminate
ActorPath.ToSerializationFormat
UID allocations (#6195) - b17ce60 Enable dynamic PGO for RemotePingPong and PingPong (#6277)
- bb7435e added real UID to
ActorPathBenchmarks
(#6276) - 76c9364 Akka.Streams:
ReuseLatest
stage to repeatedly emit the most recent value until a newer one is pushed (#6262) - d914eb3 converted build system to .NET 7.0 (#6263)
- 7068ba9 cleaned up duplicate System.Collections.Immutable package reference (#6264)
- 44d3808 added v1.4.46 release notes (#6255)
- 2b85598 Upgrade to Newtonsoft.Json 13.0.1 as minimum version (#6230) (#6252)
- d6ba97a (cherry-picked from 94756d6) (#6253)
- e94913c Make transport adapter messages public (#6250)
- eeb156c [BACKPORT #6221] Report cause for Akka/IO TCP CommandFailed events (#6224) [ #22954 ]
- dca908b Improve Akka.Cluster.Metrics collected values (#6203)
- 61df6fc Separate wire protocol from internal models (#6206)
- 9f84438 Make sure that
DeadLetter
s published byDistributedPubSubMediator
contain full context of topic (#6209) - 5f496e8 Update RELEASE_NOTES.md for 1.4.45 release (#6202)
- 90dde25 Revert ConfigurationException due to binary incompatibility (#6201)
- 79c652f added v1.4.44 release notes (#6197)
- 183ec5a removed boxing allocations inside
FSM
(#6183) - cc3a361 [BACKPORT #6173] Add HashCodeMessageExtractor factory (#6182)
- aca6850 Fix DbCommand.CommandTimeout (#6175) (#6180)
- 7e9e58f [BACKPORT #6166] Eliminate
DefaultLogMessageFormatter
allocations (#6168) - 5f8710d Improve error/exception message for misconfigured cluster provider (#6167)
- 23e5d92 make
DedicatedThreadPool.QueueUserWorkItem<T>
generic (#6156) - 234bb8f Reduce
FSM<TState, TData>
allocations (#6145) [ #2560 ] - a2b27a7 Make
Envelope
a reference type again (#6137) - bf273d9 added actor messaging pressure benchmark (#6147)
- 4b1a746 remove delegate allocation from
ForkJoinDispatcher
andDedicatedThreadPool
(#6143) - f4402cb close #2560 - added performance benchmarks for FSM (#6144)
- 77d92fe Added Dispatcher Benchmarks (#6140)
- 1cee4d5 eliminate mailbox delegate allocations (#6134)
- 7441faa WIP queue benchmarks (#6127)
- 80cc680 Update RELEASE_NOTES.md for 1.4.43 (#6122)
- 86a0679 Fix GetEntityLocation use wrong actor path (#6120)
- 1f131d2 Fixing README.md URLs for v1.4 (#6115)
- bfdd559 close #5375 - made README.md NuGet-friendly (#6112)
- 256235b cleaned up NuGet package descriptions (#6111)
- 9d8f38a Update RELEASE_NOTES.md for v1.4.42 release (#6110)
- 231c8c9 Akka.Cluster.Sharding
GetEntityLocation
Query (#6101) - e2b1d73 [Akka.TestKit] TestKitBase should take arbitrary ActorSystem without throwing (#6092) (#6094)
- 63639b9 Change TestKitBase.InitializeTest to virtual so it can be deferred (#6093)
- 03190b5 Require verbose logging for more gossip send/receive log statements. (#6089) (#6091)
- 07b5b15 Update RELEASE_NOTES.md for 1.4.41 release (#6088)
- 1a1c4b6 Regenerate all protobuf messages (#6087)
- a0f0032
AkkaPduCodec
serializer benchmark (#6078) (#6086) - bfba848 [BACKPORT] #6080 Extend DistributedData Replicator settings with VerboseDebugLogging switch (#6084)
- 3dff658 enabled
Directive.Resume
to log the fullException
(#6070) - c8b46b4 Fix faulty AddLogger in LoggingBus (#6028)
- fc2ed1a Update RELEASE_NOTES.md for 1.4.40 release (#6046) [ #6048 ]
- fc777f3 Cherry-picked from 0c92aac (#6048)
- 7293c6e [BACKPORT #6044] Add IAsyncEnumerable as Akka.Streams Source (#6047)
- 2d4cbb5 [BACKPORT #6038] SSL Configuration fails even EnbleSsl property is set to false (#6043)
- 9db6ec2 These changes shouldn't change the test intent, they should be safe. (#6006)
- 5e1b066 Add Cluster.Sharding ActorInitializationException spec (#5999)
- 8e8f6a3 Model-based tests for
PersistentShardCoordinator.State
(#5974) - 97b4bd8 added v1.4.39 release notes (#5977)
- 36bc254 Fix sharding tolerant reader (#5976)
- 0e7cd06 Trap all exception thrown while trying to dispatch messages in Akka.Remote.EnpointReader (#5971)
- 4fa7abb Allow
PersistentShardCoordinator
to tolerate duplicateShardHomeAllocated
messages (#5967) [ #5604 ] - 9260924 pass
Akka.Cluster.Cluster
intoIDowningProvider
directly (#5965) [ #5962 ] - 67f6737 Update RELEASE_NOTES.md for v1.4.38 release (#5922)
- f60f585 enable
ChannelTaskScheduler
to work inside Akka.Cluster without causing errors inside/system
actors (#5861) [ #5498 ] - 520a4af Fix typo in
akka.remote.dot-netty.ssl.certificate
(#5903) - 7cf5c96 Merge pull request #5883 from Arkatufus/cherrypick_actorref-not-completing [ #5875 ]
- 9c31d13 Backport of #5874: GroupBy fixes (#5882)
- d538a84 Fix markdownlint error
- 327be46 Avoids memory being retained for GroupBy
- a4f72e9 Fixes GroupBy does not invoke decider
- a36765b Allow GroupBy to recreate already closed substreams
- 1456237 Cancel GroupBy when all substreams cancel
- 389c000 GroupBy pulls upstream when a substream materialization is waiting
- e2b7a2c Update MNTR to 1.1.1 and update build script to suit (#5867)
- f40516b Target incrementalist against v1.4 branch for v1.4
This list of changes was auto generated.