From ce48d4640d59c99631fce307fa84972ae3440bd5 Mon Sep 17 00:00:00 2001 From: maosy <630014370@qq.com> Date: Wed, 10 May 2023 05:24:47 +0000 Subject: [PATCH] fix get_ls_init_member_list --- .../simple_server/test_ls_status_operator.cpp | 38 ++++++++++++++++++- src/share/ls/ob_ls_status_operator.cpp | 5 ++- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/mittest/simple_server/test_ls_status_operator.cpp b/mittest/simple_server/test_ls_status_operator.cpp index cd0ac4ad1..b0df079e3 100644 --- a/mittest/simple_server/test_ls_status_operator.cpp +++ b/mittest/simple_server/test_ls_status_operator.cpp @@ -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); diff --git a/src/share/ls/ob_ls_status_operator.cpp b/src/share/ls/ob_ls_status_operator.cpp index 2d885f050..603dba335 100644 --- a/src/share/ls/ob_ls_status_operator.cpp +++ b/src/share/ls/ob_ls_status_operator.cpp @@ -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))) {