fix get_ls_init_member_list

This commit is contained in:
maosy 2023-05-10 05:24:47 +00:00 committed by ob-robot
parent 5eef4de86d
commit ce48d4640d
2 changed files with 41 additions and 2 deletions

View File

@ -72,7 +72,7 @@ TEST_F(TestLSStatusOperator, SQLProxy)
ret = inner_proxy.read(res, sql.ptr());
ASSERT_EQ(OB_SUCCESS, ret);
ret = inner_proxy.read(res, cluster_id, OB_SYS_TENANT_ID, sql.ptr());
ASSERT_EQ(OB_LS_LOCATION_NOT_EXIST, ret);
ASSERT_EQ(OB_TIMEOUT, ret);
ret = inner_proxy.read(res, local_cluster_id, OB_SYS_TENANT_ID, sql.ptr());
ASSERT_EQ(OB_SUCCESS, ret);
ret = inner_proxy.read(res, OB_INVALID_CLUSTER_ID, OB_SYS_TENANT_ID, sql.ptr());
@ -157,6 +157,42 @@ TEST_F(TestLSStatusOperator, LSLifeAgent)
ret = ls_life.create_new_ls(info, create_scn, zone_priority.str(), share::NORMAL_SWITCHOVER_STATUS);
ASSERT_EQ(OB_SUCCESS, ret);
//设置初始成员列表
ObMemberList member_list;
ObMember arb_member;
ObAddr server1(common::ObAddr::IPV4, "127.1.1.1", 2882);
ObAddr server2(common::ObAddr::IPV4, "127.1.1.1", 3882);
ASSERT_EQ(OB_SUCCESS, member_list.add_server(server1));
ASSERT_EQ(OB_SUCCESS, member_list.add_server(server2));
ret = status_operator.update_init_member_list(tenant_id_, ls_id, member_list,
get_curr_simple_server().get_observer().get_mysql_proxy(), arb_member);
ASSERT_EQ(OB_SUCCESS, ret);
ObLSStatusInfo new_status_info;
ObMemberList new_list;
ret = status_operator.get_ls_init_member_list(tenant_id_, ls_id, new_list, new_status_info,
get_curr_simple_server().get_observer().get_mysql_proxy(), arb_member);
ASSERT_EQ(OB_SUCCESS, ret);
//创建新日志流
ObLSStatusInfo new_status_info2;
ObLSID ls_id3(1003);
ret = new_status_info2.init(tenant_id_, ls_id3, 0, share::OB_LS_CREATING, 0, primary_zone);
ASSERT_EQ(OB_SUCCESS, ret);
ret = ls_life.create_new_ls(new_status_info2, create_scn, zone_priority.str(), share::NORMAL_SWITCHOVER_STATUS);
ASSERT_EQ(OB_SUCCESS, ret);
ObAddr server4(common::ObAddr::IPV4, "127.1.1.1", 4882);
ObMember arb_member2(server4, 0);
ret = status_operator.update_init_member_list(tenant_id_, ls_id3, member_list,
get_curr_simple_server().get_observer().get_mysql_proxy(), arb_member2);
ASSERT_EQ(OB_SUCCESS, ret);
ObLSStatusInfo new_status_info3;
ObMemberList new_list2;
ObMember arb_member3;
ret = status_operator.get_ls_init_member_list(tenant_id_, ls_id3, new_list2, new_status_info3,
get_curr_simple_server().get_observer().get_mysql_proxy(), arb_member3);
ASSERT_EQ(OB_SUCCESS, ret);
//设置日志流offline的参数检查
share::SCN invalid_scn;
ret = ls_life.set_ls_offline(tenant_id_, SYS_LS, share::OB_LS_DROPPING, invalid_scn, share::NORMAL_SWITCHOVER_STATUS);

View File

@ -706,7 +706,10 @@ int ObLSStatusOperator::set_member_list_with_hex_str_(const common::ObString &st
} else if (OB_UNLIKELY(deserialize_pos > deserialize_size)) {
ret = OB_SIZE_OVERFLOW;
LOG_WARN("deserialize error", KR(ret), K(deserialize_pos), K(deserialize_size));
} else if (deserialize_pos < deserialize_size) {
} else if (deserialize_pos < deserialize_size - 1) {
//When deserialize_buf applies for memory, it applies for one more storage '\0',
//so after member_list is deserialized,
//pos can only go to the position of deserialize_size - 1, and will not point to '\0'
// have to parse flag
ObMemberListFlag flag;
if (OB_FAIL(flag.deserialize(deserialize_buf, deserialize_size, deserialize_pos))) {