To implement the feature VirtualPathContainer.! was overridden to handle
ActorSelectionMessages. In ActorSelectionMessages only SelectChildName
elements are supported to disallow counterintuitive behaviors (like
completing all outstanding ask operations).
* When new uid is seen in join attempt we can down existing
member and thereby new restarted node will be able to join
in later retried join attempt without relying on auto-down.
When a java.net.BindException occurs, it produces an exception with a cause and
message that is "null" because it's cause returns no message. This notably occurs
when a java.net.BindException occurs during construction of a TCP selector. This
patch causes a log message like this:
java.net.BindException: Can't assign requested address
instead of like this:
null
which is quite a bit more helpful when diagnosing connection issues.
Guardians are now consistent with other actors in that they
do not handle messages they can't act upon. Instead of handling
messages and forwarding them to Dead Letters, guardians now
simply ignore these messages.
* also improved fault handling in various places (bugs found)
* and manually triggered Update must be distinguished from scheduled
auto updates, otherwise manual Update will schedule extra auto updates
* Skip observations from downed node (quarantined is marked down immediately)
in convergence check
* Skip observations from downed node when picking "reachable" targets for gossip.
* This also means that we must accept gossip with own node marked as unreachable,
but that should not be spread to the external membership events.
* The problem was that the sys msg buffer was filled up during
the deploy phase and triggered quarantine too early and therefore
the "hello" reply was lost. The "hello" ping-pong was not good
enough for deploying one-by-one.
(cherry picked from commit f729afe1fa5401e562655e5a0aaab3f9789e4df6)
Conflicts:
akka-cluster/src/multi-jvm/scala/akka/cluster/SurviveNetworkInstabilitySpec.scala
This is the first step towards more type-safety in Actor interactions,
comprising:
* generic ActorRef[T] that only accepts T messages
* generic ActorSystem[T] extends ActorRef[T] (sending to the guardian,
whose Props[T] are provided for ActorSystem construction)
* removed the Actor trait: everything in there has been made into
messages and signals
* new Behavior[T] abstraction that consumes messages (of type T) or
Signals (lifecycle hooks, Terminated, ReceiveTimeout, Failed),
producing the next Behavior[T] as the result each time
* the ask pattern is provided and yields properly typed Futures
* variants of ActorContext are provided for synchronous testing of
Behaviors
All of this is implemented without touching code outside akka-typed
(apart from making guardianProps configurable), creating wrapper objects
around ActorRef, ActorContext, ActorSystem, Props and providing an Actor
implementation that just runs a Behavior.