initiate new handshake after restart of receiving system, #20568
* we don't want to include the full origin address in each message, only the UID * that means that the restarted receiving system can't initate a new handshake immediately when it sees message from unknown origin * instead we inject HandshakeReq from the sending system once in a while (1 per second) which will trigger the new handshake * any messages that arrives before the HandshakeReq are dropped, but that is fine since the system was just restarted anyway * note that the injected handshake is only done for active connections, when a message is sent * also changed the UID to a Long, but there are more places in old remoting that must be changed before we actually can use a Long value fix lost first message, #20566 * the first message was sometimes dropped by the InboundHandshake stage because it came from unknown origin, i.e. the handshake had not completed * that happended because the ordinary messagage arrived before the first HandshakeReq, which may happen since we sent the HandshakeReq over the control stream * this changes so that HandshakeReq is sent over the same stream, not only on the control stream and thereby the HandshakeReq will arrive before any other message * always send HandshakeReq as first message * also when the handshake on sender side has been completed at startup * moved code from preStart to onPull
This commit is contained in:
parent
92404bc470
commit
7505393c89
17 changed files with 298 additions and 145 deletions
|
|
@ -25,5 +25,12 @@ object AddressUidExtension extends ExtensionId[AddressUidExtension] with Extensi
|
|||
}
|
||||
|
||||
class AddressUidExtension(val system: ExtendedActorSystem) extends Extension {
|
||||
val addressUid: Int = ThreadLocalRandom.current.nextInt()
|
||||
}
|
||||
val longAddressUid: Long = {
|
||||
// FIXME we should use a long here, but then we need to change in Cluster and RemoteWatcher also
|
||||
//ThreadLocalRandom.current.nextLong()
|
||||
ThreadLocalRandom.current.nextInt()
|
||||
}
|
||||
|
||||
@deprecated("Use longAddressUid instead", "2.4.x")
|
||||
val addressUid: Int = longAddressUid.toInt
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue