Dear hakkers,
We are pleased to announce a new patch release of Akka 2.5. Great news, with this release we have declared the
new Actor APIs (Akka Typed) and Artery ready for use in production, more about that below.
An API for a distributed lease (lock) has been added to a new module called
Akka Coordination.
The lease can be used with Cluster Sharding and Singleton, as well as Lightbend’s
Split Brain Resolver
for additional additional safety measures for split brain scenarios. More details below.
Some other notable improvements and bug fixes in 2.5.22 are:
- Performance improvement of DNS resolution for SRV records #25948
- Simplify backoff supervision API, thanks to @nvollmar, #26156
- Rewrite
Source.actorRef
asGraphStage
, thanks to @nvollmar, #25324 - New shutdown reasons added to
CoordinatedShutdown
, #26570 - Enable new serializer for
ShardRegionStats
that was added in 2.5.18, see rolling updates - Less restrictive pattern for matching SRV service names, #26332
- Fix race condition in lazy sink on immediate failure, #25410
- Rename
startContextPropagation
toasFlowWithContext
andendContextPropagation
toasFlow
inFlowWithContext
, similar forSourceWithContext
, #26353 - Switch to Scalafmt #26356
A total of 125 issues were closed since 2.5.21. The complete list can be found on the 2.5.22 milestone on github.
New Actor API (Akka Typed)
After much testing and intense development of a few important features we are confident that Akka Typed
has the quality and performance to be used in production.
It’s still marked as may change, which means
that API or semantics can change without warning or deprecation period. For Akka Typed we have iterated over
the APIs for a long time so we don’t expect any major changes, but your feedback is very much welcome. Such
changes, if any, will be collected and performed in Akka 2.6.0 rather than in upcoming 2.5.x patch versions.
The APIs of Akka Typed will be fully stable in Akka 2.6.0. This will give you a good period of stability
without having to worry about changes in each version. We will of course backport critical bug fixes.
Additions and changes:
- Addition of message routers, see documentation, #25612
- Support for deleting snapshots and events by introducing
RetentionCriteria
, see documentation, #24698 - The way to declare when snapshots should be stored changed with the new
RetentionCriteria
, see snapshotting - Supervision when combining typed and typed actors changed. The default supervision for untyped actors is
to restart where as for typed it is to stop. When combining untyped and and typed actors the default
supervision is based on the default behavior of the child i.e. if an untyped actor creates a typed
child, its default supervision will be to stop. If a typed actor creates an untyped child, its
default supervision will be to restart. - Fix memory leak in
watchWith
, thanks to @longshorej, #26625 - Prevent surprising ordering of
unstashAll
and side effects inEventSourcedBehavior
by introducingEffectBuilder
type, #26489 - Use signals instead of callbacks in
EventSourcedBehavior
, #25428 - Change signature of
terminate
,whenTerminated
andgetWhenTerminated
inActorSystem
, #25647 - New classes for
SnapshotSelectionCriteria
andSnapshotMetadata
, #26536 - Fix leak of timers when stopping, #26285
- Handle exceptions, unhandled, stopped, and same in
StashBuffer
- More robust way to discard obsolete timer messages, #26556
- Access to
lastSequenceNr
fromEventSourcedBehavior
, #25113 - Support mutable state in
EventSourcedBehavior
, #25740
Artery
After some final scalability testing we can now declare Artery TCP
ready to be used in production. In Akka 2.6.0 we will make the Artery TCP transport the default for actor messaging.
See the short migration guide
for how to switch. Classic remoting will be deprecated in 2.6.0 and removed earliest in 2.7.0.
Artery improves stability for systems using Akka Cluster and also has much better performance.
One thing to be aware of is that rolling update from classic remoting to Artery is not supported since the protocol
is completely different. It will require a full cluster shutdown and new startup.
Distributed lease
The distributed lease can be used
for additional additional safety measures for split brain scenarios in the following modules:
- Lightbend’s Split Brain Resolver. An additional safety measure so that only one SBR instance can make the decision to remain up.
- Cluster Singleton. A singleton manager can be configured to acquire a lease before creating the singleton.
- Cluster Sharding. Each shard can be configured to acquire a lease before creating entity actors.
An implementation for Kubernetes
is available for Lightbend customers.
Note that akka-coordination is a new transitive dependency from
akka-cluster-sharding
and akka-cluster-tools
. When using a build tool such as sbt, Maven or Gradle this dependency
will automatically be included, otherwise you need to add it if you use Cluster Sharding or Cluster Singleton.
Credits
For this release we had the help of 34 committers – thank you all very much!
commits added removed
53 25442 21331 Patrik Nordwall
28 3579 878 Johan Andrén
20 521 283 Arnout Engelen
18 2977 430 Christopher Batey
13 952 869 Nicolas Vollmar
12 837 271 Helena Edelson
7 13 7 Yoel Garcia Diaz
6 467 67 Luc Bourlier
5 172 68 Gaël Bréard
5 26 147 Johannes Rudolph
5 26 22 Enno
4 19 6 Varun Sivapalan
2 36 16 Ignasi Marimon-Clos
2 21 11 kerr
2 3 9 Tim Moore
2 3 3 Hungai Amuhinda
1 86 86 Seth Tisue
1 83 78 Heiko Seeberger
1 91 62 Tzu-Chiao Yeh
1 80 29 Renato Cavalcanti
1 43 33 Yaroslav Klymko
1 18 16 Jason Longshore
1 9 9 Leandro
1 11 6 daniperez
1 12 2 Adriaan Groenenboom
1 3 4 Dale Wijnand
1 3 3 Yoel García Díaz
1 2 2 zhongl
1 4 0 James Roper
1 1 1 Piotr Gawryś
1 1 1 Vasilis Nicolaou
1 1 1 Zili Chen
1 1 1 Martynas Mickevičius
1 1 1 Tomek Kopczynski
Thanks to Lightbend for their continued sponsorship of the Akka core
team’s efforts. Lightbend offers commercial support
for Akka.
Happy hakking!
– The Akka Team