[Leadership] Enable implementing leadership decisions outside core lib #1117
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.
Motivation:
It was not possible to implement a "real" leadership election using whatever mechanism one could dream up using the current exposed methods.
We now expose
assumeLeader
which makes the local assumption change, and therefore it is possible to call that method from real leadership election implementations. We should offer more of those AND document how to implement your custom one -- the example impl could be a bully implementation for example.The test uses a dumb implementation that is only there for showcasing how to use the receptionist to discover peers in the process.
Modifications:
LeaderElection
->LegacyLeaderElection
, because it was using NIO Futurescluster.assumeLeader
waitToBecomeLeader
andwaitForLeader(atLeast:within:)
Result:
Ability to implement ANY leadership election mechanism and inform the cluster node which node should be considered the leader.
The leader decision is NOT gossiped. This is entirely up to the leader election mechanism to propagate this information.