diff --git a/src/raft/node.rs b/src/raft/node.rs index 879a5f9b1..5fbae7f9a 100644 --- a/src/raft/node.rs +++ b/src/raft/node.rs @@ -320,6 +320,7 @@ impl RawNode { // We do this prior to the heartbeat, to avoid a wasted replication // roundtrip if the heartbeat response indicates the peer is behind. node.propose(None)?; + node.maybe_commit_and_apply()?; node.heartbeat()?; Ok(node) @@ -1505,6 +1506,8 @@ mod tests { }; self.nodes.insert(id, Node::new(id, peers, log, state, node_tx, opts)?); + while applied_rx.try_recv().is_ok() {} // drain first apply + self.nodes_rx.insert(id, node_rx); self.nodes_pending.insert(id, Vec::new()); self.applied_rx.insert(id, applied_rx); diff --git a/src/raft/testscripts/node/request_leader_single b/src/raft/testscripts/node/request_leader_single index adba66822..2888c1d53 100644 --- a/src/raft/testscripts/node/request_leader_single +++ b/src/raft/testscripts/node/request_leader_single @@ -2,7 +2,7 @@ cluster nodes=1 --- -n1@1 leader last=1@1 commit=0@0 apply=0 progress={} +n1@1 leader last=1@1 commit=1@1 apply=1 progress={} # An initial get on the leader yields None. get 1 foo @@ -19,7 +19,6 @@ stabilize heartbeat=true c1@1 → n1 ClientRequest id=0x02 write 0x0103666f6f03626172 n1@1 append 2@1 put foo=bar n1@1 commit 2@1 -n1@1 apply 1@1 None n1@1 apply 2@1 put foo=bar n1@1 → c1 ClientResponse id=0x02 write 0x0102 c1@1 put foo=bar ⇒ 2 diff --git a/src/raft/testscripts/node/request_status_single b/src/raft/testscripts/node/request_status_single index 414933ebd..fea85ce69 100644 --- a/src/raft/testscripts/node/request_status_single +++ b/src/raft/testscripts/node/request_status_single @@ -2,7 +2,7 @@ cluster nodes=1 --- -n1@1 leader last=1@1 commit=0@0 apply=0 progress={} +n1@1 leader last=1@1 commit=1@1 apply=1 progress={} # Perform a write. (put 1 foo=bar)