MCPcopy Create free account
hub / github.com/NodeDB-Lab/nodedb / handle_append_entries

Method handle_append_entries

nodedb-raft/src/node/rpc/append_entries.rs:14–64  ·  view source on GitHub ↗

Handle incoming AppendEntries RPC.

(&mut self, req: &AppendEntriesRequest)

Source from the content-addressed store, hash-verified

12impl<S: LogStorage> RaftNode<S> {
13 /// Handle incoming AppendEntries RPC.
14 pub fn handle_append_entries(&mut self, req: &AppendEntriesRequest) -> AppendEntriesResponse {
15 if req.term < self.hard_state.current_term {
16 return AppendEntriesResponse {
17 term: self.hard_state.current_term,
18 success: false,
19 last_log_index: self.log.last_index(),
20 };
21 }
22
23 if req.term > self.hard_state.current_term || self.role == NodeRole::Candidate {
24 // `become_follower` preserves Learner role — see internal.rs.
25 self.become_follower(req.term);
26 }
27
28 self.leader_id = req.leader_id;
29 self.reset_election_timeout();
30
31 // Check prev_log consistency.
32 if req.prev_log_index > 0 {
33 match self.log.term_at(req.prev_log_index) {
34 Some(term) if term == req.prev_log_term => {}
35 _ => {
36 return AppendEntriesResponse {
37 term: self.hard_state.current_term,
38 success: false,
39 last_log_index: self.log.last_index(),
40 };
41 }
42 }
43 }
44
45 if let Err(e) = self.log.append_entries(req.prev_log_index, &req.entries) {
46 warn!(group = self.config.group_id, error = %e, "append_entries failed");
47 return AppendEntriesResponse {
48 term: self.hard_state.current_term,
49 success: false,
50 last_log_index: self.log.last_index(),
51 };
52 }
53
54 if req.leader_commit > self.volatile.commit_index {
55 self.volatile.commit_index = req.leader_commit.min(self.log.last_index());
56 self.collect_committed_entries();
57 }
58
59 AppendEntriesResponse {
60 term: self.hard_state.current_term,
61 success: true,
62 last_log_index: self.log.last_index(),
63 }
64 }
65
66 /// Handle AppendEntries response from a peer (leader only).
67 ///

Calls 6

last_indexMethod · 0.80
become_followerMethod · 0.80
term_atMethod · 0.80
append_entriesMethod · 0.45