Fix sys ls gc check transfer task bug.
This commit is contained in:
@ -51,6 +51,9 @@ public:
|
||||
return UNIT_DELETING_IN_OBSERVER != status && UNIT_ERROR_STAT != status;
|
||||
}
|
||||
|
||||
static bool is_unit_will_be_deleted_in_observer(const ObUnitStatus status) {
|
||||
return UNIT_WAIT_GC_IN_OBSERVER == status || UNIT_DELETING_IN_OBSERVER == status; }
|
||||
|
||||
struct ObTenantConfig
|
||||
{
|
||||
OB_UNIS_VERSION(1);
|
||||
|
@ -362,8 +362,7 @@ int ObLSCompleteMigrationDagNet::update_migration_status_(ObLS *ls)
|
||||
static const int64_t UPDATE_MIGRATION_STATUS_INTERVAL_MS = 100 * 1000; //100ms
|
||||
ObTenantDagScheduler *scheduler = nullptr;
|
||||
int32_t result = OB_SUCCESS;
|
||||
share::ObTenantBase *tenant_base = MTL_CTX();
|
||||
omt::ObTenant *tenant = nullptr;
|
||||
bool is_tenant_deleted = false;
|
||||
|
||||
DEBUG_SYNC(BEFORE_COMPLETE_MIGRATION_UPDATE_STATUS);
|
||||
|
||||
@ -376,10 +375,6 @@ int ObLSCompleteMigrationDagNet::update_migration_status_(ObLS *ls)
|
||||
} else if (OB_ISNULL(scheduler = MTL(ObTenantDagScheduler*))) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("failed to get ObTenantDagScheduler from MTL", K(ret));
|
||||
} else if (OB_ISNULL(tenant_base)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("tenant base should not be NULL", K(ret), KP(tenant_base));
|
||||
} else if (FALSE_IT(tenant = static_cast<omt::ObTenant *>(tenant_base))) {
|
||||
} else {
|
||||
while (!is_finish) {
|
||||
ObMigrationStatus current_migration_status = ObMigrationStatus::OB_MIGRATION_STATUS_MAX;
|
||||
@ -404,7 +399,9 @@ int ObLSCompleteMigrationDagNet::update_migration_status_(ObLS *ls)
|
||||
ret = OB_SERVER_IS_STOPPING;
|
||||
LOG_WARN("tenant dag scheduler has set stop, stop migration dag net", K(ret), K(ctx_));
|
||||
break;
|
||||
} else if (tenant->has_stopped()) {
|
||||
} else if (OB_FAIL(ObStorageHAUtils::check_tenant_will_be_deleted(is_tenant_deleted))) {
|
||||
LOG_WARN("failed to check tenant deleted", K(ret), K(ctx_));
|
||||
} else if (is_tenant_deleted) {
|
||||
ret = OB_TENANT_HAS_BEEN_DROPPED;
|
||||
LOG_WARN("tenant has been stopped, stop migration dag net", K(ret), K(ctx_));
|
||||
break;
|
||||
|
@ -547,10 +547,17 @@ int ObMigrationStatusHelper::check_ls_with_transfer_task_(
|
||||
SCN max_decided_scn(SCN::base_scn());
|
||||
ObLSService *ls_service = NULL;
|
||||
ObLSHandle dest_ls_handle;
|
||||
bool is_tenant_deleted = false;
|
||||
|
||||
if (OB_ISNULL(sql_proxy)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("mysql proxy should not be NULL", K(ret), KP(sql_proxy));
|
||||
} else if (OB_FAIL(ObStorageHAUtils::check_tenant_will_be_deleted(is_tenant_deleted))) {
|
||||
LOG_WARN("failed to check tenant deleted", K(ret), K(ls));
|
||||
} else if (is_tenant_deleted) {
|
||||
need_check_allow_gc = true;
|
||||
need_wait_dest_ls_replay = false;
|
||||
FLOG_INFO("unit wait gc in observer, allow gc", K(tenant_id), K(src_ls_id));
|
||||
} else if (OB_FAIL(ObTransferTaskOperator::get_by_src_ls(
|
||||
*sql_proxy, tenant_id, src_ls_id, task, share::OBCG_STORAGE))) {
|
||||
LOG_WARN("failed to get transfer task", K(ret), K(tenant_id), K(src_ls_id));
|
||||
|
@ -417,6 +417,27 @@ int ObStorageHAUtils::check_ls_is_leader(
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObStorageHAUtils::check_tenant_will_be_deleted(
|
||||
bool &is_deleted)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
is_deleted = false;
|
||||
|
||||
share::ObTenantBase *tenant_base = MTL_CTX();
|
||||
omt::ObTenant *tenant = nullptr;
|
||||
ObUnitInfoGetter::ObUnitStatus unit_status;
|
||||
if (OB_ISNULL(tenant_base)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("tenant base should not be NULL", K(ret), KP(tenant_base));
|
||||
} else if (FALSE_IT(tenant = static_cast<omt::ObTenant *>(tenant_base))) {
|
||||
} else if (FALSE_IT(unit_status = tenant->get_unit_status())) {
|
||||
} else if (ObUnitInfoGetter::is_unit_will_be_deleted_in_observer(unit_status)) {
|
||||
is_deleted = true;
|
||||
FLOG_INFO("unit wait gc in observer, allow gc", K(tenant->id()), K(unit_status));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
bool ObTransferUtils::is_need_retry_error(const int err)
|
||||
{
|
||||
bool bool_ret = false;
|
||||
|
@ -50,6 +50,8 @@ public:
|
||||
|
||||
static int calc_tablet_sstable_macro_block_cnt(
|
||||
const ObTabletHandle &tablet_handle, int64_t &data_macro_block_count);
|
||||
static int check_tenant_will_be_deleted(
|
||||
bool &is_deleted);
|
||||
|
||||
private:
|
||||
static int check_merge_error_(const uint64_t tenant_id, common::ObISQLClient &sql_client);
|
||||
|
Reference in New Issue
Block a user