There were two related problems with remote deployment when
using Artery.
* DaemonMsgCreate is not a SystemMessage, but must be sent over the control stream because
remote deployment process depends on message ordering for DaemonMsgCreate and Watch messages.
It must also be sent over the ordinary message stream so that it arrives (and creates the
destination) before the first ordinary message arrives.
* The first point solves the creation of the remote deployed actor but it's not enough.
Resolve of the recipient actor ref may still happen before the actor is created. This
is solved by retrying the resolve for the first message of a remote deployed actor.
* Provide shorter aliases for the ActorRefProviders #20649
* Use the new actorefprovider aliases throughout code and docs
* Cleaner alias replacement logic
* reduce allocations with specialized ImmutableLongMap
* backed by arrays, allocation free lookups with binary search
* use it for UID -> Association Map
* pass Association in InboundEnvelope to reduce to only
one lookup per incoming message
* use ImmutableLongMap instead of the QuarantinedUIDSet
* Some are failing and are marked as ignored, will open
separate issues for those.
* All interesting tests apart from the big RemotingSpec.scala are
ported. Relevant parts of it should be ported but into smaller
more focused tests.
* new SendQueue Source based on agrona ManyToOneConcurrentArrayQueue
* jmh benchmark for send queue
* JMH benchmark for Source.queue, Source.actorRef and the new SendQueue
* inject the queue so that we can start sending to it before materialization
* Get rid of computeIfAbsent in the AssociationRegistry
by making it possible to send (enque) messages to the
Association instance immediatly after construction.
* used wrong protocol by mistake and got weird errors
and it was not obvious that the reason was wrong protocol,
e.g. it created association to itself
* and also set the cachedAssociation
* Reproduced with cluster sample.
* auto-down=45s
* node1 and node2 joins
* suspend node2 (kill -STOP)
* node1 removes and quarantines node2
* resume node2 (kill -CONT)
* node2 receives heartbeat response from node1, which
is not expected since node2 is supposed to be quarantined
* the reason is that the quarantine is overwritten by gating