suspend merge when tenant in restore
This commit is contained in:
3
deps/oblib/src/lib/utility/ob_tracepoint.h
vendored
3
deps/oblib/src/lib/utility/ob_tracepoint.h
vendored
@ -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
|
||||
};
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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_;
|
||||
|
@ -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))) {
|
||||
|
Reference in New Issue
Block a user