@@ -750,20 +750,24 @@ TEST_F(RaftReplDevTest, ReconcileLeader) {
750750 this ->validate_data ();
751751 g_helper->sync_for_cleanup_start ();
752752
753- LOGINFO (" Restart leader" );
754- if (g_helper->replica_num () == 0 ) { g_helper->restart_homestore (); }
753+ LOGINFO (" Yield leader" );
754+ auto expected_leader_num = 1 ;
755+ auto expected_leader = g_helper->replica_id (expected_leader_num);
756+ if (g_helper->replica_num () == 0 ) { this ->yield_leadership (dbs_[0 ], false , expected_leader); }
755757 g_helper->sync_for_verify_start ();
756758 LOGINFO (" Validate leader switched" );
757759 std::this_thread::sleep_for (std::chrono::milliseconds{500 });
758760 auto leader = this ->wait_and_get_leader_id ();
759- auto leader_replica_num = 0 ;
760- if (g_helper->replica_num () == 0 ) {
761- ASSERT_NE (leader, g_helper->my_replica_id ());
762- LOGINFO (" Leader has changed" );
763- } else if (g_helper->my_replica_id () == leader) {
764- leader_replica_num = g_helper->replica_num ();
765- LOGINFO (" New leader is replica={}, replica_num={}" , leader, leader_replica_num);
766- }
761+ ASSERT_EQ (leader, expected_leader);
762+
763+ g_helper->sync_for_test_start ();
764+ LOGINFO (" Trigger reconcile leader on follower, expected no change" )
765+ if (g_helper->replica_num () == 2 ) { this ->reconcile_leader (dbs_[0 ]); }
766+ g_helper->sync_for_verify_start ();
767+ LOGINFO (" Validate leader unchanged" );
768+ std::this_thread::sleep_for (std::chrono::milliseconds{500 });
769+ leader = this ->wait_and_get_leader_id ();
770+ ASSERT_EQ (leader, expected_leader);
767771
768772 g_helper->sync_for_test_start ();
769773 if (g_helper->replica_num () == 0 ) {
@@ -777,19 +781,13 @@ TEST_F(RaftReplDevTest, ReconcileLeader) {
777781 if (g_helper->replica_num () == 0 ) { ASSERT_EQ (leader, g_helper->my_replica_id ()); }
778782 g_helper->sync_for_cleanup_start ();
779783
780- LOGINFO (" Restart leader again" );
781- if (g_helper->replica_num () == 0 ) { g_helper-> restart_homestore ( ); }
784+ LOGINFO (" Yield leader again" );
785+ if (g_helper->replica_num () == 0 ) { this -> yield_leadership (dbs_[ 0 ], false , expected_leader ); }
782786 g_helper->sync_for_verify_start ();
783787 LOGINFO (" Validate leader switched" );
784788 std::this_thread::sleep_for (std::chrono::milliseconds{500 });
785789 leader = this ->wait_and_get_leader_id ();
786- if (g_helper->replica_num () == 0 ) {
787- ASSERT_NE (leader, g_helper->my_replica_id ());
788- LOGINFO (" Leader has changed again" );
789- } else if (g_helper->my_replica_id () == leader) {
790- leader_replica_num = g_helper->replica_num ();
791- LOGINFO (" New leader is replica={}, replica_num={}" , leader, leader_replica_num);
792- }
790+ ASSERT_EQ (leader, expected_leader);
793791 g_helper->sync_for_test_start ();
794792
795793 if (g_helper->my_replica_id () == leader) {
@@ -800,11 +798,7 @@ TEST_F(RaftReplDevTest, ReconcileLeader) {
800798 std::this_thread::sleep_for (std::chrono::milliseconds{1000 });
801799 leader = this ->wait_and_get_leader_id ();
802800 LOGINFO (" Validate leader switched back to initial replica, leader={}" , leader);
803- if (g_helper->replica_num () == 0 && leader != g_helper->my_replica_id ()) {
804- // yield leadership cannot garantee replica 0 will be leader again
805- // so we just log a warning here if it is not
806- LOGWARN (" Leader is not replica 0 after yielding, leader={}" , leader);
807- }
801+ if (g_helper->replica_num () == 0 ) { ASSERT_EQ (leader, g_helper->my_replica_id ()); }
808802 g_helper->sync_for_cleanup_start ();
809803}
810804
0 commit comments