add defense code in major execute
This commit is contained in:
@ -818,24 +818,26 @@ int ObMediumCompactionScheduleFunc::schedule_tablet_medium_merge(
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
const ObMediumCompactionInfoList &medium_list = tablet.get_medium_compaction_info_list();
|
if (MTL(ObTenantTabletScheduler *)->could_major_merge_start()) {
|
||||||
const ObTabletID &tablet_id = tablet.get_tablet_meta().tablet_id_;
|
const ObMediumCompactionInfoList &medium_list = tablet.get_medium_compaction_info_list();
|
||||||
const ObLSID &ls_id = ls.get_ls_id();
|
const ObTabletID &tablet_id = tablet.get_tablet_meta().tablet_id_;
|
||||||
int64_t major_frozen_snapshot = 0 == input_major_snapshot ? MTL(ObTenantTabletScheduler *)->get_frozen_version() : input_major_snapshot;
|
const ObLSID &ls_id = ls.get_ls_id();
|
||||||
ObMediumCompactionInfo::ObCompactionType compaction_type = ObMediumCompactionInfo::COMPACTION_TYPE_MAX;
|
int64_t major_frozen_snapshot = 0 == input_major_snapshot ? MTL(ObTenantTabletScheduler *)->get_frozen_version() : input_major_snapshot;
|
||||||
int64_t schedule_scn = 0;
|
ObMediumCompactionInfo::ObCompactionType compaction_type = ObMediumCompactionInfo::COMPACTION_TYPE_MAX;
|
||||||
bool need_merge = false;
|
int64_t schedule_scn = 0;
|
||||||
|
bool need_merge = false;
|
||||||
|
|
||||||
(void)tablet.get_medium_compaction_info_list().get_schedule_scn(major_frozen_snapshot, schedule_scn, compaction_type);
|
(void)tablet.get_medium_compaction_info_list().get_schedule_scn(major_frozen_snapshot, schedule_scn, compaction_type);
|
||||||
|
|
||||||
LOG_DEBUG("schedule_tablet_medium_merge", K(schedule_scn), K(major_frozen_snapshot), K(schedule_with_memtable), K(ls_id), K(tablet_id));
|
LOG_DEBUG("schedule_tablet_medium_merge", K(schedule_scn), K(major_frozen_snapshot), K(schedule_with_memtable), K(ls_id), K(tablet_id));
|
||||||
if (0 == schedule_scn
|
if (0 == schedule_scn
|
||||||
&& schedule_with_memtable
|
&& schedule_with_memtable
|
||||||
&& OB_FAIL(get_schedule_medium_from_memtable(tablet, major_frozen_snapshot, schedule_scn, compaction_type))) {
|
&& OB_FAIL(get_schedule_medium_from_memtable(tablet, major_frozen_snapshot, schedule_scn, compaction_type))) {
|
||||||
LOG_WARN("failed to get schedule medium scn from memtables", K(ret));
|
LOG_WARN("failed to get schedule medium scn from memtables", K(ret));
|
||||||
} else if (schedule_scn > 0) {
|
} else if (schedule_scn > 0) {
|
||||||
if (OB_FAIL(check_need_merge_and_schedule(ls, tablet, schedule_scn, compaction_type))) {
|
if (OB_FAIL(check_need_merge_and_schedule(ls, tablet, schedule_scn, compaction_type))) {
|
||||||
LOG_WARN("failed to check medium merge", K(ret), K(ls_id), K(tablet_id), K(schedule_scn));
|
LOG_WARN("failed to check medium merge", K(ret), K(ls_id), K(tablet_id), K(schedule_scn));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -103,6 +103,12 @@ int ObPartitionMergePolicy::get_medium_merge_tables(
|
|||||||
} else if (base_table->get_snapshot_version() >= param.merge_version_) {
|
} else if (base_table->get_snapshot_version() >= param.merge_version_) {
|
||||||
ret = OB_NO_NEED_MERGE;
|
ret = OB_NO_NEED_MERGE;
|
||||||
LOG_INFO("medium merge already finished", K(ret), KPC(base_table), K(result));
|
LOG_INFO("medium merge already finished", K(ret), KPC(base_table), K(result));
|
||||||
|
} else if (OB_UNLIKELY(tablet.get_snapshot_version() < param.merge_version_)) {
|
||||||
|
ret = OB_NO_NEED_MERGE;
|
||||||
|
LOG_INFO("tablet is not ready to schedule medium merge", K(ret), K(tablet), K(param));
|
||||||
|
} else if (OB_UNLIKELY(tablet.get_multi_version_start() > param.merge_version_)) {
|
||||||
|
ret = OB_ERR_UNEXPECTED;
|
||||||
|
LOG_WARN("tablet haven't kept medium snapshot", K(ret), K(tablet), K(param));
|
||||||
} else {
|
} else {
|
||||||
const ObSSTableArray &minor_tables = table_store.get_minor_sstables();
|
const ObSSTableArray &minor_tables = table_store.get_minor_sstables();
|
||||||
bool start_add_table_flag = false;
|
bool start_add_table_flag = false;
|
||||||
|
|||||||
@ -984,7 +984,7 @@ TEST_F(TestCompactionPolicy, check_major_merge_basic)
|
|||||||
|
|
||||||
ObGetMergeTablesParam param;
|
ObGetMergeTablesParam param;
|
||||||
param.merge_type_ = ObMergeType::MAJOR_MERGE;
|
param.merge_type_ = ObMergeType::MAJOR_MERGE;
|
||||||
param.merge_version_ = 340;
|
param.merge_version_ = 350;
|
||||||
ObGetMergeTablesResult result;
|
ObGetMergeTablesResult result;
|
||||||
FakeLS ls;
|
FakeLS ls;
|
||||||
ret = ObPartitionMergePolicy::get_medium_merge_tables(param, ls, *tablet_handle_.get_obj(), result);
|
ret = ObPartitionMergePolicy::get_medium_merge_tables(param, ls, *tablet_handle_.get_obj(), result);
|
||||||
|
|||||||
Reference in New Issue
Block a user