Repository navigation
Artery: order DaemonMsgCreate ahead of Watch and retry early inbound resolves - #8414
Merged
Merged
Conversation
…resolves Remote deployment sent DaemonMsgCreate on the ordinary stream while the Watch that follows rode the control stream - no cross-stream ordering, so the Watch systematically arrived first and the deployer reaped the not-yet-created routee. Route DaemonMsgCreate over the control stream (Pekko parity) and, since first ordinary messages can now precede the create, port Pekko's bounded resolve-retry for remote-deployed recipients on the inbound path.
Buffered first-messages for not-yet-created remote-deployed recipients could vanish silently if shutdown landed between retry ticks, and a late inbound frame could schedule against a stopped timer. Drain the buffers to Dropped alongside the outbound drains and guard the buffer path with the shutdown flag.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Remote deployment over Artery sent
DaemonMsgCreateon the ordinary stream while theWatchthat immediately follows rode the control stream — two TCP connections with no cross-stream ordering. TheWatchsystematically arrives first, the receiver watches a not-yet-created actor and repliesDeathWatchNotification(existenceConfirmed: false), and the deployer reaps the freshly-deployed routee before itsSuperviseregistration lands — leaving cluster router pools empty. Deterministic on both platforms; found via the Artery MNTR lanes on #8373 and reproduced locally with receiver-side logs. Classic remoting is unaffected.The fix ports both halves of Pekko's mechanism:
DaemonMsgCreaterides the control stream (ordering it ahead of the Watch, per Association.scala), and because first ordinary messages can now precede the create, the inbound path retries recipient resolution for remote-deployed actors with Pekko's bounded schedule (Codecs.scala) before dead-lettering. Fixes all five failing router MNTR specs over Artery.