force drop tenant when physical restore fail
This commit is contained in:
parent
d3d110b766
commit
ede1213446
@ -2347,6 +2347,8 @@ int ObRestoreScheduler::restore_fail(const ObPhysicalRestoreJob& job_info)
|
||||
LOG_WARN("not init", K(ret));
|
||||
} else if (OB_FAIL(check_stop())) {
|
||||
LOG_WARN("restore scheduler stopped", K(ret));
|
||||
} else if (OB_FAIL(drop_tenant_force_if_necessary(job_info))) {
|
||||
LOG_WARN("failed to drop_tenant_force_if_necessary", K(ret), K(job_info));
|
||||
} else if (OB_FAIL(restore_op.init(sql_proxy_))) {
|
||||
LOG_WARN("fail init", K(ret));
|
||||
} else if (OB_FAIL(restore_op.recycle_job(job_info.job_id_, PHYSICAL_RESTORE_FAIL))) {
|
||||
@ -2757,5 +2759,38 @@ int ObRestoreScheduler::do_upgrade_post(const ObPhysicalRestoreJob& job_info)
|
||||
return ret;
|
||||
}
|
||||
|
||||
} // end namespace rootserver
|
||||
} // end namespace oceanbase
|
||||
int ObRestoreScheduler::drop_tenant_force_if_necessary(const ObPhysicalRestoreJob &job_info)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
const bool need_force_drop = GCONF._auto_drop_tenant_if_restore_failed;
|
||||
if (!inited_) {
|
||||
ret = OB_NOT_INIT;
|
||||
LOG_WARN("not inited", K(ret));
|
||||
} else if (OB_FAIL(check_stop())) {
|
||||
LOG_WARN("restore scheduler stopped", K(ret));
|
||||
} else if (need_force_drop) {
|
||||
obrpc::ObDropTenantArg arg;
|
||||
arg.exec_tenant_id_ = OB_SYS_TENANT_ID;
|
||||
arg.tenant_name_ = job_info.tenant_name_;
|
||||
arg.if_exist_ = true;
|
||||
arg.delay_to_drop_ = false;
|
||||
ObSqlString sql;
|
||||
const int64_t TIMEOUT_PER_RPC = GCONF.rpc_timeout; // default 2s
|
||||
const int64_t DEFAULT_TIMEOUT = 10 * 1000 * 1000L; // 10s
|
||||
int64_t rpc_timeout = max(TIMEOUT_PER_RPC, DEFAULT_TIMEOUT);
|
||||
if (OB_FAIL(sql.append_fmt("DROP TENANT IF EXISTS %s FORCE", arg.tenant_name_.ptr()))) {
|
||||
LOG_WARN("fail to generate sql", K(ret), K(arg));
|
||||
} else if (FALSE_IT(arg.ddl_stmt_str_ = sql.string())) {
|
||||
} else if (OB_FAIL(rpc_proxy_->timeout(rpc_timeout).drop_tenant(arg))) {
|
||||
LOG_WARN("fail to drop tenant", K(ret), K(arg));
|
||||
} else {
|
||||
LOG_INFO("drop_tenant_force after restore fail", K(job_info));
|
||||
}
|
||||
} else {
|
||||
LOG_INFO("no need to drop tenant after restore fail", K(job_info));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
} // end namespace rootserver
|
||||
} // end namespace oceanbase
|
||||
|
@ -165,6 +165,8 @@ class ObRestoreScheduler : public ObRsReentrantThread, public share::ObCheckStop
|
||||
void record_rs_event(const share::ObPhysicalRestoreJob& job, const share::PhysicalRestoreStatus next_status);
|
||||
share::PhysicalRestoreStatus get_next_status(int return_ret, share::PhysicalRestoreStatus current_status);
|
||||
|
||||
private:
|
||||
int drop_tenant_force_if_necessary(const share::ObPhysicalRestoreJob &job_info);
|
||||
private:
|
||||
bool inited_;
|
||||
mutable ObRestoreIdling idling_;
|
||||
|
@ -1430,3 +1430,7 @@ DEF_TIME(ilog_index_expire_time, OB_CLUSTER_PARAMETER, "7d", "[0s, 60d]",
|
||||
"specifies the expire time of ilog_index, can use this parameter to limit the"
|
||||
"memory usage of file_id_cache",
|
||||
ObParameterAttr(Section::CLOG, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE));
|
||||
//auto drop restoring tenant if physical restore fails
|
||||
DEF_BOOL(_auto_drop_tenant_if_restore_failed, OB_CLUSTER_PARAMETER, "True",
|
||||
"auto drop restoring tenant if physical restore fails",
|
||||
ObParameterAttr(Section::OBSERVER, Source::DEFAULT, EditLevel::DYNAMIC_EFFECTIVE));
|
||||
|
Loading…
x
Reference in New Issue
Block a user