@@ -363,6 +363,10 @@ impl<T: TWriteAheadLog> ClusterActor<T> {
363
363
364
364
#[ instrument( level = tracing:: Level :: DEBUG , skip( self ) ) ]
365
365
pub ( crate ) async fn send_rpc ( & mut self ) {
366
+ if !self . replication . is_leader ( ) {
367
+ return ;
368
+ }
369
+
366
370
if self . replicas ( ) . count ( ) == 0 {
367
371
return ;
368
372
}
@@ -409,6 +413,9 @@ impl<T: TWriteAheadLog> ClusterActor<T> {
409
413
from : & PeerIdentifier ,
410
414
repl_res : ReplicationAck ,
411
415
) {
416
+ if !self . replication . is_leader ( ) {
417
+ return ;
418
+ }
412
419
let Some ( peer) = self . members . get_mut ( from) else {
413
420
return ;
414
421
} ;
@@ -426,6 +433,9 @@ impl<T: TWriteAheadLog> ClusterActor<T> {
426
433
427
434
#[ instrument( level = tracing:: Level :: DEBUG , skip( self , heartbeat) , fields( peer_id = %heartbeat. from) ) ]
428
435
pub ( crate ) async fn append_entries_rpc ( & mut self , heartbeat : HeartBeat ) {
436
+ if self . replication . is_leader ( ) {
437
+ return ;
438
+ }
429
439
if self . check_term_outdated ( & heartbeat) . await {
430
440
err ! ( "Term Outdated received:{} self:{}" , heartbeat. term, self . replication. term) ;
431
441
return ;
@@ -875,7 +885,8 @@ impl<T: TWriteAheadLog> ClusterActor<T> {
875
885
}
876
886
877
887
async fn replicate ( & mut self , mut heartbeat : HeartBeat ) {
878
- if self . replication . is_leader ( ) {
888
+ if heartbeat. leader_commit_idx . is_none ( ) {
889
+ err ! ( "It must have leader commit index!" ) ;
879
890
return ;
880
891
}
881
892
@@ -951,15 +962,17 @@ impl<T: TWriteAheadLog> ClusterActor<T> {
951
962
// ! Term mismatch -> triggers log truncation
952
963
err ! ( "Term mismatch: {} != {}" , prev_entry. term, prev_log_term) ;
953
964
self . replication . logger . truncate_after ( prev_log_index) ;
954
-
955
- return Err ( RejectionReason :: LogInconsistency ) ;
956
965
}
957
966
958
967
Ok ( ( ) )
959
968
}
960
969
961
970
#[ instrument( level = tracing:: Level :: INFO , skip( self ) ) ]
962
971
pub ( crate ) async fn run_for_election ( & mut self ) {
972
+ if self . replication . is_leader ( ) {
973
+ return ;
974
+ }
975
+
963
976
self . become_candidate ( ) ;
964
977
let request_vote = RequestVote :: new ( self . replication . info ( ) , & self . replication . logger ) ;
965
978
0 commit comments