[PALF] fix the leader is revoked when the PALF group is been degraded

This commit is contained in:
BinChenn
2023-03-21 16:56:50 +00:00
committed by ob-robot
parent a1c3c9cf20
commit 1ec233bb5d
3 changed files with 31 additions and 12 deletions

View File

@ -139,6 +139,27 @@ TEST_F(TestObSimpleLogClusterArbService, test_2f1a_degrade_upgrade)
palf_list[another_f_idx]->palf_handle_impl_->enable_vote();
EXPECT_TRUE(is_upgraded(leader, id));
// test revoking the leader when arb service is degrading
block_all_net(another_f_idx);
const common::ObAddr follower_addr = get_cluster()[another_f_idx]->get_addr();
LogConfigChangeArgs args(common::ObMember(follower_addr, 1), 0, DEGRADE_ACCEPTOR_TO_LEARNER);
int64_t ele_epoch;
common::ObRole ele_role;
int64_t proposal_id = leader.palf_handle_impl_->state_mgr_.get_proposal_id();
leader.palf_handle_impl_->election_.get_role(ele_role, ele_epoch);
LogConfigVersion config_version;
EXPECT_EQ(OB_EAGAIN, leader.palf_handle_impl_->config_mgr_.change_config_(args, proposal_id, ele_epoch, config_version));
EXPECT_FALSE(leader.palf_handle_impl_->config_mgr_.alive_paxos_memberlist_.contains(follower_addr));
EXPECT_TRUE(leader.palf_handle_impl_->config_mgr_.applied_alive_paxos_memberlist_.contains(follower_addr));
EXPECT_EQ(leader.palf_handle_impl_->config_mgr_.state_, 1);
// reset status supposing the lease is expried
block_net(leader_idx, another_f_idx);
leader.palf_handle_impl_->config_mgr_.reset_status();
EXPECT_TRUE(is_degraded(leader, another_f_idx));
unblock_net(leader_idx, another_f_idx);
unblock_all_net(another_f_idx);
revert_cluster_palf_handle_guard(palf_list);
leader.reset();
delete_paxos_group(id);
@ -177,8 +198,6 @@ TEST_F(TestObSimpleLogClusterArbService, test_4f1a_degrade_upgrade)
EXPECT_TRUE(is_degraded(leader, another_f1_idx));
EXPECT_TRUE(is_degraded(leader, another_f2_idx));
// 确保lease过期,验证loc_cb是否可以找到leader拉日志
sleep(5);
unblock_all_net(another_f1_idx);
unblock_all_net(another_f2_idx);
loc_cb.leader_ = leader.palf_handle_impl_->self_;
@ -225,7 +244,6 @@ TEST_F(TestObSimpleLogClusterArbService, test_2f1a_reconfirm_degrade_upgrade)
int64_t new_leader_idx = -1;
PalfHandleImplGuard new_leader;
EXPECT_EQ(OB_SUCCESS, get_leader(id, new_leader, new_leader_idx));
sleep(5);
loc_cb.leader_ = new_leader.palf_handle_impl_->self_;
unblock_net(leader_idx, another_f_idx);
unblock_net(leader_idx, arb_replica_idx);
@ -283,7 +301,6 @@ TEST_F(TestObSimpleLogClusterArbService, test_4f1a_reconfirm_degrade_upgrade)
EXPECT_TRUE(is_degraded(new_leader, another_f1_idx));
EXPECT_TRUE(is_degraded(new_leader, leader_idx));
sleep(5);
loc_cb.leader_ = new_leader.palf_handle_impl_->self_;
// restart two servers
unblock_all_net(leader_idx);