forked from cockroachdb/cockroach
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
124804: raft: re-enable config change safety r=nvanbenschoten a=pav-kv Config changes in this `raft` implementation require a safety constraint: the leader must not append a config change if it hasn't applied all config changes in its log. The `DisableConfChangeValidation` flag disables this check under the assumption that the state machine layer provides the equivalent guarantee. However, it is hard to argue that this is true in split leaseholder/leader scenarios. This commit re-enables this check, to bring the safety back. The other two state-machine-level checks concerned with entering and leaving joint configs can still be disabled. Related to cockroachdb#105797, etcd-io/raft#81, cockroachdb#106515 (cockroachdb#106515 (comment)) Epic: none Release note: none 124806: release: push PRs to main repo r=celiala a=rail Previously, we pushed PRs using the forked repos. For auto-merge to work, we need to push these PRs back to the main repo, so `GITHUB_TOKEN` has enough privileges to merge the PRs. This PR adds an ability to push the PR branches to the origin repo. Note: the push user has to be given `write` permissions to the repos. Epic: none Release note: None Co-authored-by: Pavel Kalinnikov <pavel@cockroachlabs.com> Co-authored-by: Rail Aliiev <rail@iqchoice.com>
- Loading branch information
Showing
4 changed files
with
117 additions
and
35 deletions.
There are no files selected for viewing
This file contains 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
This file contains 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
This file contains 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
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
# This test verifies that a config change is not proposed if the leader has | ||
# unapplied config changes. This ensures a safety requirement stated in | ||
# https://github.com/etcd-io/etcd/issues/7625#issuecomment-489232411 | ||
|
||
# The check should be performed even if conf change validation is disabled. | ||
add-nodes 1 voters=(1) index=2 disable-conf-change-validation=true | ||
---- | ||
INFO 1 switched to configuration voters=(1) | ||
INFO 1 became follower at term 0 | ||
INFO newRaft 1 [peers: [1], term: 0, commit: 2, applied: 2, lastindex: 2, lastterm: 1] | ||
|
||
campaign 1 | ||
---- | ||
INFO 1 is starting a new election at term 0 | ||
INFO 1 became candidate at term 1 | ||
|
||
stabilize log-level=none | ||
---- | ||
ok | ||
|
||
# Propose one config change. It should be accepted. | ||
propose-conf-change 1 transition=explicit | ||
l2 l3 | ||
---- | ||
ok | ||
|
||
# The first config change gets appended. | ||
process-ready 1 | ||
---- | ||
Ready MustSync=true: | ||
Entries: | ||
1/4 EntryConfChangeV2 l2 l3 | ||
|
||
# Propose another config change. It should be rejected, because the first config | ||
# change hasn't applied on the leader yet. | ||
propose-conf-change 1 | ||
l4 | ||
---- | ||
INFO 1 ignoring conf change {ConfChangeTransitionAuto [{ConfChangeAddLearnerNode 4}] []} at config voters=(1): possible unapplied conf change at index 4 (applied to 3) | ||
|
||
# The new config change is appended to the log as an empty entry. | ||
stabilize 1 | ||
---- | ||
> 1 handling Ready | ||
Ready MustSync=true: | ||
HardState Term:1 Vote:1 Commit:4 | ||
Entries: | ||
1/5 EntryNormal "" | ||
CommittedEntries: | ||
1/4 EntryConfChangeV2 l2 l3 | ||
INFO 1 switched to configuration voters=(1)&&(1) learners=(2 3) | ||
> 1 handling Ready | ||
Ready MustSync=false: | ||
HardState Term:1 Vote:1 Commit:5 | ||
CommittedEntries: | ||
1/5 EntryNormal "" | ||
Messages: | ||
1->2 MsgApp Term:1 Log:1/4 Commit:4 Entries:[1/5 EntryNormal ""] | ||
1->3 MsgApp Term:1 Log:1/4 Commit:4 Entries:[1/5 EntryNormal ""] |