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
- Deprecated/removed Akka.DI package
Please use the newAkka.DependencyInjection
NuGet package as a replacement. Documentation can be read here - Deprecated/removed Akka.MultiNodeTestRunner package
Please use the newAkka.MultiNode.TestAdapter
NuGet package as a replacement. Documentation can be read here. - [Streams] Refactor
SetHandler(Inlet, Outlet, IanAndOutGraphStageLogic)
toSetHandlers()
Changes
Akka
- Add dual targetting to support .NET 6.0
AllAkka.NET
packages are now dual targetting netstandard2.0 and net6.0 platforms, we will be integrating .NET 6.0 better performing API and SDK in the future. - Add
IThreadPoolWorkItem
support toThreadPoolDispatcher
- Add
ValueTask
support toPipeTo
extensions - Add
CancellationToken
support toCancelable
- Fix long starting loggers crashing
ActorSystem
startup
All loggers are asynchronously started duringActorSystem
startup. A warning will be logged if a logger does not respond within the prescribedakka.logger-startup-timeout
period and will be awaited upon in a detached task until theActorSystem
is shut down. This have a side effect in that slow starting loggers might not be able to capture all log events emmited by theEventBus
until it is ready.
Akka.Cluster
- Fix
ChannelTaskScheduler
to work with Akka.Cluster, ported from 1.4 - Harden
Cluster.JoinAsync()
andCluster.JoinSeedNodesAsync()
methods - Fix
ShardedDaemonProcess
should use lease, if configured - Make
SplitBrainResolver
more tolerant to invalid node records - Enable
Heartbeat
andHearbeatRsp
message serialization and deserialization
By default,Akka.Cluster
will now use the newHeartbeat
andHartbeatRsp
message serialization/deserialization that was introduced in version 1.4.19. If you're doing a rolling upgrade from a version older than 1.4.19, you will need to setakka.cluster.use-legacy-heartbeat-message
to true.
Akka.Cluster.Sharding
- Make Cluster.Sharding recovery more tolerant against corrupted persistence data
- Major reorganization to 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
- Add typed
ClusterSingleton
support - Singleton can use
Member.AppVersion
metadata to decide its host node during hand-over
Akka.Cluster.Singleton
can useMember.AppVersion
metadata when it is relocating the singleton instance. When turned on, new singleton instance will be created on the oldest node in the cluster with the highestAppVersion
number. You can opt-in to this behavior by settingakka.cluster.singleton.consider-app-version
to true.
Akka.Persistence.Query
Akka.Remote
- Fix typo in HOCON SSL settings. Backward compatible with the old setting names
- Treat all exceptions thrown inside
EndpointReader
message dispatch as transient, Ported from 1.4 - Fix SSL enable HOCON setting
Akka.Streams
- Allow GroupBy sub-flow to re-create closed sub-streams, backported to 1.4
- Fix ActorRef source not completing properly, backported to 1.4
- Rewrite
ActorRefSink
as aGraphStage
- Add stream cancellation cause upstream propagation, ported from 1.4
- Fix
VirtualProcessor
subscription bug, ported from 1.4 - Refactor
Sink.Ignore
signature fromTask
toTask<Done>
- Add
SourceWithContext.FromTuples()
operator` - Add
GroupedWeightedWithin
operator - Add
IAsyncEnumerable
source
Akka.TestKit
Changes:
- c948581 Update RELEASE_NOTES.md for 1.5.0-alpha1 release (#6069)
- 9acaf00 Cluster singleton should consider Member AppVersion during hand over. (#6065)
- d55f67f [Cluster] Enable HeartbeatResponse message type (#6063)
- 899c3a2 Singleton class and settings based on current Akka Typed implementation (#6050)
- 207e7b8 [SBR] Ignore reachability records for invalid nodes (#6064)
- 9410a4c Tutorial improvements (#6057)
- 03de287 Fixes log and uses cluster sharding
LeaseSettings
, if configured, in ShardedDaemonProcess (#6058) - f571e26 Fix Streams.Tests.Dsl.MergeHub_must_work_with_long_streams_when_buffer_size_is_1 (#6054)
- 411c800 Fix faulty AddLogger in LoggingBus (#6028) (#6053)
- 6f28f17 migrate project chat from Gitter to Discord (#6052)
See More
- b1eb688 Make JoinAsync and JoinSeedNodesAsync more robust by checking cluster UP status (#6033)
- 59cda86 Fix attempt, AsyncEnumerableSpec was hung (#6049)
- e9b643f Improve Akka.Actor.Cancelable (#6032)
- 0c92aac cleaned up
IAsyncEnumerable
Source to use local functions (#6045) - af513b0 Add IAsyncEnumerable Akka.Streams Source (#6044)
- 32040a3 Fix ClusterLogSpec, EventFilter does not play nice with Within (#6041)
- b21f5fa SSL Configuration Fails even EnbleSsl property is set to false (#6038)
- 4b667c6 harden
ClusterLogSpec
(#6031) - 0efdc18 Fix ClusterSpec CoordinatedShutdown (#6034)
- a626bd9 harden HubSpec duration (#6030)
- 0c9677f Add ValueTask support to PipeTo (#6025)
- 6839192 [Async TestKit] Convert Akka.Streams.Tests to async - Dsl.UnfoldResourceAsyncSourceSpec (#6023)
- 566a46c [Async TestKit] Fix racy specs (#6027)
- 6acea81 [Async TestKit] Convert Akka.Streams.Tests Dsl.TickSourceSpec (#6024)
- 7da2aa7 Added TimeBasedUuid offset (#5995)
- d16b934 Convert Akka.Streams.Tests to async - Extra.FlowTimedSpec (#5993)
- f3469d7 [Async TestKit] Fix WithinAsync and Remaining logic (#6010)
- b56ea0b Disabling GH NuGet nightly flow (#6021)
- 65edb0c Apply LocalFact and LocalTheory attributes to racy tests (#6012)
- 0a2162a Bump FsCheckVersion from 2.16.4 to 2.16.5 (#6008)
- 125a2a3 Add environment variable controlled skipable LocalFactAttribute (#6009)
- f46d845 Added GroupedWeightedWithin operator (#6000)
- 6c07c56 [Async TestKit] Convert Akka.Streams.Tests to async - FlowFlattenMergeSpec FlowGroupBySpec TimeoutsSpec (#5963)
- 5ca2166 Convert Akka.Streams.Tests to async - Actor.ActorSubscriberSpec (#5992)
- 64b8daa Bump Verify.Xunit from 16.5.4 to 17.1.4 (#6007)
- 6991066 Bump Microsoft.NET.Test.Sdk from 17.0.0 to 17.2.0 (#6005)
- 138d576 Bump Google.Protobuf from 3.19.4 to 3.21.1 (#6004)
- 9e64ca3 Remove MultiNodeTestRunner projects (#6002)
- 6e5dc1e Remove old Akka.DI dependency injection projects (#6003)
- e3be344 Port of #5999: Add Cluster.Sharding ActorInitializationException spec (#6001)
- 52dfcc1 Reset non-stream specs back on (#5994)
- 8f960ff [Async TestKit] Modernize TcpStage and TcpListener (#5989)
- f595f63 Convert Akka.Streams.Tests to async - Actor.ActorPublisherSpec (#5991)
- d8e62f6 Convert Akka.Streams.Tests to async - Dsl.LastSinkSpec (#5990)
- daa2491 Added missing
SourceWithContext.FromTuples
operator (#5987) - 6cd1b3a Started Akka.Cluster troubleshooting guide (#5983)
- e4af8f0 Update integration.md (#5985)
- 9c3aa67 [Async TestKit] Convert Akka.Cluster.Tests to async - ClusterSpec (#5984)
- 1032308 TcpTransport classs instead of DotNettyTransport class in hocon configuration (#5982)
- 420fd61 Removed generic constraint on type parameter in WatchTermination (#5981)
- 3413ef6 Fixes Sink.Ignore signature from Task to Task (#5973)
- a7c17e2 Backport #5976 - Fix sharding tolerant reader (#5978)
- 9063439 Convert Akka.Streams.Tests to async - Dsl.RestartSpec (#5955)
- 34c830a Trap all exception thrown while trying to dispatch messages in Akka.Remote.EndpointReader (#5972)
- 1f489fc Backport of #5965 - pass Akka.Cluster.Cluster into IDowningProvider directly (#5968)
- cfbdd5b Update logging.md (#5928)
- ce1b8ef feat: info about serilog context properties (#5964)
- a4a6fdd [Async TestKit] Convert Akka.Streams.Tests to async - Dsl.FlowCollectSpec (#5960)
- a3030ff Convert Akka.Streams.Tests to async - Dsl.FlowSpec (#5957)
- e9acd1f Fix broken images in NuGet.org readme (#5958)
- 3603cff Convert Akka.Streams.Tests to async - Dsl.FlowDelaySpec (#5956)
- 62adbcb update Incrementalist to 0.7.0 (#5959)
- 587354d Fix broken incrementalist, build script was targetting the wrong GitHub branch (#5961)
- ed62940 [PORT] akka/akka#24722: Bugfix in VirtualProcessor (#5950)
- 188984a Add
IThreadPoolWorkItem
support toThreadPoolDispatcher
(#5943) - f4aadaf [Async TestKit] Merge
feature/async_testkit
branch intodev
branch (#5953) [ #5660, #5662, #5665, #5672, #5664, #5666, #5668, #5669, #5542, #5676, #5678, #5683, #5685, #5682, #5698, #5701, #5704, #5703, #5716, #5721, #5718, #5745, #5755, #5754, #5753, #5752, #5756, #5757, #5758, #5759, #5761, #5762, #5760, #5764, #5770, #5765, #5767, #5763, #5768, #5766, #5771, #5772, #5769, #5773, #5774, #5775, #5776, #5777, #5778, #5780, #5781, #5782, #5793, #5783, #5784, #5785, #5786, #5787, #5788, #5789, #5791, #5795, #5790, #5794, #5797, #5796, #5798, #5799, #5800, #5801, #5803, #5804, #5807, #5806, #5809, #5810, #5811, #5812, #5813, #5814, #5815, #5825, #5826, #5827, #5828, #5829, #5830, #5831, #5832, #5833, #5713, #5851, #5853, #5852, #5858, #5864, #5865, #5868, #5869, #5870, #5871, #5872, #5876, #5877, #5879, #5880, #5884, #5885, #5892, #5891, #5900, #5886, #5887, #5888, #5893, #5889, #5905, #5890, #5904, #5898, #5899, #5894, #5896, #5901, #5906, #5907, #5909, #5911, #5910, #5912, #5913, #5915, #5914, #5919, #5918, #5923, #5924, #5925, #5916, #5937, #5933, #5938, #5939, #5936, #5940, #5934, #5917, #5932, #5935, #5954 ] - 0e948db [PORT] akka/akka#27266 - Propagate stream cancellation causes (#5949)
- 1893800 Rewrite actor ref sink as a graph stage (#5930)
- 3c7a8e4 Renamed method
SetHandler
accepting both callbacks toSetHandlers
(#5931) - e89287f added .NET 6 dual targeting to all assemblies (#5926)
- 6963557 enable
ChannelTaskScheduler
to work inside Akka.Cluster without causing errors inside/system
actors (#5861) (#5920) [ #5498 ] - c2460eb Fix typo in
akka.remote.dot-netty.ssl.certificate
(#5895) - 8b19302 Fix Source.ActorRef not completing (#5875)
- 924bb15 GroupBy fixes (#5874) [ #5867 ]
- c80c11c Update MNTR to 1.1.1 and update build script to suit (#5866)
- 9bbb68f fix sharding recovery (#5863)
- 8e7f021 cleaned up some allocations and styling (#5855)
- 9194549 Bump Swashbuckle.AspNetCore from 6.2.3 to 6.3.0 (#5848)
- 2cbdbcb Zbynek001 sharding update2 (#5857)
- 7b7e0ec change
dev
version number to 1.5-x (#5856)
This list of changes was auto generated.