forbid to schedule_compaction_after_mini when restoring

This commit is contained in:
a1iive 2023-12-14 11:22:29 +00:00 committed by ob-robot
parent 1325c496a7
commit 62c47a3294
4 changed files with 56 additions and 14 deletions

View File

@ -156,24 +156,29 @@ int ObTabletMiniMergeCtx::update_tablet(
void ObTabletMiniMergeCtx::try_schedule_compaction_after_mini(ObTabletHandle &tablet_handle)
{
int tmp_ret = OB_SUCCESS;
bool is_restore = false;
bool create_meta_dag = false;
// when restoring, some log stream may be not ready,
// thus the inner sql in ObTenantFreezeInfoMgr::try_update_info may timeout
if (!MTL(ObTenantTabletScheduler *)->is_restore()) {
if (get_tablet_id().is_ls_inner_tablet() ||
0 == get_merge_info().get_sstable_merge_info().macro_block_count_) {
// do nothing
} else if (OB_TMP_FAIL(try_schedule_meta_merge(tablet_handle, create_meta_dag))) {
LOG_WARN_RET(tmp_ret, "failed to schedule meta merge", K(get_dag_param()));
}
if (get_tablet_id().is_ls_inner_tablet() ||
0 == get_merge_info().get_sstable_merge_info().macro_block_count_) {
// do nothing
} else if (OB_TMP_FAIL(try_schedule_meta_merge(tablet_handle, create_meta_dag))) {
LOG_WARN_RET(tmp_ret, "failed to schedule meta merge", K(get_dag_param()));
}
if (create_meta_dag || 0 == get_merge_info().get_sstable_merge_info().macro_block_count_) {
// no need to schedule minor merge
} else if (OB_TMP_FAIL(ObTenantTabletScheduler::schedule_tablet_minor_merge<ObTabletMergeExecuteDag>(
static_param_.ls_handle_, tablet_handle))) {
if (OB_SIZE_OVERFLOW != tmp_ret) {
LOG_WARN_RET(tmp_ret, "failed to schedule special tablet minor merge",
"ls_id", get_ls_id(), "tablet_id", get_tablet_id());
if (create_meta_dag || 0 == get_merge_info().get_sstable_merge_info().macro_block_count_) {
// no need to schedule minor merge
} else if (OB_TMP_FAIL(ObTenantTabletScheduler::schedule_tablet_minor_merge<ObTabletMergeExecuteDag>(
static_param_.ls_handle_, tablet_handle))) {
if (OB_SIZE_OVERFLOW != tmp_ret) {
LOG_WARN_RET(tmp_ret, "failed to schedule special tablet minor merge",
"ls_id", get_ls_id(), "tablet_id", get_tablet_id());
}
}
}
time_guard_click(ObStorageCompactionTimeGuard::SCHEDULE_OTHER_COMPACTION);
}

View File

@ -203,6 +203,7 @@ ObTenantTabletScheduler::ObTenantTabletScheduler()
: is_inited_(false),
major_merge_status_(false),
is_stop_(false),
is_restore_(false),
enable_adaptive_compaction_(false),
enable_adaptive_merge_schedule_(false),
bf_queue_(),
@ -512,6 +513,35 @@ int ObTenantTabletScheduler::set_max()
return ret;
}
int ObTenantTabletScheduler::refresh_tenant_status()
{
int ret = OB_SUCCESS;
int tmp_ret = OB_SUCCESS;
if (IS_NOT_INIT) {
ret = OB_NOT_INIT;
LOG_WARN("The ObTenantTabletScheduler has not been inited", K(ret));
} else {
// refresh is_restore
if (REACH_TENANT_TIME_INTERVAL(REFRESH_TENANT_STATUS_INTERVAL)) {
ATOMIC_SET(&is_restore_, false);
ObSchemaGetterGuard schema_guard;
const ObSimpleTenantSchema *tenant_schema = nullptr;
const int64_t tenant_id = MTL_ID();
if (OB_TMP_FAIL(GCTX.schema_service_->get_tenant_schema_guard(tenant_id, schema_guard))) {
LOG_WARN("fail to get schema guard", K(tmp_ret), K(tenant_id));
} else if (OB_TMP_FAIL(schema_guard.get_tenant_info(tenant_id, tenant_schema))) {
LOG_WARN("fail to get tenant schema", K(tmp_ret), K(tenant_id));
} else if (OB_ISNULL(tenant_schema)) {
tmp_ret = OB_SCHEMA_ERROR;
LOG_WARN("tenant schema is null", K(tmp_ret));
} else if (tenant_schema->is_restore()) {
ATOMIC_SET(&is_restore_, true);
}
}
}
return ret;
}
int ObTenantTabletScheduler::schedule_build_bloomfilter(
const uint64_t table_id,
const blocksstable::MacroBlockId &macro_id,

View File

@ -152,6 +152,7 @@ public:
void stop_major_merge();
void resume_major_merge();
OB_INLINE bool could_major_merge_start() const { return ATOMIC_LOAD(&major_merge_status_); }
OB_INLINE bool is_restore() const { return ATOMIC_LOAD(&is_restore_); }
// The transfer task sets the flag that prohibits the scheduling of medium when the log stream is src_ls of transfer
int stop_tablets_schedule_medium(const ObIArray<ObTabletID> &tablet_ids, const ObProhibitScheduleMediumMap::ProhibitFlag &input_flag);
int clear_tablets_prohibit_medium_flag(const ObIArray<ObTabletID> &tablet_ids, const ObProhibitScheduleMediumMap::ProhibitFlag &input_flag);
@ -179,6 +180,7 @@ public:
int gc_info();
int set_max();
int refresh_tenant_status();
// Schedule an async task to build bloomfilter for the given macro block.
// The bloomfilter build task will be ignored if a same build task exists in the queue.
int schedule_build_bloomfilter(
@ -305,11 +307,13 @@ private:
static const int64_t ADD_LOOP_EVENT_INTERVAL = 120 * 1000 * 1000L; // 120s
static const int64_t PRINT_LOG_INVERVAL = 2 * 60 * 1000 * 1000L; // 2m
static const int64_t WAIT_MEDIUM_CHECK_THRESHOLD = 10 * 60 * 1000 * 1000 * 1000L; // 10m
static const int64_t REFRESH_TENANT_STATUS_INTERVAL = 30 * 1000 * 1000L; // 30s
static const int64_t MERGE_BACTH_FREEZE_CNT = 100L;
private:
bool is_inited_;
bool major_merge_status_;
bool is_stop_;
bool is_restore_;
bool enable_adaptive_compaction_;
bool enable_adaptive_merge_schedule_;
common::ObDedupQueue bf_queue_;

View File

@ -139,6 +139,9 @@ void ObTenantTabletSchedulerTaskMgr::InfoPoolResizeTask::runTimerTask()
if (OB_FAIL(MTL(ObTenantCGReadInfoMgr *)->gc_cg_info_array())) {
LOG_WARN("Fail to gc info", K(ret));
}
if (OB_FAIL(MTL(ObTenantTabletScheduler *)->refresh_tenant_status())) {
LOG_WARN("Fail to refresh tenant status", K(ret));
}
cost_ts = ObTimeUtility::fast_current_time() - cost_ts;
LOG_INFO("InfoPoolResizeTask", K(cost_ts));
}