suspend merge when tenant in restore

This commit is contained in:
obdev
2023-01-09 13:11:46 +00:00
committed by ob-robot
parent 2c5e745e15
commit 9d17589678
7 changed files with 54 additions and 10 deletions

View File

@ -597,6 +597,7 @@ class EventTable
EN_MEDIUM_CREATE_DAG = 706,
EN_MEDIUM_VERIFY_GROUP_SKIP_SET_VERIFY = 707,
EN_MEDIUM_VERIFY_GROUP_SKIP_COLUMN_CHECKSUM = 708,
EN_SCHEDULE_MEDIUM_COMPACTION = 709,
// please add new trace point after 750
EN_SESSION_LEAK_COUNT_THRESHOLD = 751,
@ -647,7 +648,7 @@ class EventTable
EN_BACKUP_READ_MACRO_BLOCK_FAILED = 1111,
EN_FETCH_TABLE_INFO_RPC = 1112,
// END OF STORAGE HA - 1101 - 2000
EVENT_TABLE_MAX = SIZE_OF_EVENT_TABLE
};

View File

@ -126,6 +126,7 @@ void TestMultiVersionMerge::SetUpTestCase()
ObLSHandle ls_handle;
ObLSService *ls_svr = MTL(ObLSService*);
ASSERT_EQ(OB_SUCCESS, ls_svr->get_ls(ls_id, ls_handle, ObLSGetMod::STORAGE_MOD));
MTL(ObTenantTabletScheduler*)->resume_major_merge();
// create tablet
obrpc::ObBatchCreateTabletArg create_tablet_arg;

View File

@ -173,6 +173,14 @@ int ObMediumCompactionScheduleFunc::schedule_next_medium_primary_cluster(
}
LOG_DEBUG("schedule next medium in primary cluster", K(ret), KPC(this), K(schedule_medium_flag),
K(schedule_major_snapshot), K(adaptive_merge_reason), KPC(last_major), K(medium_list), K(max_sync_medium_scn));
#ifdef ERRSIM
ret = OB_E(EventTable::EN_SCHEDULE_MEDIUM_COMPACTION) ret;
if (OB_FAIL(ret) && tablet_.get_tablet_meta().tablet_id_.id() > ObTabletID::MIN_USER_TABLET_ID) {
FLOG_INFO("set schedule medium with errsim", KPC(this));
ret = OB_SUCCESS;
schedule_medium_flag = true;
}
#endif
if (OB_FAIL(ret) || !schedule_medium_flag) {
} else if (ObMediumCompactionInfo::MAJOR_COMPACTION == medium_list.get_last_compaction_type()) {
@ -275,6 +283,13 @@ int ObMediumCompactionScheduleFunc::decide_medium_snapshot(
}
}
}
#ifdef ERRSIM
ret = OB_E(EventTable::EN_SCHEDULE_MEDIUM_COMPACTION) ret;
if (OB_FAIL(ret) && tablet_.get_tablet_meta().tablet_id_.id() > ObTabletID::MIN_USER_TABLET_ID) {
FLOG_INFO("set schedule medium with errsim", KPC(this));
ret = OB_SUCCESS;
}
#endif
if (FAILEDx(prepare_medium_info(result, medium_info))) {
if (OB_TABLE_IS_DELETED == ret) {
ret = OB_SUCCESS;

View File

@ -1315,6 +1315,7 @@ int ObAdaptiveMergePolicy::find_meta_major_tables(
LOG_WARN("failed to add minor table to meta merge result", K(ret));
}
} // end of for
if (OB_FAIL(ret)) {
} else if (tx_determ_table_cnt < 2) {
ret = OB_NO_NEED_MERGE;
@ -1327,6 +1328,15 @@ int ObAdaptiveMergePolicy::find_meta_major_tables(
ret = OB_NO_NEED_MERGE;
LOG_INFO("chosen snapshot is abandoned", K(ret), K(result), K(tablet.get_multi_version_start()));
}
#ifdef ERRSIM
ret = OB_E(EventTable::EN_SCHEDULE_MEDIUM_COMPACTION) ret;
if (OB_FAIL(ret) && tablet.get_tablet_meta().tablet_id_.id() > ObTabletID::MIN_USER_TABLET_ID) {
FLOG_INFO("set schedule medium with errsim", "tablet_id", tablet.get_tablet_meta().tablet_id_);
ret = OB_SUCCESS;
}
#endif
}
return ret;
}

