[CP] switchover to standby timeout
This commit is contained in:
@ -22,7 +22,6 @@
|
||||
#endif
|
||||
#include "lib/mysqlclient/ob_isql_client.h"
|
||||
#include "observer/omt/ob_tenant_config_mgr.h" // ObTenantConfigGuard
|
||||
#include "storage/ls/ob_ls.h" //ObLS
|
||||
|
||||
namespace oceanbase
|
||||
{
|
||||
@ -447,61 +446,5 @@ bool ObShareUtil::is_tenant_enable_transfer(const uint64_t tenant_id)
|
||||
return bret;
|
||||
}
|
||||
|
||||
ERRSIM_POINT_DEF(ERRSIM_USER_LS_SYNC_SCN);
|
||||
int ObShareUtil::wait_user_ls_sync_scn_locally(const share::SCN &sys_ls_target_scn, storage::ObLS &ls)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
logservice::ObLogHandler *log_handler = ls.get_log_handler();
|
||||
transaction::ObKeepAliveLSHandler *keep_alive_handler = ls.get_keep_alive_ls_handler();
|
||||
ObLSID ls_id = ls.get_ls_id();
|
||||
uint64_t tenant_id = ls.get_tenant_id();
|
||||
ObTimeoutCtx ctx;
|
||||
if (OB_ISNULL(keep_alive_handler) || OB_ISNULL(log_handler )) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("keep_alive_ls_handler or log_handler is null", KR(ret), K(ls_id),
|
||||
KP(keep_alive_handler), KP(log_handler));
|
||||
} else if (OB_UNLIKELY(!sys_ls_target_scn.is_valid_and_not_min())) {
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
LOG_WARN("invalid sys_ls_target_scn", KR(ret), K(sys_ls_target_scn));
|
||||
} else if (OB_FAIL(ObShareUtil::set_default_timeout_ctx(ctx, GCONF.rpc_timeout))) {
|
||||
LOG_WARN("fail to set timeout", KR(ret));
|
||||
} else {
|
||||
bool need_retry = true;
|
||||
share::SCN curr_end_scn;
|
||||
curr_end_scn.set_min();
|
||||
(void) keep_alive_handler->set_sys_ls_end_scn(sys_ls_target_scn);
|
||||
do {
|
||||
if (OB_UNLIKELY(ctx.is_timeouted())) {
|
||||
ret = OB_TIMEOUT;
|
||||
need_retry = false;
|
||||
LOG_WARN("ctx timeout", KR(ret), K(ctx));
|
||||
} else {
|
||||
if (OB_FAIL(log_handler->get_end_scn(curr_end_scn))) {
|
||||
LOG_WARN("fail to get ls end scn", KR(ret), K(ls_id));
|
||||
} else {
|
||||
// switchover to standby timeout
|
||||
curr_end_scn = ERRSIM_USER_LS_SYNC_SCN ? SCN::scn_dec(sys_ls_target_scn) : curr_end_scn;
|
||||
LOG_TRACE("wait curr_end_scn >= sys_ls_target_scn", K(curr_end_scn), K(sys_ls_target_scn),
|
||||
"is_errsim_opened", ERRSIM_USER_LS_SYNC_SCN ? true : false);
|
||||
}
|
||||
if (OB_SUCC(ret) && curr_end_scn >= sys_ls_target_scn) {
|
||||
LOG_INFO("current user ls end scn >= sys ls target scn now", K(curr_end_scn),
|
||||
K(sys_ls_target_scn), "is_errsim_opened", ERRSIM_USER_LS_SYNC_SCN ? true : false,
|
||||
K(tenant_id), K(ls_id));
|
||||
need_retry = false;
|
||||
}
|
||||
}
|
||||
if (need_retry) {
|
||||
ob_usleep(50 * 1000); // wait 50ms
|
||||
}
|
||||
} while (need_retry && OB_SUCC(ret));
|
||||
if (OB_UNLIKELY(need_retry && OB_SUCC(ret))) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("the wait loop should not be terminated", KR(ret), K(curr_end_scn), K(sys_ls_target_scn));
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
} //end namespace share
|
||||
} //end namespace oceanbase
|
||||
|
||||
Reference in New Issue
Block a user