[CP] fix backup get wrong data version and fix recover table to standby tenant

This commit is contained in:
wxhwang
2023-12-04 09:11:46 +00:00
committed by ob-robot
parent f9aa4172eb
commit 6533f800dd
3 changed files with 15 additions and 6 deletions

View File

@ -624,12 +624,13 @@ int ObBackupDataScheduler::persist_backup_version_(common::ObISQLClient &sql_pro
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
uint64_t data_version = 0; uint64_t data_version = 0;
uint64_t exec_tenant_id = gen_meta_tenant_id(tenant_id); uint64_t exec_tenant_id = gen_meta_tenant_id(tenant_id);
if (GCONF.enable_upgrade_mode) { // TODO(wangxiaohui.wxh) 4.3, correct the tenant id to user tenant id in backup info
if (GCONF.in_upgrade_mode()) {
ret = OB_BACKUP_CAN_NOT_START; ret = OB_BACKUP_CAN_NOT_START;
LOG_USER_ERROR(OB_BACKUP_CAN_NOT_START, "cluster upgrading"); LOG_USER_ERROR(OB_BACKUP_CAN_NOT_START, "cluster upgrading");
LOG_WARN("cluster upgrade, can't start backup", K(ret), K(tenant_id)); LOG_WARN("cluster upgrade, can't start backup", K(ret), K(tenant_id));
} else if (OB_FAIL(ObShareUtil::fetch_current_data_version(sql_proxy, exec_tenant_id, data_version))) { } else if (OB_FAIL(ObShareUtil::fetch_current_data_version(sql_proxy, tenant_id/*user tenant id*/, data_version))) {
LOG_WARN("failed to get data version", K(ret), K(exec_tenant_id)); LOG_WARN("failed to get data version", K(ret), K(tenant_id));
} else if (OB_FAIL(ObLSBackupInfoOperator::set_backup_version(sql_proxy, exec_tenant_id, data_version))) { } else if (OB_FAIL(ObLSBackupInfoOperator::set_backup_version(sql_proxy, exec_tenant_id, data_version))) {
LOG_WARN("failed to set backup version", K(ret), K(exec_tenant_id), K(data_version)); LOG_WARN("failed to set backup version", K(ret), K(exec_tenant_id), K(data_version));
} else if (OB_FAIL(ObLSBackupInfoOperator::set_cluster_version(sql_proxy, exec_tenant_id, cluster_version))) { } else if (OB_FAIL(ObLSBackupInfoOperator::set_cluster_version(sql_proxy, exec_tenant_id, cluster_version))) {
@ -1260,7 +1261,7 @@ int ObUserTenantBackupJobMgr::check_can_backup_()
uint64_t exec_tenant_id = gen_meta_tenant_id(job_attr_->tenant_id_); uint64_t exec_tenant_id = gen_meta_tenant_id(job_attr_->tenant_id_);
if (share::ObBackupStatus::CANCELING == job_attr_->status_.status_) { if (share::ObBackupStatus::CANCELING == job_attr_->status_.status_) {
// backup job is canceling, no need to check log archive status // backup job is canceling, no need to check log archive status
} else if (GCONF.enable_upgrade_mode) { } else if (GCONF.in_upgrade_mode()) {
ret = OB_STATE_NOT_MATCH; ret = OB_STATE_NOT_MATCH;
LOG_WARN("cluster is upgrade, backup can't continue", K(ret), KPC(job_attr_)); LOG_WARN("cluster is upgrade, backup can't continue", K(ret), KPC(job_attr_));
} else if (OB_FAIL(share::ObLSBackupInfoOperator::get_backup_version(*sql_proxy_, exec_tenant_id, data_version))) { } else if (OB_FAIL(share::ObLSBackupInfoOperator::get_backup_version(*sql_proxy_, exec_tenant_id, data_version))) {
@ -1270,8 +1271,8 @@ int ObUserTenantBackupJobMgr::check_can_backup_()
} else if (cluster_version != GET_MIN_CLUSTER_VERSION()) { } else if (cluster_version != GET_MIN_CLUSTER_VERSION()) {
ret = OB_VERSION_NOT_MATCH; ret = OB_VERSION_NOT_MATCH;
LOG_WARN("cluster version not match, backup can't continue", K(ret), K(cluster_version)); LOG_WARN("cluster version not match, backup can't continue", K(ret), K(cluster_version));
} else if (OB_FAIL(ObBackupUtils::check_tenant_data_version_match(exec_tenant_id, data_version))) { } else if (OB_FAIL(ObBackupUtils::check_tenant_data_version_match(job_attr_->tenant_id_, data_version))) {
LOG_WARN("failed to check tenant data version", K(ret), K(exec_tenant_id), K(data_version)); LOG_WARN("failed to check tenant data version", K(ret), "tenant_id", job_attr_->tenant_id_, K(data_version));
} else { } else {
ObTenantArchiveRoundAttr round_attr; ObTenantArchiveRoundAttr round_attr;
if (OB_FAIL(ObTenantArchiveMgr::get_tenant_current_round(job_attr_->tenant_id_, job_attr_->incarnation_id_, round_attr))) { if (OB_FAIL(ObTenantArchiveMgr::get_tenant_current_round(job_attr_->tenant_id_, job_attr_->incarnation_id_, round_attr))) {

View File

@ -43,6 +43,7 @@ bool ObImportTableUtil::can_retrieable_err(const int err_code)
case OB_TABLEGROUP_NOT_EXIST: case OB_TABLEGROUP_NOT_EXIST:
case OB_TABLESPACE_NOT_EXIST: case OB_TABLESPACE_NOT_EXIST:
case OB_ERR_TABLE_EXIST: case OB_ERR_TABLE_EXIST:
case OB_STANDBY_READ_ONLY:
bret = false; bret = false;
break; break;
default: default:

View File

@ -5528,11 +5528,18 @@ int ObRecoverTableResolver::resolve_tenant_(
LOG_WARN("tenant name node must not be null", K(ret)); LOG_WARN("tenant name node must not be null", K(ret));
} else { } else {
ObSchemaGetterGuard schema_guard; ObSchemaGetterGuard schema_guard;
ObAllTenantInfo tenant_info;
ObString tmp_tenant_name(node->children_[0]->str_len_, node->children_[0]->str_value_); ObString tmp_tenant_name(node->children_[0]->str_len_, node->children_[0]->str_value_);
if (OB_FAIL(GCTX.schema_service_->get_tenant_schema_guard(session_tenant_id, schema_guard))) { if (OB_FAIL(GCTX.schema_service_->get_tenant_schema_guard(session_tenant_id, schema_guard))) {
LOG_WARN("failed to get_tenant_schema_guard", KR(ret)); LOG_WARN("failed to get_tenant_schema_guard", KR(ret));
} else if (OB_FAIL(schema_guard.get_tenant_id(tmp_tenant_name, tenant_id))) { } else if (OB_FAIL(schema_guard.get_tenant_id(tmp_tenant_name, tenant_id))) {
LOG_WARN("failed to get tenant id from schema guard", KR(ret), K(tmp_tenant_name)); LOG_WARN("failed to get tenant id from schema guard", KR(ret), K(tmp_tenant_name));
} else if (OB_FAIL(ObAllTenantInfoProxy::load_tenant_info(tenant_id, GCTX.sql_proxy_, false/*for update*/, tenant_info))) {
LOG_WARN("failed to get tenant info", K(ret), K(tenant_id));
} else if (tenant_info.is_standby()) {
ret = OB_NOT_SUPPORTED;
LOG_WARN("dest tenant is standby", K(ret), "tenant_name", tmp_tenant_name);
LOG_USER_ERROR(OB_NOT_SUPPORTED, "recover table to standby tenant is");
} else { } else {
tenant_name = tmp_tenant_name; tenant_name = tmp_tenant_name;
} }