View File

@ -744,6 +744,7 @@ int64_t ObTenantFreezeInfoMgr::get_snapshot_gc_ts()
ObTenantFreezeInfoMgr::ReloadTask::ReloadTask(ObTenantFreezeInfoMgr &mgr)
: inited_(false),
check_tenant_status_(true),
mgr_(mgr),
sql_proxy_(NULL),
snapshot_proxy_(),
@ -862,13 +863,28 @@ int ObTenantFreezeInfoMgr::ReloadTask::refresh_merge_info()
scheduler->stop_major_merge();
LOG_INFO("schedule zone to stop major merge", K(tenant_id), K(zone_merge_info), K(global_merge_info));
} else {
scheduler->resume_major_merge();
const int64_t scheduler_frozen_version = scheduler->get_frozen_version();
if (zone_merge_info.broadcast_scn_.get_scn().get_val_for_tx() > scheduler_frozen_version) {
FLOG_INFO("try to schedule merge", K(tenant_id), "zone", zone_merge_info.zone_, "broadcast_scn",
zone_merge_info.broadcast_scn_, K(scheduler_frozen_version));
if (OB_FAIL(scheduler->schedule_merge(zone_merge_info.broadcast_scn_.get_scn().get_val_for_tx()))) {
LOG_WARN("fail to schedule merge", K(ret), K(zone_merge_info));
if (check_tenant_status_) {
bool is_restore = false;
if (OB_FAIL(ObMultiVersionSchemaService::get_instance().check_tenant_is_restore(nullptr, tenant_id, is_restore))) {
LOG_WARN("failed to check tenant is restore", K(ret));
} else if (is_restore) {
if (REACH_TENANT_TIME_INTERVAL(10L * 1000L * 1000L)) {
LOG_INFO("skip restoring tenant to schedule major merge", K(tenant_id), K(is_restore));
}
} else {
check_tenant_status_ = false;
LOG_INFO("finish check tenant restore", K(tenant_id), K(is_restore));
}
}
if (!check_tenant_status_) {
scheduler->resume_major_merge();
const int64_t scheduler_frozen_version = scheduler->get_frozen_version();
if (zone_merge_info.broadcast_scn_.get_scn().get_val_for_tx() > scheduler_frozen_version) {
FLOG_INFO("try to schedule merge", K(tenant_id), "zone", zone_merge_info.zone_, "broadcast_scn",
zone_merge_info.broadcast_scn_, K(scheduler_frozen_version));
if (OB_FAIL(scheduler->schedule_merge(zone_merge_info.broadcast_scn_.get_scn().get_val_for_tx()))) {
LOG_WARN("fail to schedule merge", K(ret), K(zone_merge_info));
}
}
}
}

View File

@ -173,6 +173,7 @@ private:
common::ObIArray<FreezeInfo> &freeze_info);
bool inited_;
bool check_tenant_status_;
ObTenantFreezeInfoMgr &mgr_;
common::ObISQLClient *sql_proxy_;
share::ObSnapshotTableProxy snapshot_proxy_;

View File

@ -150,7 +150,7 @@ constexpr ObMergeType ObTenantTabletScheduler::MERGE_TYPES[];
ObTenantTabletScheduler::ObTenantTabletScheduler()
: is_inited_(false),
major_merge_status_(true),
major_merge_status_(false),
is_stop_(true),
merge_loop_tg_id_(0),
medium_loop_tg_id_(0),
@ -979,7 +979,7 @@ int ObTenantTabletScheduler::schedule_ls_medium_merge(
schedule_stats_.schedule_cnt_++;
}
if (OB_TMP_FAIL(ObMediumCompactionScheduleFunc::schedule_tablet_medium_merge(
if (could_major_merge && OB_TMP_FAIL(ObMediumCompactionScheduleFunc::schedule_tablet_medium_merge(
ls,
*tablet,
major_frozen_scn))) {