diff --git a/src/rootserver/ob_tenant_transfer_service.cpp b/src/rootserver/ob_tenant_transfer_service.cpp index c88119483b..4f416bfc34 100644 --- a/src/rootserver/ob_tenant_transfer_service.cpp +++ b/src/rootserver/ob_tenant_transfer_service.cpp @@ -386,8 +386,6 @@ int ObTenantTransferService::get_member_lists_by_inner_sql_( } else { SMART_VAR(ObISQLClient::ReadResult, result) { ObSqlString sql; - ObString src_ls_member_list_str; - ObString dest_ls_member_list_str; common::sqlclient::ObMySQLResult *res = NULL; if (OB_FAIL(sql.assign_fmt( "SELECT PAXOS_MEMBER_LIST FROM %s WHERE TENANT_ID = %lu AND ROLE = 'LEADER'" @@ -404,40 +402,28 @@ int ObTenantTransferService::get_member_lists_by_inner_sql_( } else if (OB_ISNULL(res = result.get_result())) { ret = OB_ERR_UNEXPECTED; LOG_WARN("get mysql result failed", KR(ret), K(sql)); - } else if (OB_FAIL(res->next())) { - LOG_WARN("next failed, neither src_ls nor dest_ls was found", KR(ret), K_(tenant_id), K(src_ls), K(dest_ls)); - } else if (OB_FAIL(res->get_varchar("PAXOS_MEMBER_LIST", src_ls_member_list_str))) { - LOG_WARN("fail to get PAXOS_MEMBER_LIST", KR(ret), K_(tenant_id), K(src_ls), K(dest_ls)); - } else if (OB_FAIL(res->next())) { - LOG_WARN("next failed, src_ls or dest_ls not found", KR(ret), K_(tenant_id), K(src_ls), K(dest_ls)); - } else if (OB_FAIL(res->get_varchar("PAXOS_MEMBER_LIST", dest_ls_member_list_str))) { - LOG_WARN("fail to get PAXOS_MEMBER_LIST", KR(ret), K_(tenant_id), K(src_ls), K(dest_ls)); - } else if (OB_FAIL(ObLSReplica::text2member_list( - to_cstring(src_ls_member_list_str), - src_ls_member_list))) { - LOG_WARN("text2member_list failed", KR(ret), K_(tenant_id), K(src_ls), K(src_ls_member_list_str)); - } else if (OB_FAIL(ObLSReplica::text2member_list( - to_cstring(dest_ls_member_list_str), - dest_ls_member_list))) { - LOG_WARN("text2member_list failed", KR(ret), K_(tenant_id), K(dest_ls), K(dest_ls_member_list_str)); + } else if (OB_FAIL(construct_ls_member_list_(*res, src_ls_member_list))) { + LOG_WARN("construct src ls member list failed", KR(ret), K_(tenant_id), K(src_ls)); + } else if (OB_FAIL(construct_ls_member_list_(*res, dest_ls_member_list))) { + LOG_WARN("construct dest ls member list failed", KR(ret), K_(tenant_id), K(dest_ls)); } // double check sql result if (OB_FAIL(ret)) { if (OB_UNLIKELY(OB_ITER_END == ret)) { // read less than two rows ret = OB_LEADER_NOT_EXIST; LOG_WARN("leader of src_ls or dest_ls not found", KR(ret), K_(tenant_id), K(src_ls), - K(dest_ls), K(src_ls_member_list_str), K(dest_ls_member_list_str)); + K(dest_ls), K(src_ls_member_list), K(dest_ls_member_list)); } else { LOG_WARN("get ls member_list from inner table failed", KR(ret), K_(tenant_id), - K(src_ls), K(dest_ls), K(src_ls_member_list_str), K(dest_ls_member_list_str)); + K(src_ls), K(dest_ls), K(src_ls_member_list), K(dest_ls_member_list)); } } else if (OB_SUCC(res->next())) { // make sure read only two rows ret = OB_ERR_UNEXPECTED; LOG_WARN("read too much ls from inner table", KR(ret), K_(tenant_id), - K(src_ls), K(dest_ls), K(src_ls_member_list_str), K(dest_ls_member_list_str), K(sql)); + K(src_ls), K(dest_ls), K(src_ls_member_list), K(dest_ls_member_list), K(sql)); } else if (OB_UNLIKELY(OB_ITER_END != ret)) { LOG_WARN("next failed", KR(ret), K_(tenant_id), K(src_ls), K(dest_ls), - K(sql), K(src_ls_member_list_str), K(dest_ls_member_list_str)); + K(sql), K(src_ls_member_list), K(dest_ls_member_list)); } else { ret = OB_SUCCESS; } @@ -446,6 +432,25 @@ int ObTenantTransferService::get_member_lists_by_inner_sql_( return ret; } +int ObTenantTransferService::construct_ls_member_list_( + sqlclient::ObMySQLResult &res, + ObLSReplica::MemberList &ls_member_list) +{ + int ret = OB_SUCCESS; + ls_member_list.reset(); + ObString ls_member_list_str; + if (OB_FAIL(res.next())) { + LOG_WARN("next failed", KR(ret)); + } else if (OB_FAIL(res.get_varchar("PAXOS_MEMBER_LIST", ls_member_list_str))) { + LOG_WARN("fail to get PAXOS_MEMBER_LIST", KR(ret)); + } else if (OB_FAIL(ObLSReplica::text2member_list( + to_cstring(ls_member_list_str), + ls_member_list))) { + LOG_WARN("text2member_list failed", KR(ret), K(ls_member_list_str)); + } + return ret; +} + ERRSIM_POINT_DEF(EN_TENANT_TRANSFER_ALL_LIST_EMPTY); int ObTenantTransferService::lock_table_and_part_( diff --git a/src/rootserver/ob_tenant_transfer_service.h b/src/rootserver/ob_tenant_transfer_service.h index 613dbbd5b0..f6e94f224f 100644 --- a/src/rootserver/ob_tenant_transfer_service.h +++ b/src/rootserver/ob_tenant_transfer_service.h @@ -228,6 +228,9 @@ private: const share::ObTransferTaskID &task_id, const share::ObTransferTaskComment &result_comment); int64_t get_tablet_count_threshold_() const; + int construct_ls_member_list_( + common::sqlclient::ObMySQLResult &res, + share::ObLSReplica::MemberList &ls_member_list); private: static const int64_t IDLE_TIME_US = 10 * 1000 * 1000L; // 10s static const int64_t BUSY_IDLE_TIME_US = 100 * 1000L; // 100ms