feat(consensus): support subnet-splitting in consensus & orchestrator#9748
Draft
kpop-dfinity wants to merge 12 commits intomasterfrom
Draft
feat(consensus): support subnet-splitting in consensus & orchestrator#9748kpop-dfinity wants to merge 12 commits intomasterfrom
kpop-dfinity wants to merge 12 commits intomasterfrom
Conversation
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.
This PR adds support for subnet splitting to the consensus protocol and the orchestrator.
High level overview
On a high level, from the consensus point of view, subnet splitting is conceptually similar to subnet upgrades, in the sense that once a replica sees an instruction in the registry that the subnet they belong should be split, it will schedule the subnet splitting at the nearest summary block, then will create blocks leading to the summary block normally*, and then will keep creating empty blocks (without delivering them to DSM) until the summary block is finalized. If the replica still belongs to the old subnet, it will continue producing the blocks as before, otherwise it will halt until the orchestrator restart the
replicaprocess.diagram
Suppose a subnet splitting instruction was created at registry version
rand at the time of creating a block at heightH-2, a replica update the local registry to version >=r.Detailed overview
Certification
The only change in the certification is that we stop creating/validating certification shares in two cases:
replicaprocessRegistry version freezing
If a subnet splitting is supposed to happen at registry version
r, we make sure that the registry version in the validation context of the blocks is belowr, until the subnet splitting finally happens at the summary block. This is in order to prevent DSM from prematurely thinking that subnet has been splitCUP creation/validation/aggregation