Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Akka.NET v1.4.25 Release #5275

Merged
merged 46 commits into from
Sep 8, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
a00b43e
Added v1.4.25 placeholder
Aaronontheweb Aug 17, 2021
8093f41
Update RELEASE_NOTES.md
Aaronontheweb Aug 17, 2021
bc004ae
Akka.Cluster.Sharding performance benchmarks (#5209)
Aaronontheweb Aug 18, 2021
bbbfd0d
Bump Microsoft.NET.Test.Sdk from 16.10.0 to 16.11.0 (#5200)
dependabot[bot] Aug 18, 2021
6a3c04a
added hashcode message extractor benchmarks (#5215)
Aaronontheweb Aug 19, 2021
e38295b
cached ShardIds generated by HashCodeMessageExtractor (#5216)
Aaronontheweb Aug 19, 2021
e96833b
fix IsNobody for actorref-mock and add unit test for it. (#5220)
Zetanova Aug 24, 2021
bd695c1
Bump FsCheckVersion from 2.15.3 to 2.16.0 (#5198)
dependabot[bot] Aug 25, 2021
a23ebf0
Exclude exiting members in Read/Write MajorityPlus (migrated from htt…
zbynek001 Aug 26, 2021
0abb1f3
Fix example configuration (#5233)
tometchy Aug 30, 2021
3df4b90
singleton fix cleanup of overdue _removed members (#5229)
zbynek001 Aug 30, 2021
243d257
Benchmark to test SingleRequestResponseToRemoteEntity with a local pr…
carlcamilleri Aug 30, 2021
1c183fa
Take Akka.Persistence.Sql.Common out of beta (#5236)
Aaronontheweb Aug 31, 2021
8c800cf
Refactor AdaptiveLoadBalancingRoutingLogic to use IClusterMetricsRout…
Arkatufus Aug 31, 2021
426111f
Make `Router.Route` virtual (#5238)
Aaronontheweb Aug 31, 2021
682ca13
adding `GetChild` benchmark (#5239)
Aaronontheweb Sep 1, 2021
77ed55d
fixed baseline benchmark (#5243)
Aaronontheweb Sep 2, 2021
f0c0ebf
added benchmark for `VirtualPathContainer` resolution (#5244)
Aaronontheweb Sep 2, 2021
4c494fe
improveme child lookup performance (#5241)
Aaronontheweb Sep 2, 2021
d25db5d
Improve performance on `IActorRef.Child` API (#5242)
Aaronontheweb Sep 2, 2021
c3b6880
added LRU cache support to inbound Akka.Remote IActorRef resolution (…
Aaronontheweb Sep 2, 2021
1e889f3
added `LruBoundedCache` benchmarks (#5248)
Aaronontheweb Sep 3, 2021
cac54cb
Ask should push unhandled answers into deadletter (#5221)
Zetanova Sep 3, 2021
e4c729f
added .NET 5 support to microbenchmarks (#5249)
Aaronontheweb Sep 3, 2021
f09a227
pumped up the LruCache benchmark invocation count to get more accurat…
Aaronontheweb Sep 3, 2021
be057ab
Revert "Ask should push unhandled answers into deadletter (#5221)" (#…
Aaronontheweb Sep 6, 2021
b39bce3
harden Bugfix4360Spec (#5256)
Aaronontheweb Sep 6, 2021
850bdb1
disabled Akka.Persistence.TCK.Query.ReadJournal_should_deallocate_All…
Aaronontheweb Sep 6, 2021
f6e2ab9
Bump FsCheckVersion from 2.16.0 to 2.16.3 (#5255)
dependabot[bot] Sep 6, 2021
eb11339
skip racy substream spec (#5258)
Aaronontheweb Sep 6, 2021
a0398a8
hardened UnfoldFlowSpec (#5262)
Aaronontheweb Sep 6, 2021
1b2f4c7
hardened more UnflowFlowSpec (#5263)
Aaronontheweb Sep 6, 2021
c232441
harden ManyRecoveriesSpec (#5264)
Aaronontheweb Sep 6, 2021
e692f5f
added `IActorRef` benchmarks (#5266)
Aaronontheweb Sep 6, 2021
0481fc8
harden GraphStageTimersSpec (#5267)
Aaronontheweb Sep 6, 2021
6c46252
harden Bugfix4360 (#5268)
Aaronontheweb Sep 7, 2021
b1c9643
harden UnfoldFlowSpec (#5269)
Aaronontheweb Sep 7, 2021
2a3390c
harden `ClusterShardingLeavingSpec` (#5164)
Aaronontheweb Sep 7, 2021
8d5de94
harden SqliteCurrentAllEventsSpec (#5270)
Aaronontheweb Sep 7, 2021
1f779fe
disable Actor_PipeTo_should_not_be_delayed_by_async_receive (#5271)
Aaronontheweb Sep 7, 2021
48a704c
Ask should push unhandled answers into deadletter 2 (#5259)
Zetanova Sep 7, 2021
8a42eda
Fix Dns.Resolve issue by using ContinueWith and AggregateException.Fl…
Arkatufus Sep 7, 2021
8f168fc
experimenting with RemoteActorRefProvider address resolution performa…
Aaronontheweb Sep 8, 2021
8279ed4
Make sure stdout-loglevel setting is honored through the whole actor …
Arkatufus Sep 8, 2021
024c684
obsolete Akka.Actor.Failure and use and improve Akka.Actor.Status (#5…
Zetanova Sep 8, 2021
f12e0b0
Akka.NET v1.4.25 Release Notes (#5274)
Aaronontheweb Sep 8, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,76 @@
#### 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](https://github.com/akkadotnet/akka.net/issues/5154)
* [Akka.Actor: need to enforce `stdout-loglevel = off` all the way through ActorSystem lifecycle](https://github.com/akkadotnet/akka.net/issues/5246)
* [Akka.Actor: `Ask` should push unhandled answers into deadletter](https://github.com/akkadotnet/akka.net/pull/5259)
* [Akka.Routing: Make Router.Route` virtual](https://github.com/akkadotnet/akka.net/pull/5238)
* [Akka.Actor: Improve performance on `IActorRef.Child` API](https://github.com/akkadotnet/akka.net/pull/5242) - _signficantly_ improves performance of many Akka.NET functions, but includes a public API change on `IActorRef` that is source compatible but not necessarily binary-compatible. `IActorRef GetChild(System.Collections.Generic.IEnumerable<string> name)` is now `IActorRef 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 the `ActorSystem` when resolving `ActorSelection`s or remote messages) so this change should be safe.
* [Akka.Actor: `IsNobody` throws NRE](https://github.com/akkadotnet/akka.net/issues/5213)
* [Akka.Cluster.Tools: singleton fix cleanup of overdue _removed members](https://github.com/akkadotnet/akka.net/pull/5229)
* [Akka.DistributedData: ddata exclude `Exiting` members in Read/Write `MajorityPlus`](https://github.com/akkadotnet/akka.net/pull/5227)

**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](https://github.com/akkadotnet/akka.net/milestone/56?closed=1)

| 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**

Expand Down
49 changes: 36 additions & 13 deletions docs/articles/utilities/logging.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,28 @@ Akka.NET comes with two built in loggers.
* __StandardOutLogger__
* __BusLogging__

### StandardOutLogger
`StandardOutLogger` is considered as a minimal logger and implements the `MinimalLogger` abstract
class. Its job is simply to output all `LogEvent`s emitted by the `EventBus` onto the console.
Since it is not an actual actor, ie. it doesn't need the `ActorSystem` to operate, it is also
used to log other loggers activity at the very start and very end of the `ActorSystem` life cycle.
You can change the minimal logger start and end life cycle behaviour by changing the
`akka.stdout-loglevel` HOCON settings to `OFF` if you do not need these feature in your application.

### Advanced MinimalLogger Setup
You can also replace `StandardOutLogger` by making your own logger class with an empty constructor
that inherits/implements the `MinimalLogger` abstract class and passing the fully qualified class
name into the `akka.stdout-logger-class` HOCON settings.

> [!WARNING]
> Be aware that `MinimalLogger` implementations are __NOT__ real actors and will __NOT__ have any
> access to the `ActorSystem` and all of its extensions. All logging done inside a `MinimalLogger`
> have to be done in as simple as possible manner since it is used to log how other loggers are
> behaving at the very start and very end of the `ActorSystem` life cycle.
>
> Note that `MinimalLogger` are __NOT__ interchangeable with other Akka.NET loggers and there can
> only be one `MinimalLogger` registered with the `ActorSystem` in the HOCON settings.

## Contrib Loggers
These loggers are also available as separate nuget packages

Expand Down Expand Up @@ -64,17 +86,18 @@ akka {
```
## Example configuration
```hocon
akka {
stdout-loglevel = DEBUG
loglevel = DEBUG
log-config-on-start = on
actor {
debug {
receive = on
autoreceive = on
lifecycle = on
event-stream = on
unhandled = on
}
}
akka {
stdout-loglevel = DEBUG
loglevel = DEBUG
log-config-on-start = on
actor {
debug {
receive = on
autoreceive = on
lifecycle = on
event-stream = on
unhandled = on
}
}
}
```
15 changes: 15 additions & 0 deletions src/Akka.sln
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SerializationBenchmarks", "
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DDataStressTest", "examples\Cluster\DData\DDataStressTest\DDataStressTest.csproj", "{44B3DDD6-6103-4E8F-8AC2-0F4BA3CF6B50}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Akka.Cluster.Benchmarks", "benchmark\Akka.Cluster.Benchmarks\Akka.Cluster.Benchmarks.csproj", "{3CEBB0AE-6A88-4C32-A1D3-A8FB1E7E236B}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -1137,6 +1139,18 @@ Global
{44B3DDD6-6103-4E8F-8AC2-0F4BA3CF6B50}.Release|x64.Build.0 = Release|Any CPU
{44B3DDD6-6103-4E8F-8AC2-0F4BA3CF6B50}.Release|x86.ActiveCfg = Release|Any CPU
{44B3DDD6-6103-4E8F-8AC2-0F4BA3CF6B50}.Release|x86.Build.0 = Release|Any CPU
{3CEBB0AE-6A88-4C32-A1D3-A8FB1E7E236B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3CEBB0AE-6A88-4C32-A1D3-A8FB1E7E236B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3CEBB0AE-6A88-4C32-A1D3-A8FB1E7E236B}.Debug|x64.ActiveCfg = Debug|Any CPU
{3CEBB0AE-6A88-4C32-A1D3-A8FB1E7E236B}.Debug|x64.Build.0 = Debug|Any CPU
{3CEBB0AE-6A88-4C32-A1D3-A8FB1E7E236B}.Debug|x86.ActiveCfg = Debug|Any CPU
{3CEBB0AE-6A88-4C32-A1D3-A8FB1E7E236B}.Debug|x86.Build.0 = Debug|Any CPU
{3CEBB0AE-6A88-4C32-A1D3-A8FB1E7E236B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3CEBB0AE-6A88-4C32-A1D3-A8FB1E7E236B}.Release|Any CPU.Build.0 = Release|Any CPU
{3CEBB0AE-6A88-4C32-A1D3-A8FB1E7E236B}.Release|x64.ActiveCfg = Release|Any CPU
{3CEBB0AE-6A88-4C32-A1D3-A8FB1E7E236B}.Release|x64.Build.0 = Release|Any CPU
{3CEBB0AE-6A88-4C32-A1D3-A8FB1E7E236B}.Release|x86.ActiveCfg = Release|Any CPU
{3CEBB0AE-6A88-4C32-A1D3-A8FB1E7E236B}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down Expand Up @@ -1245,6 +1259,7 @@ Global
{D62F4AD6-318F-4ECC-B875-83FA9933A81B} = {162F5991-EA57-4221-9B70-F9B6FEC18036}
{2E4B9584-42CC-4D17-B719-9F462B16C94D} = {73108242-625A-4D7B-AA09-63375DBAE464}
{44B3DDD6-6103-4E8F-8AC2-0F4BA3CF6B50} = {C50E1A9E-820C-4E75-AE39-6F96A99AC4A7}
{3CEBB0AE-6A88-4C32-A1D3-A8FB1E7E236B} = {73108242-625A-4D7B-AA09-63375DBAE464}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {03AD8E21-7507-4E68-A4E9-F4A7E7273164}
Expand Down
67 changes: 67 additions & 0 deletions src/benchmark/Akka.Benchmarks/Actor/ActorRefBenchmarks.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
// //-----------------------------------------------------------------------
// // <copyright file="ActorRefBenchmarks.cs" company="Akka.NET Project">
// // Copyright (C) 2009-2021 Lightbend Inc. <http://www.lightbend.com>
// // Copyright (C) 2013-2021 .NET Foundation <https://github.com/akkadotnet/akka.net>
// // </copyright>
// //-----------------------------------------------------------------------

using System;
using System.Threading.Tasks;
using Akka.Actor;
using Akka.Benchmarks.Configurations;
using BenchmarkDotNet.Attributes;

namespace Akka.Benchmarks.Actor
{
[Config(typeof(MicroBenchmarkConfig))] // need memory diagnosis
public class ActorRefBenchmarks
{
[Params(10000)]
public int Iterations { get; set; }
private TimeSpan _timeout;
private ActorSystem _system;
private IActorRef _echo;
private IActorRef _echo2;

[GlobalSetup]
public void Setup()
{
_timeout = TimeSpan.FromMinutes(1);
_system = ActorSystem.Create("system");
_echo = _system.ActorOf(Props.Create(() => new EchoActor()), "echo");
_echo2 = _system.ActorOf(Props.Create(() => new EchoActor()), "echo2");
}

[Benchmark]
public int ActorRefGetHashCode()
{
return _echo.GetHashCode();
}

[Benchmark]
public bool ActorRefEqualsSelf()
{
return _echo.Equals(_echo);
}

[Benchmark]
public bool ActorRefEqualsSomeoneElse()
{
return _echo.Equals(_echo2);
}

[GlobalCleanup]
public void Cleanup()
{
_system.Terminate().Wait();
}

public class EchoActor : UntypedActor
{
protected override void OnReceive(object message)
{
Sender.Tell(message);
}
}
}
}
Loading