transfer gets tablet meta optimization

This commit is contained in:
godyangfight 2023-11-07 07:44:03 +00:00 committed by ob-robot
parent e8d485cbfa
commit 243be75171
6 changed files with 60 additions and 7 deletions

File diff suppressed because one or more lines are too long

View File

@ -1838,6 +1838,7 @@ DEFINE_ERROR(OB_TRANSFER_WAIT_TRANSACTION_END_TIMEOUT, -7119, -1, "HY000", "tran
DEFINE_ERROR(OB_TABLET_GC_LOCK_CONFLICT, -7120, -1, "HY000", "tablet GC lock conflict");
DEFINE_ERROR(OB_SEQUENCE_NOT_MATCH, -7121, -1, "HY000", "compare sequence not match");
DEFINE_ERROR(OB_SEQUENCE_TOO_SMALL, -7122, -1, "HY000", "compare sequence too small");
DEFINE_ERROR(OB_TRANSFER_CANNOT_START, -7123, -1, "HY000", "transfer cannot start");
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//error code for gis -7201 ---- -7300
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -1432,6 +1432,7 @@ constexpr int OB_TRANSFER_WAIT_TRANSACTION_END_TIMEOUT = -7119;
constexpr int OB_TABLET_GC_LOCK_CONFLICT = -7120;
constexpr int OB_SEQUENCE_NOT_MATCH = -7121;
constexpr int OB_SEQUENCE_TOO_SMALL = -7122;
constexpr int OB_TRANSFER_CANNOT_START = -7123;
constexpr int OB_ERR_INVALID_XML_DATATYPE = -7402;
constexpr int OB_ERR_XML_MISSING_COMMA = -7403;
constexpr int OB_ERR_INVALID_XPATH_EXPRESSION = -7404;
@ -3460,6 +3461,7 @@ constexpr int OB_ERR_INVALID_DATE_MSG_FMT_V2 = -4219;
#define OB_TABLET_GC_LOCK_CONFLICT__USER_ERROR_MSG "tablet GC lock conflict"
#define OB_SEQUENCE_NOT_MATCH__USER_ERROR_MSG "compare sequence not match"
#define OB_SEQUENCE_TOO_SMALL__USER_ERROR_MSG "compare sequence too small"
#define OB_TRANSFER_CANNOT_START__USER_ERROR_MSG "transfer cannot start"
#define OB_ERR_GIS_DIFFERENT_SRIDS__USER_ERROR_MSG "Binary geometry function %s given two geometries of different srids: %u and %u, which should have been identical."
#define OB_ERR_GIS_UNSUPPORTED_ARGUMENT__USER_ERROR_MSG "Calling geometry function %s with unsupported types of arguments."
#define OB_ERR_GIS_UNKNOWN_ERROR__USER_ERROR_MSG "Unknown GIS error occurred in function %s."
@ -5599,6 +5601,7 @@ constexpr int OB_ERR_INVALID_DATE_MSG_FMT_V2 = -4219;
#define OB_TABLET_GC_LOCK_CONFLICT__ORA_USER_ERROR_MSG "ORA-00600: internal error code, arguments: -7120, tablet GC lock conflict"
#define OB_SEQUENCE_NOT_MATCH__ORA_USER_ERROR_MSG "ORA-00600: internal error code, arguments: -7121, compare sequence not match"
#define OB_SEQUENCE_TOO_SMALL__ORA_USER_ERROR_MSG "ORA-00600: internal error code, arguments: -7122, compare sequence too small"
#define OB_TRANSFER_CANNOT_START__ORA_USER_ERROR_MSG "ORA-00600: internal error code, arguments: -7123, transfer cannot start"
#define OB_ERR_GIS_DIFFERENT_SRIDS__ORA_USER_ERROR_MSG "ORA-00600: Binary geometry function %s given two geometries of different srids: %u and %u, which should have been identical."
#define OB_ERR_GIS_UNSUPPORTED_ARGUMENT__ORA_USER_ERROR_MSG "ORA-00600: Calling geometry function %s with unsupported types of arguments."
#define OB_ERR_GIS_UNKNOWN_ERROR__ORA_USER_ERROR_MSG "ORA-00600: Unknown GIS error occurred in function %s."
@ -6077,7 +6080,7 @@ constexpr int OB_ERR_INVALID_DATE_MSG_FMT_V2 = -4219;
#define OB_ERR_DATA_TOO_LONG_MSG_FMT_V2__ORA_USER_ERROR_MSG "ORA-12899: value too large for column %.*s (actual: %ld, maximum: %ld)"
#define OB_ERR_INVALID_DATE_MSG_FMT_V2__ORA_USER_ERROR_MSG "ORA-01861: Incorrect datetime value for column '%.*s' at row %ld"
extern int g_all_ob_errnos[2135];
extern int g_all_ob_errnos[2136];
const char *ob_error_name(const int oberr);
const char* ob_error_cause(const int oberr);

View File

@ -812,8 +812,8 @@ int ObTransferHandler::check_start_status_transfer_tablets_(
} else if (!task_info.is_valid()) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("check start status src ls info get invalid argument", K(ret), K(task_info));
} else if (OB_FAIL(get_ls_member_list_(task_info.dest_ls_id_, member_list))) {
LOG_WARN("failed to get dest ls member list", K(ret), KPC(ls_));
} else if (OB_FAIL(get_src_ls_member_list_(member_list))) {
LOG_WARN("failed to get src ls member list", K(ret), K(task_info));
} else if (OB_FAIL(member_list.get_addr_array(member_addr_list))) {
LOG_WARN("failed to get addr array", K(ret), K(task_info), K(member_list));
} else {
@ -1212,7 +1212,7 @@ int ObTransferHandler::wait_src_ls_replay_to_start_scn_(
} else if (!task_info.is_valid() || !start_scn.is_valid()) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("wait src ls replay to start scn get invalid argument", K(ret), K(task_info), K(start_scn));
} else if (OB_FAIL(get_ls_member_list_(task_info.src_ls_id_, member_list))) {
} else if (OB_FAIL(get_src_ls_member_list_(member_list))) {
LOG_WARN("failed to get src ls member list", K(ret), K(task_info));
} else if (OB_FAIL(member_list.get_addr_array(member_addr_list))) {
LOG_WARN("failed to get addr array", K(ret), K(task_info), K(member_list));
@ -1257,7 +1257,7 @@ int ObTransferHandler::precheck_ls_replay_scn_(const share::ObTransferTaskInfo &
} else if (!task_info.is_valid()) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("wait src ls replay to start scn get invalid argument", K(ret), K(task_info));
} else if (OB_FAIL(get_ls_member_list_(task_info.src_ls_id_, member_list))) {
} else if (OB_FAIL(get_src_ls_member_list_(member_list))) {
LOG_WARN("failed to get src ls member list", K(ret), K(task_info));
} else if (OB_FAIL(member_list.get_addr_array(member_addr_list))) {
LOG_WARN("failed to get addr array", K(ret), K(task_info), K(member_list));
@ -1265,6 +1265,13 @@ int ObTransferHandler::precheck_ls_replay_scn_(const share::ObTransferTaskInfo &
LOG_WARN("failed to get max decided scn", K(ret), K(task_info));
} else if (OB_FAIL(wait_ls_replay_event_(task_info, member_addr_list, check_scn, timeout_ctx))) {
LOG_WARN("failed to wait ls replay event", K(ret), K(task_info), K(member_list), K(check_scn));
if (OB_TIMEOUT == ret) {
ret = OB_TRANSFER_CANNOT_START;
//TODO(zhixing) add error msg in diagnose
}
} else if (timeout_ctx.is_timeouted()) {
ret = OB_TRANSFER_CANNOT_START;
LOG_WARN("transfer precheck timeout, cannot start transfer in", K(ret), K(task_info));
}
return ret;
}
@ -2246,6 +2253,30 @@ int ObTransferHandler::check_task_exist_(
return ret;
}
int ObTransferHandler::get_src_ls_member_list_(
common::ObMemberList &member_list)
{
int ret = OB_SUCCESS;
member_list.reset();
logservice::ObLogHandler *log_handler = NULL;
int64_t paxos_replica_num = 0;
logservice::ObLogService *log_service = nullptr;
if (IS_NOT_INIT) {
ret = OB_NOT_INIT;
LOG_WARN("ls transfer handler do not init", K(ret));
} else if (OB_ISNULL(log_handler = ls_->get_log_handler())) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("log handler should not be NULL", K(ret));
} else if (OB_FAIL(log_handler->get_paxos_member_list(member_list, paxos_replica_num))) {
LOG_WARN("failed to get paxos member list", K(ret));
} else if (member_list.get_member_number() <= 0) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("src ls member list number is unexpected", K(ret), K(member_list));
}
return ret;
}
}
}

View File

@ -255,6 +255,8 @@ private:
const ObTransferStatus &status,
const bool find_by_src_ls,
bool &task_exist) const;
int get_src_ls_member_list_(
common::ObMemberList &member_list);
private:
static const int64_t INTERVAL_US = 1 * 1000 * 1000; //1s

View File

@ -3155,7 +3155,10 @@ int ObStorageRpc::post_ls_member_list_request(
obrpc::ObFetchLSMemberListArg arg;
arg.tenant_id_ = tenant_id;
arg.ls_id_ = ls_id;
if (OB_FAIL(rpc_proxy_->to(src_info.src_addr_).dst_cluster_id(src_info.cluster_id_).fetch_ls_member_list(arg, member_info))) {
if (OB_FAIL(rpc_proxy_->to(src_info.src_addr_).dst_cluster_id(src_info.cluster_id_)
.by(tenant_id)
.group_id(share::OBCG_STORAGE_HA_LEVEL2)
.fetch_ls_member_list(arg, member_info))) {
LOG_WARN("failed to fetch ls info", K(ret), K(arg), K(src_info));
} else {
FLOG_INFO("fetch ls member list successfully", K(member_info));