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;
|
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
|
struct ObTenantConfig
|
||||||
{
|
{
|
||||||
OB_UNIS_VERSION(1);
|
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
|
static const int64_t UPDATE_MIGRATION_STATUS_INTERVAL_MS = 100 * 1000; //100ms
|
||||||
ObTenantDagScheduler *scheduler = nullptr;
|
ObTenantDagScheduler *scheduler = nullptr;
|
||||||
int32_t result = OB_SUCCESS;
|
int32_t result = OB_SUCCESS;
|
||||||
share::ObTenantBase *tenant_base = MTL_CTX();
|
bool is_tenant_deleted = false;
|
||||||
omt::ObTenant *tenant = nullptr;
|
|
||||||
|
|
||||||
DEBUG_SYNC(BEFORE_COMPLETE_MIGRATION_UPDATE_STATUS);
|
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*))) {
|
} else if (OB_ISNULL(scheduler = MTL(ObTenantDagScheduler*))) {
|
||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
LOG_WARN("failed to get ObTenantDagScheduler from MTL", K(ret));
|
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 {
|
} else {
|
||||||
while (!is_finish) {
|
while (!is_finish) {
|
||||||
ObMigrationStatus current_migration_status = ObMigrationStatus::OB_MIGRATION_STATUS_MAX;
|
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;
|
ret = OB_SERVER_IS_STOPPING;
|
||||||
LOG_WARN("tenant dag scheduler has set stop, stop migration dag net", K(ret), K(ctx_));
|
LOG_WARN("tenant dag scheduler has set stop, stop migration dag net", K(ret), K(ctx_));
|
||||||
break;
|
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;
|
ret = OB_TENANT_HAS_BEEN_DROPPED;
|
||||||
LOG_WARN("tenant has been stopped, stop migration dag net", K(ret), K(ctx_));
|
LOG_WARN("tenant has been stopped, stop migration dag net", K(ret), K(ctx_));
|
||||||
break;
|
break;
|
||||||
|
@ -547,10 +547,17 @@ int ObMigrationStatusHelper::check_ls_with_transfer_task_(
|
|||||||
SCN max_decided_scn(SCN::base_scn());
|
SCN max_decided_scn(SCN::base_scn());
|
||||||
ObLSService *ls_service = NULL;
|
ObLSService *ls_service = NULL;
|
||||||
ObLSHandle dest_ls_handle;
|
ObLSHandle dest_ls_handle;
|
||||||
|
bool is_tenant_deleted = false;
|
||||||
|
|
||||||
if (OB_ISNULL(sql_proxy)) {
|
if (OB_ISNULL(sql_proxy)) {
|
||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
LOG_WARN("mysql proxy should not be NULL", K(ret), KP(sql_proxy));
|
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(
|
} else if (OB_FAIL(ObTransferTaskOperator::get_by_src_ls(
|
||||||
*sql_proxy, tenant_id, src_ls_id, task, share::OBCG_STORAGE))) {
|
*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));
|
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;
|
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 ObTransferUtils::is_need_retry_error(const int err)
|
||||||
{
|
{
|
||||||
bool bool_ret = false;
|
bool bool_ret = false;
|
||||||
|
@ -50,6 +50,8 @@ public:
|
|||||||
|
|
||||||
static int calc_tablet_sstable_macro_block_cnt(
|
static int calc_tablet_sstable_macro_block_cnt(
|
||||||
const ObTabletHandle &tablet_handle, int64_t &data_macro_block_count);
|
const ObTabletHandle &tablet_handle, int64_t &data_macro_block_count);
|
||||||
|
static int check_tenant_will_be_deleted(
|
||||||
|
bool &is_deleted);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static int check_merge_error_(const uint64_t tenant_id, common::ObISQLClient &sql_client);
|
static int check_merge_error_(const uint64_t tenant_id, common::ObISQLClient &sql_client);
|
||||||
|
Reference in New Issue
Block a user