@@ -20,7 +20,7 @@ impl<D: AppData, R: AppDataResponse, N: RaftNetwork<D>, S: RaftStorage<D, R>> Ra
20
20
/// See `receiver implementation: AppendEntries RPC` in raft-essentials.md in this repo.
21
21
#[ tracing:: instrument(
22
22
level="trace" , skip( self , msg) ,
23
- fields( term=msg. term, leader_id=msg. leader_id, prev_log_index=msg. prev_log_index , prev_log_term=msg. prev_log_term , leader_commit=msg. leader_commit) ,
23
+ fields( term=msg. term, leader_id=msg. leader_id, prev_log_index=msg. prev_log . index , prev_log_term=msg. prev_log . term , leader_commit=msg. leader_commit) ,
24
24
) ]
25
25
pub ( super ) async fn handle_append_entries_request (
26
26
& mut self ,
@@ -61,9 +61,9 @@ impl<D: AppData, R: AppDataResponse, N: RaftNetwork<D>, S: RaftStorage<D, R>> Ra
61
61
62
62
// If RPC's `prev_log_index` is 0, or the RPC's previous log info matches the local
63
63
// log info, then replication is g2g.
64
- let msg_prev_index_is_min = msg. prev_log_index == u64:: min_value ( ) ;
64
+ let msg_prev_index_is_min = msg. prev_log . index == u64:: min_value ( ) ;
65
65
let msg_index_and_term_match =
66
- ( msg. prev_log_index == self . last_log . index ) && ( msg. prev_log_term == self . last_log . term ) ;
66
+ ( msg. prev_log . index == self . last_log . index ) && ( msg. prev_log . term == self . last_log . term ) ;
67
67
if msg_prev_index_is_min || msg_index_and_term_match {
68
68
self . append_log_entries ( & msg. entries ) . await ?;
69
69
self . replicate_to_state_machine_if_needed ( msg. entries ) . await ;
@@ -85,7 +85,7 @@ impl<D: AppData, R: AppDataResponse, N: RaftNetwork<D>, S: RaftStorage<D, R>> Ra
85
85
// result.
86
86
let entries = self
87
87
. storage
88
- . get_log_entries ( msg. prev_log_index , msg. prev_log_index + 1 )
88
+ . get_log_entries ( msg. prev_log . index , msg. prev_log . index + 1 )
89
89
. await
90
90
. map_err ( |err| self . map_fatal_storage_error ( err) ) ?;
91
91
let target_entry = match entries. first ( ) {
@@ -108,7 +108,7 @@ impl<D: AppData, R: AppDataResponse, N: RaftNetwork<D>, S: RaftStorage<D, R>> Ra
108
108
} ;
109
109
110
110
// The target entry was found. Compare its term with target term to ensure everything is consistent.
111
- if target_entry. term == msg. prev_log_term {
111
+ if target_entry. term == msg. prev_log . term {
112
112
// We've found a point of agreement with the leader. If we have any logs present
113
113
// with an index greater than this, then we must delete them per §5.3.
114
114
if self . last_log . index > target_entry. index {
@@ -124,17 +124,17 @@ impl<D: AppData, R: AppDataResponse, N: RaftNetwork<D>, S: RaftStorage<D, R>> Ra
124
124
// The target entry does not have the same term. Fetch the last 50 logs, and use the last
125
125
// entry of that payload which is still in the target term for conflict optimization.
126
126
else {
127
- let start = if msg. prev_log_index >= 50 {
128
- msg. prev_log_index - 50
127
+ let start = if msg. prev_log . index >= 50 {
128
+ msg. prev_log . index - 50
129
129
} else {
130
130
0
131
131
} ;
132
132
let old_entries = self
133
133
. storage
134
- . get_log_entries ( start, msg. prev_log_index )
134
+ . get_log_entries ( start, msg. prev_log . index )
135
135
. await
136
136
. map_err ( |err| self . map_fatal_storage_error ( err) ) ?;
137
- let opt = match old_entries. iter ( ) . find ( |entry| entry. term == msg. prev_log_term ) {
137
+ let opt = match old_entries. iter ( ) . find ( |entry| entry. term == msg. prev_log . term ) {
138
138
Some ( entry) => Some ( ConflictOpt {
139
139
term : entry. term ,
140
140
index : entry. index ,
0 commit comments