Skip to content

Commit c1dbe87

Browse files
committed
wip
1 parent 6d65c3f commit c1dbe87

File tree

7 files changed

+207
-806
lines changed

7 files changed

+207
-806
lines changed

Diff for: src/raft/message.rs

-5
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,6 @@ pub enum Event {
5454
},
5555
/// Followers confirm loyalty to leader after heartbeats.
5656
ConfirmLeader {
57-
/// The commit_index of the original leader heartbeat, to confirm
58-
/// read requests.
59-
///
60-
/// TODO: remove this when migrated to read_seq.
61-
commit_index: Index,
6257
/// If false, the follower does not have the entry at commit_index
6358
/// and would like the leader to replicate it.
6459
has_committed: bool,

Diff for: src/raft/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,4 @@ pub use self::log::{Entry, Index, Log};
88
pub use message::{Address, Event, Message, ReadSequence, Request, RequestID, Response};
99
pub use node::{Node, NodeID, Status, Term};
1010
pub use server::Server;
11-
pub use state::{Driver, Instruction, State};
11+
pub use state::State;

Diff for: src/raft/node/candidate.rs

+15-24
Original file line numberDiff line numberDiff line change
@@ -168,21 +168,19 @@ impl RawNode<Candidate> {
168168

169169
#[cfg(test)]
170170
mod tests {
171-
use super::super::super::{Entry, Instruction, Log, Request};
171+
use super::super::super::state::tests::TestState;
172+
use super::super::super::{Entry, Log, Request};
172173
use super::super::tests::{assert_messages, assert_node};
173174
use super::*;
174175
use crate::storage;
175176
use tokio::sync::mpsc;
176177

177178
#[allow(clippy::type_complexity)]
178-
fn setup() -> Result<(
179-
RawNode<Candidate>,
180-
mpsc::UnboundedReceiver<Message>,
181-
mpsc::UnboundedReceiver<Instruction>,
182-
)> {
179+
fn setup() -> Result<(RawNode<Candidate>, mpsc::UnboundedReceiver<Message>)> {
183180
let (node_tx, node_rx) = mpsc::unbounded_channel();
184-
let (state_tx, state_rx) = mpsc::unbounded_channel();
181+
let state = Box::new(TestState::new(0));
185182
let mut log = Log::new(storage::engine::Memory::new(), false)?;
183+
186184
log.append(1, Some(vec![0x01]))?;
187185
log.append(1, Some(vec![0x02]))?;
188186
log.append(2, Some(vec![0x03]))?;
@@ -194,18 +192,18 @@ mod tests {
194192
peers: HashSet::from([2, 3, 4, 5]),
195193
term: 3,
196194
log,
195+
state,
197196
node_tx,
198-
state_tx,
199197
role: Candidate::new(),
200198
};
201199
node.role.votes.insert(1);
202-
Ok((node, node_rx, state_rx))
200+
Ok((node, node_rx))
203201
}
204202

205203
#[test]
206204
// Heartbeat for current term converts to follower and emits ConfirmLeader.
207205
fn step_heartbeat_current_term() -> Result<()> {
208-
let (candidate, mut node_rx, mut state_rx) = setup()?;
206+
let (candidate, mut node_rx) = setup()?;
209207
let mut node = candidate.step(Message {
210208
from: Address::Node(2),
211209
to: Address::Node(1),
@@ -219,18 +217,17 @@ mod tests {
219217
from: Address::Node(1),
220218
to: Address::Node(2),
221219
term: 3,
222-
event: Event::ConfirmLeader { commit_index: 2, has_committed: true, read_seq: 7 },
220+
event: Event::ConfirmLeader { has_committed: true, read_seq: 7 },
223221
}],
224222
);
225-
assert_messages(&mut state_rx, vec![]);
226223
Ok(())
227224
}
228225

229226
#[test]
230227
// Heartbeat for future term converts to follower and emits ConfirmLeader
231228
// event.
232229
fn step_heartbeat_future_term() -> Result<()> {
233-
let (candidate, mut node_rx, mut state_rx) = setup()?;
230+
let (candidate, mut node_rx) = setup()?;
234231
let mut node = candidate.step(Message {
235232
from: Address::Node(2),
236233
to: Address::Node(1),
@@ -244,17 +241,16 @@ mod tests {
244241
from: Address::Node(1),
245242
to: Address::Node(2),
246243
term: 4,
247-
event: Event::ConfirmLeader { commit_index: 2, has_committed: true, read_seq: 7 },
244+
event: Event::ConfirmLeader { has_committed: true, read_seq: 7 },
248245
}],
249246
);
250-
assert_messages(&mut state_rx, vec![]);
251247
Ok(())
252248
}
253249

254250
#[test]
255251
// Heartbeat for past term is ignored
256252
fn step_heartbeat_past_term() -> Result<()> {
257-
let (candidate, mut node_rx, mut state_rx) = setup()?;
253+
let (candidate, mut node_rx) = setup()?;
258254
let mut node = candidate.step(Message {
259255
from: Address::Node(2),
260256
to: Address::Node(1),
@@ -263,13 +259,12 @@ mod tests {
263259
})?;
264260
assert_node(&mut node).is_candidate().term(3);
265261
assert_messages(&mut node_rx, vec![]);
266-
assert_messages(&mut state_rx, vec![]);
267262
Ok(())
268263
}
269264

270265
#[test]
271266
fn step_grantvote() -> Result<()> {
272-
let (candidate, mut node_rx, mut state_rx) = setup()?;
267+
let (candidate, mut node_rx) = setup()?;
273268
let peers = candidate.peers.clone();
274269
let mut node = Node::Candidate(candidate);
275270

@@ -282,7 +277,6 @@ mod tests {
282277
})?;
283278
assert_node(&mut node).is_candidate().term(3);
284279
assert_messages(&mut node_rx, vec![]);
285-
assert_messages(&mut state_rx, vec![]);
286280

287281
// However, the second external vote makes us leader
288282
node = node.step(Message {
@@ -320,14 +314,13 @@ mod tests {
320314
}
321315

322316
assert_messages(&mut node_rx, vec![]);
323-
assert_messages(&mut state_rx, vec![]);
324317
Ok(())
325318
}
326319

327320
#[test]
328321
// ClientRequest returns Error::Abort.
329322
fn step_clientrequest() -> Result<()> {
330-
let (candidate, mut node_rx, mut state_rx) = setup()?;
323+
let (candidate, mut node_rx) = setup()?;
331324
let mut node = Node::Candidate(candidate);
332325

333326
node = node.step(Message {
@@ -346,13 +339,12 @@ mod tests {
346339
event: Event::ClientResponse { id: vec![0x01], response: Err(Error::Abort) },
347340
}],
348341
);
349-
assert_messages(&mut state_rx, vec![]);
350342
Ok(())
351343
}
352344

353345
#[test]
354346
fn tick() -> Result<()> {
355-
let (candidate, mut node_rx, mut state_rx) = setup()?;
347+
let (candidate, mut node_rx) = setup()?;
356348
let timeout = candidate.role.election_timeout;
357349
let mut node = Node::Candidate(candidate);
358350

@@ -372,7 +364,6 @@ mod tests {
372364
event: Event::SolicitVote { last_index: 3, last_term: 2 },
373365
}],
374366
);
375-
assert_messages(&mut state_rx, vec![]);
376367
Ok(())
377368
}
378369
}

0 commit comments

Comments
 (0)