Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Joint Consensus #101

Merged
merged 50 commits into from
Feb 14, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
1b77e82
Enable Joint Consensus.
Hoverbear Sep 12, 2018
21068ff
Reduce trace messages
Hoverbear Nov 21, 2018
79df099
Test and bugfix intermingled conf changes
Hoverbear Nov 22, 2018
cd93df0
Harmonize function names, documentation example.
Hoverbear Nov 22, 2018
c62aee7
fmt
Hoverbear Nov 22, 2018
d3f4f7d
Harmonize error message name
Hoverbear Nov 22, 2018
2f3113b
Touchup docs
Hoverbear Nov 22, 2018
4385ea9
Doc refinement and correct candidacy_status bug
Hoverbear Nov 22, 2018
9076171
Add pitfall doc note
Hoverbear Nov 22, 2018
8a31c83
Docs, make progress tests nicer
Hoverbear Nov 22, 2018
827fe30
Documentation refinements
Hoverbear Nov 22, 2018
8379622
Lower asserts to result returns on public Raft functions
Hoverbear Nov 22, 2018
c51e5ce
Further documentation clarity
Hoverbear Nov 22, 2018
617858f
fmt
Hoverbear Nov 22, 2018
7f35bd1
Resolve nits
Hoverbear Nov 29, 2018
c38ef4c
Merge branch 'master' into joint-consensus
Hoverbear Nov 30, 2018
0a5011f
Resolve warning
Hoverbear Nov 30, 2018
60c28cb
Merge branch 'joint-consensus' of github.com:pingcap/raft-rs into joi…
Hoverbear Nov 30, 2018
8964a1c
Resolve minor nits.
Hoverbear Dec 6, 2018
77169b5
Persist began_conf_change_at to hard state
Hoverbear Dec 6, 2018
146d749
Fix power cycle failure
Hoverbear Dec 28, 2018
42a14e1
Use ConfChange instead of Entry.
Hoverbear Jan 3, 2019
2635917
Merge branch 'master' into joint-consensus
Hoverbear Jan 3, 2019
bacf6e3
wip
Hoverbear Jan 4, 2019
0429927
Some refinements, still problems.
Hoverbear Jan 9, 2019
815f7d2
Test is green!
Hoverbear Jan 9, 2019
c26eef4
lints
Hoverbear Jan 11, 2019
e9721e5
Use appropriate name for proto
Hoverbear Jan 11, 2019
8c4ba9d
Add/remove/promote error in progress on pending change.
Hoverbear Jan 11, 2019
bc66fd7
Raft layer insert/remove/promote report errors
Hoverbear Jan 11, 2019
74c77aa
apply_conf_change in rawnode gives errors
Hoverbear Jan 11, 2019
3e7ed81
Contracts -> Errors
Hoverbear Jan 11, 2019
9d9a892
Fix test_raw_node_propose_add_duplicate_node test
Hoverbear Jan 11, 2019
115f72b
fmt
Hoverbear Jan 14, 2019
4d6ee81
lints
Hoverbear Jan 14, 2019
b265184
Merge branch 'master' into joint-consensus
Hoverbear Jan 15, 2019
15f19ab
contains doesn't borrow
Hoverbear Jan 18, 2019
99f47e6
Ensure benches aren't noops
Hoverbear Jan 18, 2019
dfea373
Reflect some of @qupeng's feedback. One test still fails.
Hoverbear Jan 28, 2019
7b84b24
fix a test case about power cycle. (#173)
hicqu Jan 29, 2019
f77da21
Merge branch 'master' into joint-consensus
hicqu Jan 30, 2019
39cb541
Fix nits
Hoverbear Jan 30, 2019
579e107
Merge branch 'master' into joint-consensus
hicqu Jan 30, 2019
cb812de
Merge branch 'master' into joint-consensus
Hoverbear Jan 31, 2019
ff73fe9
Clippy/fmt
Hoverbear Jan 31, 2019
fecdf59
Merge branch 'joint-consensus' of github.com:pingcap/raft-rs into joi…
Hoverbear Jan 31, 2019
356abd7
Documentation touchup
Hoverbear Jan 31, 2019
016e4a7
fmt
Hoverbear Feb 1, 2019
55385dd
simplify snapshot restore. (#176)
hicqu Feb 2, 2019
542655e
Merge branch 'master' into joint-consensus
Hoverbear Feb 11, 2019
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ quick-error = "1.2.2"
rand = "0.5.4"
hashbrown = "0.1"
fail = { version = "0.2", optional = true }
getset = "0.0.6"

[dev-dependencies]
env_logger = "0.5"
Expand Down
2 changes: 1 addition & 1 deletion benches/benches.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#![allow(dead_code)] // Due to criterion we need this to avoid warnings.
#![cfg_attr(feature = "cargo-clippy", allow(let_and_return))] // Benches often artificially return values. Allow it.
#![cfg_attr(feature = "cargo-clippy", allow(clippy::let_and_return))] // Benches often artificially return values. Allow it.

extern crate criterion;
extern crate env_logger;
Expand Down
35 changes: 31 additions & 4 deletions benches/suites/progress_set.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ pub fn bench_progress_set(c: &mut Criterion) {
bench_progress_set_remove(c);
bench_progress_set_iter(c);
bench_progress_set_get(c);
bench_progress_set_nodes(c);
bench_progress_set_voters(c);
bench_progress_set_learners(c);
}

fn quick_progress_set(voters: usize, learners: usize) -> ProgressSet {
Expand Down Expand Up @@ -146,14 +147,40 @@ pub fn bench_progress_set_iter(c: &mut Criterion) {
});
}

pub fn bench_progress_set_nodes(c: &mut Criterion) {
pub fn bench_progress_set_voters(c: &mut Criterion) {
let bench = |voters, learners| {
move |b: &mut Bencher| {
let set = quick_progress_set(voters, learners);
b.iter(|| {
let set = set.clone();
let agg = set.iter().all(|_| true);
agg
let sum = set.voters().fold(0, |mut sum, _| {
sum += 1;
sum
});
sum
});
}
};

DEFAULT_RAFT_SETS.iter().for_each(|(voters, learners)| {
c.bench_function(
&format!("ProgressSet::nodes ({}, {})", voters, learners),
bench(*voters, *learners),
);
});
}

pub fn bench_progress_set_learners(c: &mut Criterion) {
let bench = |voters, learners| {
move |b: &mut Bencher| {
let set = quick_progress_set(voters, learners);
b.iter(|| {
let set = set.clone();
let sum = set.voters().fold(0, |mut sum, _| {
sum += 1;
sum
});
sum
});
}
};
Expand Down
4 changes: 2 additions & 2 deletions benches/suites/raft.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ fn quick_raft(voters: usize, learners: usize) -> Raft<MemStorage> {
let config = Config::new(id);
let mut raft = Raft::new(&config, storage).unwrap();
(0..voters).for_each(|id| {
raft.add_node(id as u64);
raft.add_node(id as u64).unwrap();
});
(voters..learners).for_each(|id| {
raft.add_learner(id as u64);
raft.add_learner(id as u64).unwrap();
});
raft
}
Expand Down
3 changes: 1 addition & 2 deletions benches/suites/raw_node.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ fn quick_raw_node() -> RawNode<MemStorage> {
let peers = vec![];
let storage = MemStorage::default();
let config = Config::new(id);
let node = RawNode::new(&config, storage, peers).unwrap();
node
RawNode::new(&config, storage, peers).unwrap()
}

pub fn bench_raw_node_new(c: &mut Criterion) {
Expand Down
11 changes: 11 additions & 0 deletions proto/eraftpb.proto
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ message Entry {

message SnapshotMetadata {
ConfState conf_state = 1;
ConfState pending_membership_change = 4;
uint64 pending_membership_change_index = 5;
uint64 index = 2;
uint64 term = 3;
}
Expand Down Expand Up @@ -91,11 +93,20 @@ enum ConfChangeType {
AddNode = 0;
RemoveNode = 1;
AddLearnerNode = 2;
BeginMembershipChange = 3;
FinalizeMembershipChange = 4;
}

message ConfChange {
uint64 id = 1;
ConfChangeType change_type = 2;
// Used in `AddNode`, `RemoveNode`, and `AddLearnerNode`.
uint64 node_id = 3;
bytes context = 4;
// Used in `BeginMembershipChange` and `FinalizeMembershipChange`.
ConfState configuration = 5;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you agree my comment about ConfState. Here I think we should add a new struct, for example:

struct MembershipChange {
    repeated uint64 nodes;
    repeated uint64 learner_nodes;
}

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

😆 This is exactly what ConfState was originally.

// Used in `BeginMembershipChange` and `FinalizeMembershipChange`.
// Because `RawNode::apply_conf_change` takes a `ConfChange` instead of an `Entry` we must
// include this index so it can be known.
uint64 start_index = 6;
}
Loading