@@ -4860,11 +4860,7 @@ fn test_follower_request_snapshot() {
48604860 let prev_snapshot_idx = s. get_metadata ( ) . index ;
48614861 let request_idx = nt. peers [ & 1 ] . raft_log . committed ;
48624862 assert ! ( prev_snapshot_idx < request_idx) ;
4863- nt. peers
4864- . get_mut ( & 2 )
4865- . unwrap ( )
4866- . request_snapshot ( request_idx)
4867- . unwrap ( ) ;
4863+ nt. peers . get_mut ( & 2 ) . unwrap ( ) . request_snapshot ( ) . unwrap ( ) ;
48684864
48694865 // Send the request snapshot message.
48704866 let req_snap = nt. peers . get_mut ( & 2 ) . unwrap ( ) . msgs . pop ( ) . unwrap ( ) ;
@@ -4909,11 +4905,7 @@ fn test_request_snapshot_unavailable() {
49094905 let prev_snapshot_idx = s. get_metadata ( ) . index ;
49104906 let request_idx = nt. peers [ & 1 ] . raft_log . committed ;
49114907 assert ! ( prev_snapshot_idx < request_idx) ;
4912- nt. peers
4913- . get_mut ( & 2 )
4914- . unwrap ( )
4915- . request_snapshot ( request_idx)
4916- . unwrap ( ) ;
4908+ nt. peers . get_mut ( & 2 ) . unwrap ( ) . request_snapshot ( ) . unwrap ( ) ;
49174909
49184910 // Send the request snapshot message.
49194911 let req_snap = nt. peers . get_mut ( & 2 ) . unwrap ( ) . msgs . pop ( ) . unwrap ( ) ;
@@ -4966,12 +4958,7 @@ fn test_request_snapshot_matched_change() {
49664958 nt. peers . get_mut ( & 2 ) . unwrap ( ) . raft_log . committed -= 1 ;
49674959
49684960 // Request the latest snapshot.
4969- let request_idx = nt. peers [ & 2 ] . raft_log . committed ;
4970- nt. peers
4971- . get_mut ( & 2 )
4972- . unwrap ( )
4973- . request_snapshot ( request_idx)
4974- . unwrap ( ) ;
4961+ nt. peers . get_mut ( & 2 ) . unwrap ( ) . request_snapshot ( ) . unwrap ( ) ;
49754962 let req_snap = nt. peers . get_mut ( & 2 ) . unwrap ( ) . msgs . pop ( ) . unwrap ( ) ;
49764963 // The request snapshot is ignored because it is considered as out of order.
49774964 nt. peers . get_mut ( & 1 ) . unwrap ( ) . step ( req_snap) . unwrap ( ) ;
@@ -5015,12 +5002,7 @@ fn test_request_snapshot_none_replicate() {
50155002 . state = ProgressState :: Probe ;
50165003
50175004 // Request the latest snapshot.
5018- let request_idx = nt. peers [ & 2 ] . raft_log . committed ;
5019- nt. peers
5020- . get_mut ( & 2 )
5021- . unwrap ( )
5022- . request_snapshot ( request_idx)
5023- . unwrap ( ) ;
5005+ nt. peers . get_mut ( & 2 ) . unwrap ( ) . request_snapshot ( ) . unwrap ( ) ;
50245006 let req_snap = nt. peers . get_mut ( & 2 ) . unwrap ( ) . msgs . pop ( ) . unwrap ( ) ;
50255007 nt. peers . get_mut ( & 1 ) . unwrap ( ) . step ( req_snap) . unwrap ( ) ;
50265008 assert ! ( nt. peers[ & 1 ] . prs( ) . get( 2 ) . unwrap( ) . pending_request_snapshot != 0 ) ;
@@ -5042,12 +5024,7 @@ fn test_request_snapshot_step_down() {
50425024
50435025 // Recover and request the latest snapshot.
50445026 nt. recover ( ) ;
5045- let request_idx = nt. peers [ & 2 ] . raft_log . committed ;
5046- nt. peers
5047- . get_mut ( & 2 )
5048- . unwrap ( )
5049- . request_snapshot ( request_idx)
5050- . unwrap ( ) ;
5027+ nt. peers . get_mut ( & 2 ) . unwrap ( ) . request_snapshot ( ) . unwrap ( ) ;
50515028 nt. send ( vec ! [ new_message( 3 , 3 , MessageType :: MsgBeat , 0 ) ] ) ;
50525029 assert ! (
50535030 nt. peers[ & 2 ] . pending_request_snapshot == INVALID_INDEX ,
@@ -5061,12 +5038,7 @@ fn test_request_snapshot_step_down() {
50615038fn test_request_snapshot_on_role_change ( ) {
50625039 let ( mut nt, _) = prepare_request_snapshot ( ) ;
50635040
5064- let request_idx = nt. peers [ & 2 ] . raft_log . committed ;
5065- nt. peers
5066- . get_mut ( & 2 )
5067- . unwrap ( )
5068- . request_snapshot ( request_idx)
5069- . unwrap ( ) ;
5041+ nt. peers . get_mut ( & 2 ) . unwrap ( ) . request_snapshot ( ) . unwrap ( ) ;
50705042
50715043 // Becoming follower does not reset pending_request_snapshot.
50725044 let ( term, id) = ( nt. peers [ & 1 ] . term , nt. peers [ & 1 ] . id ) ;
@@ -5086,6 +5058,28 @@ fn test_request_snapshot_on_role_change() {
50865058 ) ;
50875059}
50885060
5061+ // Abort request snapshot if term change.
5062+ #[ test]
5063+ fn test_request_snapshot_after_term_change ( ) {
5064+ let ( mut nt, _) = prepare_request_snapshot ( ) ;
5065+
5066+ nt. peers . get_mut ( & 2 ) . unwrap ( ) . request_snapshot ( ) . unwrap ( ) ;
5067+
5068+ assert ! (
5069+ nt. peers[ & 2 ] . pending_request_snapshot != INVALID_INDEX ,
5070+ "{}" ,
5071+ nt. peers[ & 2 ] . pending_request_snapshot
5072+ ) ;
5073+
5074+ let term = nt. peers [ & 1 ] . term ;
5075+ nt. peers . get_mut ( & 2 ) . unwrap ( ) . reset ( term + 1 ) ;
5076+ assert ! (
5077+ nt. peers[ & 2 ] . pending_request_snapshot == INVALID_INDEX ,
5078+ "{}" ,
5079+ nt. peers[ & 2 ] . pending_request_snapshot
5080+ ) ;
5081+ }
5082+
50895083/// Tests group commit.
50905084///
50915085/// 1. Logs should be replicated to at least different groups before committed;
0 commit comments