Fix ls which is in migration is gc with all ls replica is not exist.
This commit is contained in:
@ -401,16 +401,15 @@ int ObMigrationStatusHelper::check_transfer_dest_ls_status_for_ls_gc(
|
|||||||
// and the destination can be restored through rebuilding.
|
// and the destination can be restored through rebuilding.
|
||||||
int ObMigrationStatusHelper::set_ls_migrate_gc_status_(
|
int ObMigrationStatusHelper::set_ls_migrate_gc_status_(
|
||||||
ObLS &ls,
|
ObLS &ls,
|
||||||
const ObMigrationStatus &migration_status)
|
bool &allow_gc)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
const ObMigrationStatus migrate_GC_status = ObMigrationStatus::OB_MIGRATION_STATUS_GC;
|
if (OB_FAIL(ls.set_ls_migration_gc(allow_gc))) {
|
||||||
if (ObMigrationStatus::OB_MIGRATION_STATUS_NONE != migration_status) {
|
LOG_WARN("failed to set migration status", K(ret));
|
||||||
// do nothing
|
} else if (!allow_gc) {
|
||||||
|
LOG_INFO("ls is not allow gc", K(ret), K(ls));
|
||||||
} else if (OB_FAIL(ls.get_log_handler()->disable_sync())) {
|
} else if (OB_FAIL(ls.get_log_handler()->disable_sync())) {
|
||||||
LOG_WARN("failed to disable replay", K(ret));
|
LOG_WARN("failed to disable replay", K(ret));
|
||||||
} else if (OB_FAIL(ls.set_migration_status(migrate_GC_status, ls.get_ls_meta().get_rebuild_seq()))) {
|
|
||||||
LOG_WARN("failed to set migration status", K(ret));
|
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -444,7 +443,7 @@ int ObMigrationStatusHelper::check_ls_transfer_tablet_(
|
|||||||
} else if (FALSE_IT(ls_status = ls->get_persistent_state())) {
|
} else if (FALSE_IT(ls_status = ls->get_persistent_state())) {
|
||||||
} else if (ls_status.is_need_gc()) {
|
} else if (ls_status.is_need_gc()) {
|
||||||
allow_gc = true;
|
allow_gc = true;
|
||||||
} else if (OB_FAIL(set_ls_migrate_gc_status_(*ls, migration_status))) {
|
} else if (OB_FAIL(set_ls_migrate_gc_status_(*ls, allow_gc))) {
|
||||||
LOG_WARN("failed to set ls gc status", KR(ret));
|
LOG_WARN("failed to set ls gc status", KR(ret));
|
||||||
} else if (OB_FAIL(ls->get_restore_status(restore_status))) {
|
} else if (OB_FAIL(ls->get_restore_status(restore_status))) {
|
||||||
LOG_WARN("failed to get restore status", K(ret), KPC(ls));
|
LOG_WARN("failed to get restore status", K(ret), KPC(ls));
|
||||||
|
@ -117,7 +117,7 @@ private:
|
|||||||
static bool check_migration_status_is_fail_(const ObMigrationStatus &cur_status);
|
static bool check_migration_status_is_fail_(const ObMigrationStatus &cur_status);
|
||||||
static int set_ls_migrate_gc_status_(
|
static int set_ls_migrate_gc_status_(
|
||||||
ObLS &ls,
|
ObLS &ls,
|
||||||
const ObMigrationStatus &migration_status);
|
bool &allow_gc);
|
||||||
static int check_ls_with_transfer_task_(
|
static int check_ls_with_transfer_task_(
|
||||||
ObLS &ls,
|
ObLS &ls,
|
||||||
bool &need_check_allow_gc,
|
bool &need_check_allow_gc,
|
||||||
|
@ -2467,5 +2467,42 @@ bool ObLS::is_in_gc()
|
|||||||
return bret;
|
return bret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ObLS::set_ls_migration_gc(
|
||||||
|
bool &allow_gc)
|
||||||
|
{
|
||||||
|
int ret = OB_SUCCESS;
|
||||||
|
allow_gc = false;
|
||||||
|
const bool write_slog = true;
|
||||||
|
const ObMigrationStatus change_status = ObMigrationStatus::OB_MIGRATION_STATUS_GC;
|
||||||
|
ObMigrationStatus curr_status = ObMigrationStatus::OB_MIGRATION_STATUS_MAX;
|
||||||
|
ObLSRebuildInfo rebuild_info;
|
||||||
|
WRLockGuard guard(meta_rwlock_);
|
||||||
|
|
||||||
|
if (IS_NOT_INIT) {
|
||||||
|
ret = OB_NOT_INIT;
|
||||||
|
STORAGE_LOG(WARN, "ls is not inited", K(ret), K(ls_meta_));
|
||||||
|
} else if (!ls_meta_.get_persistent_state().can_update_ls_meta()) {
|
||||||
|
ret = OB_STATE_NOT_MATCH;
|
||||||
|
STORAGE_LOG(WARN, "state not match, cannot update ls meta", K(ret), K(ls_meta_));
|
||||||
|
} else if (OB_FAIL(ls_meta_.get_rebuild_info(rebuild_info))) {
|
||||||
|
LOG_WARN("failed to get rebuild info", K(ret), K(ls_meta_));
|
||||||
|
} else if (rebuild_info.is_in_rebuild()) {
|
||||||
|
allow_gc = false;
|
||||||
|
} else if (OB_FAIL(ls_meta_.get_migration_status(curr_status))) {
|
||||||
|
LOG_WARN("failed to get migration status", K(ret), K(ls_meta_));
|
||||||
|
} else if (ObMigrationStatusHelper::check_allow_gc_abandoned_ls(curr_status)) {
|
||||||
|
allow_gc = true;
|
||||||
|
} else if (ObMigrationStatus::OB_MIGRATION_STATUS_NONE != curr_status) {
|
||||||
|
allow_gc = false;
|
||||||
|
} else if (OB_FAIL(ls_meta_.set_migration_status(change_status, write_slog))) {
|
||||||
|
LOG_WARN("failed to set migration status", K(ret), K(change_status));
|
||||||
|
} else {
|
||||||
|
ls_tablet_svr_.disable_to_read();
|
||||||
|
allow_gc = true;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -879,6 +879,8 @@ public:
|
|||||||
DELEGATE_WITH_RET(reserved_snapshot_mgr_, get_min_reserved_snapshot, int64_t);
|
DELEGATE_WITH_RET(reserved_snapshot_mgr_, get_min_reserved_snapshot, int64_t);
|
||||||
DELEGATE_WITH_RET(reserved_snapshot_mgr_, add_dependent_medium_tablet, int);
|
DELEGATE_WITH_RET(reserved_snapshot_mgr_, add_dependent_medium_tablet, int);
|
||||||
DELEGATE_WITH_RET(reserved_snapshot_mgr_, del_dependent_medium_tablet, int);
|
DELEGATE_WITH_RET(reserved_snapshot_mgr_, del_dependent_medium_tablet, int);
|
||||||
|
int set_ls_migration_gc(bool &allow_gc);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// StorageBaseUtil
|
// StorageBaseUtil
|
||||||
// table manager: create, remove and guard get.
|
// table manager: create, remove and guard get.
|
||||||
|
Reference in New Issue
Block a user