[Arb] the number of members in initial_member_list can be odd number
This commit is contained in:
		@ -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 ||
 | 
			
		||||
 | 
			
		||||
@ -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));
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user