[CP] [opt] avoid latency jitter of log replication when locking or unlock memberlist

This commit is contained in:
BinChenn
2024-02-10 05:08:24 +00:00
committed by ob-robot
parent 9ddcc1572c
commit 9a75df1e1a
13 changed files with 226 additions and 47 deletions

View File

@ -1371,19 +1371,20 @@ TEST_F(TestLogConfigMgr, test_submit_start_working_log)
EXPECT_EQ(OB_EAGAIN, cm.confirm_start_working_log(INIT_PROPOSAL_ID, INIT_ELE_EPOCH, sw_config_version));
EXPECT_GT(cm.last_submit_config_log_time_us_, 0);
// ack defensive code
EXPECT_EQ(OB_STATE_NOT_MATCH, cm.ack_config_log(addr2, 2, expect_config_version));
EXPECT_EQ(OB_STATE_NOT_MATCH, cm.ack_config_log(addr2, 1, LogConfigVersion()));
bool unused_bool = false;
EXPECT_EQ(OB_STATE_NOT_MATCH, cm.ack_config_log(addr2, 2, expect_config_version, unused_bool));
EXPECT_EQ(OB_STATE_NOT_MATCH, cm.ack_config_log(addr2, 1, LogConfigVersion(), unused_bool));
// receive ack from learner
EXPECT_EQ(OB_SUCCESS, cm.ack_config_log(addr4, 1, expect_config_version));
EXPECT_EQ(OB_SUCCESS, cm.ack_config_log(addr4, 1, expect_config_version, unused_bool));
EXPECT_EQ(0, cm.ms_ack_list_.get_count());
EXPECT_EQ(2, cm.resend_log_list_.get_member_number());
EXPECT_EQ(OB_EAGAIN, cm.confirm_start_working_log(INIT_PROPOSAL_ID, INIT_ELE_EPOCH, sw_config_version));
// receive ack from member
EXPECT_EQ(OB_SUCCESS, cm.ack_config_log(addr1, 1, expect_config_version));
EXPECT_EQ(OB_SUCCESS, cm.ack_config_log(addr1, 1, expect_config_version, unused_bool));
EXPECT_EQ(1, cm.ms_ack_list_.get_count());
EXPECT_EQ(2, cm.resend_log_list_.get_member_number());
EXPECT_EQ(OB_EAGAIN, cm.confirm_start_working_log(INIT_PROPOSAL_ID, INIT_ELE_EPOCH, sw_config_version));
EXPECT_EQ(OB_SUCCESS, cm.ack_config_log(addr2, 1, expect_config_version));
EXPECT_EQ(OB_SUCCESS, cm.ack_config_log(addr2, 1, expect_config_version, unused_bool));
EXPECT_EQ(2, cm.ms_ack_list_.get_count());
EXPECT_EQ(1, cm.resend_log_list_.get_member_number());
// check if config log is committed
@ -1396,7 +1397,7 @@ TEST_F(TestLogConfigMgr, test_submit_start_working_log)
cm.last_submit_config_log_time_us_ = 0;
EXPECT_EQ(OB_SUCCESS, cm.try_resend_config_log_(1));
// receive ack from last member
EXPECT_EQ(OB_SUCCESS, cm.ack_config_log(addr3, 1, expect_config_version));
EXPECT_EQ(OB_SUCCESS, cm.ack_config_log(addr3, 1, expect_config_version, unused_bool));
EXPECT_EQ(0, cm.ms_ack_list_.get_count());
EXPECT_EQ(0, cm.resend_log_list_.get_member_number());
}
@ -1618,13 +1619,14 @@ TEST_F(TestLogConfigMgr, test_degrade_upgrade_scenario)
// member_list will not take effect after append_config_meta_
EXPECT_FALSE(cm.log_ms_meta_.curr_.config_.log_sync_memberlist_.contains(addr2));
// self ack config log
EXPECT_EQ(OB_SUCCESS, cm.ack_config_log(addr1, cm.log_ms_meta_.proposal_id_, cm.log_ms_meta_.curr_.config_.config_version_));
bool unused_bool = false;
EXPECT_EQ(OB_SUCCESS, cm.ack_config_log(addr1, cm.log_ms_meta_.proposal_id_, cm.log_ms_meta_.curr_.config_.config_version_, unused_bool));
// reach majority - 1
EXPECT_EQ(OB_EAGAIN, cm.change_config(args, INIT_PROPOSAL_ID, INIT_ELE_EPOCH, de_config_version));
EXPECT_EQ(1, cm.state_);
EXPECT_FALSE(cm.log_ms_meta_.curr_.config_.log_sync_memberlist_.contains(addr2));
// ack config log
EXPECT_EQ(OB_SUCCESS, cm.ack_config_log(addr3, cm.log_ms_meta_.proposal_id_, cm.log_ms_meta_.curr_.config_.config_version_));
EXPECT_EQ(OB_SUCCESS, cm.ack_config_log(addr3, cm.log_ms_meta_.proposal_id_, cm.log_ms_meta_.curr_.config_.config_version_, unused_bool));
// degrade success, switch to INIT state
EXPECT_EQ(OB_SUCCESS, cm.change_config(args, INIT_PROPOSAL_ID, INIT_ELE_EPOCH, de_config_version));
EXPECT_EQ(0, cm.state_);
@ -1638,13 +1640,13 @@ TEST_F(TestLogConfigMgr, test_degrade_upgrade_scenario)
// member_list will not take effect after append_config_meta_
EXPECT_TRUE(cm.log_ms_meta_.curr_.config_.log_sync_memberlist_.contains(addr2));
// self ack config log
EXPECT_EQ(OB_SUCCESS, cm.ack_config_log(addr1, cm.log_ms_meta_.proposal_id_, cm.log_ms_meta_.curr_.config_.config_version_));
EXPECT_EQ(OB_SUCCESS, cm.ack_config_log(addr1, cm.log_ms_meta_.proposal_id_, cm.log_ms_meta_.curr_.config_.config_version_, unused_bool));
// reach majority - 1
EXPECT_EQ(OB_EAGAIN, cm.change_config(up_args, INIT_PROPOSAL_ID, INIT_ELE_EPOCH, up_config_version));
EXPECT_TRUE(cm.log_ms_meta_.curr_.config_.log_sync_memberlist_.contains(addr2));
EXPECT_EQ(1, cm.state_);
// ack config log
EXPECT_EQ(OB_SUCCESS, cm.ack_config_log(addr3, cm.log_ms_meta_.proposal_id_, cm.log_ms_meta_.curr_.config_.config_version_));
EXPECT_EQ(OB_SUCCESS, cm.ack_config_log(addr3, cm.log_ms_meta_.proposal_id_, cm.log_ms_meta_.curr_.config_.config_version_, unused_bool));
// degrade success, switch to INIT state
EXPECT_EQ(OB_SUCCESS, cm.change_config(args, INIT_PROPOSAL_ID, INIT_ELE_EPOCH, up_config_version));
EXPECT_EQ(0, cm.state_);