[FEAT MERGE] New upgrade framework for 4.x

This commit is contained in:
tino247
2022-12-29 11:40:25 +00:00
committed by ob-robot
parent b39b8c45f0
commit a6098ccbc6
106 changed files with 6140 additions and 3227 deletions

View File

@ -2587,26 +2587,51 @@ int ObRunUpgradeJobResolver::resolve(const ParseNode &parse_tree)
ret = OB_ERR_UNEXPECTED;
LOG_WARN("type is not T_ADMIN_RUN_UPGRADE_JOB",
KR(ret), "type", get_type_name(parse_tree.type_));
} else if (OB_UNLIKELY(NULL == parse_tree.children_)) {
} else if (OB_ISNULL(parse_tree.children_)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("children should not be null", KR(ret));
} else if (OB_ISNULL(session_info_)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("session info is null", KR(ret));
} else {
ObRunUpgradeJobStmt *stmt = create_stmt<ObRunUpgradeJobStmt>();
if (NULL == stmt) {
if (OB_ISNULL(stmt)) {
ret = OB_ALLOCATE_MEMORY_FAILED;
LOG_ERROR("create ObRunUpgradeJobStmt failed", KR(ret));
} else {
stmt_ = stmt;
// 1. parse action
ObString str;
uint64_t version = OB_INVALID_VERSION;
if (OB_FAIL(Util::resolve_string(parse_tree.children_[0], str))) {
LOG_WARN("resolve string failed", KR(ret));
} else if (0 == str.case_compare(rootserver::ObRsJobTableOperator::get_job_type_str(
rootserver::JOB_TYPE_UPGRADE_BEGIN))) {
stmt->get_rpc_arg().action_ = obrpc::ObUpgradeJobArg::UPGRADE_BEGIN;
} else if (0 == str.case_compare(rootserver::ObRsJobTableOperator::get_job_type_str(
rootserver::JOB_TYPE_UPGRADE_SYSTEM_VARIABLE))) {
stmt->get_rpc_arg().action_ = obrpc::ObUpgradeJobArg::UPGRADE_SYSTEM_VARIABLE;
} else if (0 == str.case_compare(rootserver::ObRsJobTableOperator::get_job_type_str(
rootserver::JOB_TYPE_UPGRADE_SYSTEM_TABLE))) {
stmt->get_rpc_arg().action_ = obrpc::ObUpgradeJobArg::UPGRADE_SYSTEM_TABLE;
} else if (0 == str.case_compare(rootserver::ObRsJobTableOperator::get_job_type_str(
rootserver::JOB_TYPE_UPGRADE_VIRTUAL_SCHEMA))) {
stmt->get_rpc_arg().action_ = obrpc::ObUpgradeJobArg::UPGRADE_VIRTUAL_SCHEMA;
} else if (0 == str.case_compare(rootserver::ObRsJobTableOperator::get_job_type_str(
rootserver::JOB_TYPE_UPGRADE_SYSTEM_PACKAGE))) {
stmt->get_rpc_arg().action_ = obrpc::ObUpgradeJobArg::UPGRADE_SYSTEM_PACKAGE;
} else if (0 == str.case_compare(rootserver::ObRsJobTableOperator::get_job_type_str(
rootserver::JOB_TYPE_UPGRADE_ALL_POST_ACTION))) {
stmt->get_rpc_arg().action_ = obrpc::ObUpgradeJobArg::UPGRADE_ALL_POST_ACTION;
} else if (0 == str.case_compare(rootserver::ObRsJobTableOperator::get_job_type_str(
rootserver::JOB_TYPE_UPGRADE_INSPECTION))) {
stmt->get_rpc_arg().action_ = obrpc::ObUpgradeJobArg::UPGRADE_INSPECTION;
} else if (0 == str.case_compare(rootserver::ObRsJobTableOperator::get_job_type_str(
rootserver::JOB_TYPE_UPGRADE_END))) {
stmt->get_rpc_arg().action_ = obrpc::ObUpgradeJobArg::UPGRADE_END;
} else if (0 == str.case_compare(rootserver::ObRsJobTableOperator::get_job_type_str(
rootserver::JOB_TYPE_UPGRADE_ALL))) {
stmt->get_rpc_arg().action_ = obrpc::ObUpgradeJobArg::UPGRADE_ALL;
} else {
// UPGRADE_POST_ACTION
if (OB_FAIL(ObClusterVersion::get_version(str, version))) {
@ -2616,6 +2641,38 @@ int ObRunUpgradeJobResolver::resolve(const ParseNode &parse_tree)
stmt->get_rpc_arg().version_ = static_cast<int64_t>(version);
}
}
// 2. parse tenant_ids
if (OB_SUCC(ret)
&& parse_tree.num_child_ >= 2
&& OB_NOT_NULL(parse_tree.children_[1])) {
ParseNode *tenants_node = parse_tree.children_[1];
bool affect_all = false;
const int64_t child_num = tenants_node->num_child_;
const uint64_t cur_tenant_id = session_info_->get_effective_tenant_id();
ObSArray<uint64_t> &tenant_ids = stmt->get_rpc_arg().tenant_ids_;
if (T_TENANT_LIST != tenants_node->type_) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("type is not T_TENANT_LIST", KR(ret),
"type", get_type_name(tenants_node->type_));
} else if (OB_ISNULL(tenants_node->children_)
|| OB_UNLIKELY(0 == child_num)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("children of tenant should not be null", KR(ret), K(child_num));
} else if (OB_FAIL(Util::resolve_tenant(
*tenants_node, cur_tenant_id, tenant_ids, affect_all))) {
LOG_WARN("fail to resolve tenant", KR(ret), K(cur_tenant_id));
} else if (affect_all && 0 != tenant_ids.count()) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("tenant_ids should be empty when specify tenant = all", KR(ret));
} else if (obrpc::ObUpgradeJobArg::UPGRADE_SYSTEM_PACKAGE == stmt->get_rpc_arg().action_) {
if ((tenant_ids.count() > 1)
|| (1 == tenant_ids.count() && !is_sys_tenant(tenant_ids.at(0)))) {
ret = OB_NOT_SUPPORTED;
LOG_WARN("Only system tenant can run UPGRADE_SYSTEM_PACKAGE Job", KR(ret), K(tenant_ids));
LOG_USER_ERROR(OB_NOT_SUPPORTED, "Non-sys tenant run UPGRADE_SYSTEM_PACKAGE job");
}
}
}
}
}
return ret;