forked from tikv/raft-rs
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathraft.rs
More file actions
66 lines (60 loc) · 2.09 KB
/
raft.rs
File metadata and controls
66 lines (60 loc) · 2.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
// Copyright 2019 TiKV Project Authors. Licensed under Apache-2.0.
use crate::DEFAULT_RAFT_SETS;
use criterion::Criterion;
use raft::eraftpb::ConfState;
use raft::{storage::MemStorage, Config, Raft};
pub fn bench_raft(c: &mut Criterion) {
bench_raft_new(c);
bench_raft_campaign(c);
}
fn new_storage(voters: usize, learners: usize) -> MemStorage {
let mut cc = ConfState::default();
for i in 1..=voters {
cc.voters.push(i as u64);
}
for i in 1..=learners {
cc.learners.push(voters as u64 + i as u64);
}
MemStorage::new_with_conf_state(cc)
}
fn quick_raft(storage: MemStorage, logger: &slog::Logger) -> Raft<MemStorage> {
let id = 1;
let config = Config::new(id);
Raft::new(&config, storage, logger).unwrap()
}
pub fn bench_raft_new(c: &mut Criterion) {
DEFAULT_RAFT_SETS.iter().for_each(|(voters, learners)| {
c.bench_function(&format!("Raft::new ({voters}, {learners})"), move |b| {
let logger = raft::default_logger();
let storage = new_storage(*voters, *learners);
b.iter(|| quick_raft(storage.clone(), &logger))
});
});
}
pub fn bench_raft_campaign(c: &mut Criterion) {
DEFAULT_RAFT_SETS
.iter()
.skip(1)
.for_each(|(voters, learners)| {
// We don't want to make `raft::raft` public at this point.
let msgs = &[
"CampaignPreElection",
"CampaignElection",
"CampaignTransfer",
];
// Skip the first since it's 0,0
for msg in msgs {
c.bench_function(
&format!("Raft::campaign ({voters}, {learners}, {msg})"),
move |b| {
let logger = raft::default_logger();
let storage = new_storage(*voters, *learners);
b.iter(|| {
let mut raft = quick_raft(storage.clone(), &logger);
raft.campaign(msg.as_bytes());
})
},
);
}
});
}