diff --git a/src/logservice/palf/log_config_mgr.cpp b/src/logservice/palf/log_config_mgr.cpp index 1f4919b11a..5a88450d2f 100644 --- a/src/logservice/palf/log_config_mgr.cpp +++ b/src/logservice/palf/log_config_mgr.cpp @@ -239,7 +239,7 @@ int LogConfigMgr::set_initial_member_list(const common::ObMemberList &member_lis PALF_LOG(WARN, "LogConfigMgr not init", KR(ret)); } else if (!member_list.is_valid() || !arb_member.is_valid() || - (member_list.get_member_number() & 1) != 0 || + (replica_num & 1) != 0 || replica_num <= 0 || replica_num > OB_MAX_MEMBER_NUMBER || INVALID_PROPOSAL_ID == proposal_id || diff --git a/unittest/logservice/test_log_config_mgr.cpp b/unittest/logservice/test_log_config_mgr.cpp index cb763db171..9c7c1f1584 100644 --- a/unittest/logservice/test_log_config_mgr.cpp +++ b/unittest/logservice/test_log_config_mgr.cpp @@ -128,21 +128,24 @@ TEST_F(TestLogConfigMgr, test_set_initial_member_list) LogConfigVersion config_version; init_test_log_config_env(addr1, default_config_info, cm); // arb_member is self - EXPECT_EQ(OB_NOT_SUPPORTED, cm.set_initial_member_list(init_member_list, ObMember(addr1, 0), 3, learner_list, 1, config_version)); + EXPECT_EQ(OB_NOT_SUPPORTED, cm.set_initial_member_list(init_member_list, ObMember(addr1, 0), 2, learner_list, 1, config_version)); // arb_member overlaps with member_list - EXPECT_EQ(OB_INVALID_ARGUMENT, cm.set_initial_member_list(init_member_list, ObMember(addr2, 0), 3, learner_list, 1, config_version)); - + EXPECT_EQ(OB_INVALID_ARGUMENT, cm.set_initial_member_list(init_member_list, ObMember(addr2, 0), 2, learner_list, 1, config_version)); + // invalid replica_num + EXPECT_EQ(OB_INVALID_ARGUMENT, cm.set_initial_member_list(init_member_list, ObMember(addr3, 0), 3, learner_list, 1, config_version)); // arb_member overlaps with learners learner_list.add_learner(ObMember(addr4, 0)); - EXPECT_EQ(OB_INVALID_ARGUMENT, cm.set_initial_member_list(init_member_list, ObMember(addr4, 0), 3, learner_list, 1, config_version)); + EXPECT_EQ(OB_INVALID_ARGUMENT, cm.set_initial_member_list(init_member_list, ObMember(addr4, 0), 2, learner_list, 1, config_version)); + // do not reach majority + EXPECT_EQ(OB_INVALID_ARGUMENT, cm.set_initial_member_list(init_member_list, ObMember(addr5, 0), 4, learner_list, 1, config_version)); // learners overlap with member_list init_member_list.add_server(addr4); - EXPECT_EQ(OB_INVALID_ARGUMENT, cm.set_initial_member_list(init_member_list, ObMember(addr5, 0), 3, learner_list, 1, config_version)); + EXPECT_EQ(OB_INVALID_ARGUMENT, cm.set_initial_member_list(init_member_list, ObMember(addr5, 0), 4, learner_list, 1, config_version)); init_member_list.add_server(addr3); learner_list.reset(); // do not reach majority - EXPECT_EQ(OB_INVALID_ARGUMENT, cm.set_initial_member_list(init_member_list, ObMember(addr5, 0), 3, learner_list, 1, config_version)); + EXPECT_EQ(OB_INVALID_ARGUMENT, cm.set_initial_member_list(init_member_list, ObMember(addr5, 0), 2, learner_list, 1, config_version)); EXPECT_EQ(OB_SUCCESS, cm.set_initial_member_list(init_member_list, ObMember(addr5, 0), 4, learner_list, 1, config_version)); } }