[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

@ -93,6 +93,7 @@
#include "storage/ob_file_system_router.h"
#include "rootserver/freeze/ob_major_freeze_helper.h"
#include "share/restore/ob_physical_restore_table_operator.h"//ObPhysicalRestoreTableOperator
#include "share/ob_cluster_event_history_table_operator.h"//CLUSTER_EVENT_INSTANCE
#include "share/scn.h"
namespace oceanbase
{
@ -880,7 +881,8 @@ int ObRootService::init(ObServerConfig &config,
FLOG_WARN("init snapshot manager failed", KR(ret));
} else if (OB_FAIL(root_inspection_.init(*schema_service_, zone_manager_, sql_proxy_, &common_proxy_))) {
FLOG_WARN("init root inspection failed", KR(ret));
} else if (OB_FAIL(upgrade_executor_.init(*schema_service_, sql_proxy_, rpc_proxy_, common_proxy_))) {
} else if (OB_FAIL(upgrade_executor_.init(*schema_service_,
root_inspection_, sql_proxy_, rpc_proxy_, common_proxy_))) {
FLOG_WARN("init upgrade_executor failed", KR(ret));
} else if (OB_FAIL(upgrade_storage_format_executor_.init(*this, ddl_service_))) {
FLOG_WARN("init upgrade storage format executor failed", KR(ret));
@ -1080,6 +1082,7 @@ int ObRootService::start_service()
ddl_service_.restart();
server_manager_.reset();
zone_manager_.reset();
OTC_MGR.reset_version_has_refreshed();
if (OB_FAIL(hb_checker_.start())) {
FLOG_WARN("hb checker start failed", KR(ret));
@ -1432,21 +1435,22 @@ int ObRootService::submit_offline_server_task(const common::ObAddr &server)
}
int ObRootService::submit_upgrade_task(
const obrpc::ObUpgradeJobArg::Action action,
const int64_t version)
const obrpc::ObUpgradeJobArg &arg)
{
int ret = OB_SUCCESS;
ObUpgradeTask task(upgrade_executor_, action, version);
ObUpgradeTask task(upgrade_executor_);
task.set_retry_times(0); //not repeat
if (!inited_) {
ret = OB_NOT_INIT;
LOG_WARN("not init", KR(ret));
} else if (OB_FAIL(task.init(arg))) {
LOG_WARN("task init failed", KR(ret), K(arg));
} else if (OB_FAIL(upgrade_executor_.can_execute())) {
LOG_WARN("can't run task now", KR(ret), K(action), K(version));
LOG_WARN("can't run task now", KR(ret), K(arg));
} else if (OB_FAIL(task_queue_.add_async_task(task))) {
LOG_WARN("submit upgrade task fail", KR(ret), K(action), K(version));
LOG_WARN("submit upgrade task fail", KR(ret), K(arg));
} else {
LOG_INFO("submit upgrade task success", KR(ret), K(action), K(version));
LOG_INFO("submit upgrade task success", KR(ret), K(arg));
}
return ret;
}
@ -1999,6 +2003,19 @@ int ObRootService::execute_bootstrap(const obrpc::ObBootstrapArg &arg)
LOG_ERROR("failed to update cpu_quota_concurrency", K(ret));
}
if (OB_SUCC(ret)) {
char ori_min_server_version[OB_SERVER_VERSION_LENGTH] = {'\0'};
uint64_t ori_cluster_version = GET_MIN_CLUSTER_VERSION();
if (OB_INVALID_INDEX == ObClusterVersion::print_version_str(
ori_min_server_version, OB_SERVER_VERSION_LENGTH, ori_cluster_version)) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("fail to print version str", KR(ret), K(ori_cluster_version));
} else {
CLUSTER_EVENT_SYNC_ADD("BOOTSTRAP", "BOOTSTRAP_SUCCESS",
"cluster_version", ori_min_server_version);
}
}
//clear bootstrap flag, regardless failure or success
int tmp_ret = OB_SUCCESS;
if (OB_SUCCESS != (tmp_ret = clear_special_cluster_schema_status())) {
@ -6678,19 +6695,20 @@ int ObRootService::construct_rs_list_arg(
int ObRootService::add_server(const obrpc::ObAdminServerArg &arg)
{
int ret = OB_SUCCESS;
uint64_t sys_data_version = 0;
// argument
ObCheckServerEmptyArg new_arg;
new_arg.mode_ = ObCheckServerEmptyArg::ADD_SERVER;
if (!inited_) {
ret = OB_NOT_INIT;
LOG_WARN("not init", K(ret));
} else if (!arg.is_valid()) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid arg", K(arg), K(ret));
} else if (OB_FAIL(GET_MIN_DATA_VERSION(OB_SYS_TENANT_ID, sys_data_version))) {
LOG_WARN("fail to get sys data version", KR(ret));
} else {
LOG_INFO("add_server", K(arg), "timeout_ts", THIS_WORKER.get_timeout_ts());
ObCheckServerEmptyArg new_arg;
new_arg.mode_ = ObCheckServerEmptyArg::ADD_SERVER;
ObCheckServerEmptyArg new_arg(ObCheckServerEmptyArg::ADD_SERVER,
sys_data_version);
ObCheckDeploymentModeArg dp_arg;
dp_arg.single_zone_deployment_on_ = OB_FILE_SYSTEM_ROUTER.is_single_zone_deployment_on();
@ -7967,30 +7985,23 @@ int ObRootService::run_upgrade_job(const obrpc::ObUpgradeJobArg &arg)
int64_t version = arg.version_;
if (!inited_) {
ret = OB_NOT_INIT;
LOG_WARN("not init", KR(ret));
LOG_WARN("not init", KR(ret), K(arg));
} else if (!arg.is_valid()) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid arg", K(arg), KR(ret));
} else if (ObUpgradeJobArg::UPGRADE_POST_ACTION == arg.action_
|| ObUpgradeJobArg::UPGRADE_SYSTEM_VARIABLE == arg.action_
|| ObUpgradeJobArg::UPGRADE_SYSTEM_TABLE == arg.action_) {
if (ObUpgradeJobArg::UPGRADE_POST_ACTION == arg.action_
&& !ObUpgradeChecker::check_data_version_exist(version)) {
ret = OB_NOT_SUPPORTED;
LOG_WARN("unsupported version to run upgrade job", KR(ret), K(version));
LOG_USER_ERROR(OB_NOT_SUPPORTED, "run upgrade job with such version is");
} else if (OB_FAIL(submit_upgrade_task(arg.action_, version))) {
LOG_WARN("fail to submit upgrade task", KR(ret), K(arg));
}
&& !ObUpgradeChecker::check_data_version_exist(version)) {
ret = OB_NOT_SUPPORTED;
LOG_WARN("unsupported version to run upgrade job", KR(ret), K(version));
LOG_USER_ERROR(OB_NOT_SUPPORTED, "run upgrade job with such version is");
} else if (ObUpgradeJobArg::STOP_UPGRADE_JOB == arg.action_) {
if (OB_FAIL(upgrade_executor_.stop())) {
LOG_WARN("fail to stop upgrade task", KR(ret));
} else {
upgrade_executor_.start();
}
} else {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("invalid action type", KR(ret), K(arg));
} else if (OB_FAIL(submit_upgrade_task(arg))) {
LOG_WARN("fail to submit upgrade task", KR(ret), K(arg));
}
ROOTSERVICE_EVENT_ADD("root_service", "admin_run_upgrade_job", KR(ret), K(arg));
return ret;
@ -7999,12 +8010,34 @@ int ObRootService::run_upgrade_job(const obrpc::ObUpgradeJobArg &arg)
int ObRootService::upgrade_table_schema(const obrpc::ObUpgradeTableSchemaArg &arg)
{
int ret = OB_SUCCESS;
const int64_t start = ObTimeUtility::current_time();
FLOG_INFO("[UPGRADE] start to upgrade table", K(arg));
if (!inited_) {
ret = OB_NOT_INIT;
LOG_WARN("not init", KR(ret));
} else if (OB_FAIL(ddl_service_.upgrade_table_schema(arg))) {
LOG_WARN("fail to upgrade table schema", KR(ret), K(arg));
} else if (!arg.is_valid()) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("arg is invalid", KR(ret), K(arg));
} else if (!arg.upgrade_virtual_schema()) {
// upgrade single system table
if (OB_FAIL(ddl_service_.upgrade_table_schema(arg))) {
LOG_WARN("fail to upgrade table schema", KR(ret), K(arg));
}
} else {
// upgrade all virtual table/sys view
ObSystemAdminCtx ctx;
if (OB_FAIL(init_sys_admin_ctx(ctx))) {
LOG_WARN("init_sys_admin_ctx failed", K(ret));
} else {
ObAdminUpgradeVirtualSchema admin_util(ctx);
int64_t upgrade_cnt = 0;
if (OB_FAIL(admin_util.execute(arg.get_tenant_id(), upgrade_cnt))) {
LOG_WARN("upgrade virtual schema failed", KR(ret), K(arg));
}
}
}
FLOG_INFO("[UPGRADE] finish upgrade table", KR(ret), K(arg),
"cost_us", ObTimeUtility::current_time() - start);
return ret;
}