revert bugfix for migrate

This commit is contained in:
obdev
2022-11-10 08:08:25 +00:00
committed by wangzelin.wzl
parent d54e36b2f6
commit 2155b4291b
3 changed files with 24 additions and 33 deletions

View File

@ -133,14 +133,14 @@ int ObPartitionMergePolicy::find_mini_merge_tables(
// Keep max_snapshot_version currently because major merge must be done step by step
int64_t max_snapshot_version = freeze_info.next.freeze_ts;
ObITable *last_table = tablet.get_table_store().get_minor_sstables().get_boundary_table(true/*last*/);
const int64_t last_minor_log_ts = nullptr == last_table ? tablet.get_clog_checkpoint_ts() : last_table->get_end_log_ts();
const int64_t clog_checkpoint_ts = tablet.get_clog_checkpoint_ts();
// Freezing in the restart phase may not satisfy end >= last_max_sstable,
// so the memtable cannot be filtered by log_ts
// can only take out all frozen memtable
ObIMemtable *memtable = nullptr;
const ObTabletID &tablet_id = tablet.get_tablet_meta().tablet_id_;
int64_t log_ts_included_memtable_cnt = 0;
bool contain_force_freeze_memtable = false;
for (int64_t i = 0; OB_SUCC(ret) && i < memtable_handles.count(); ++i) {
if (OB_ISNULL(memtable = static_cast<ObIMemtable *>(memtable_handles.at(i).get_table()))) {
ret = OB_ERR_SYS;
@ -151,9 +151,12 @@ int ObPartitionMergePolicy::find_mini_merge_tables(
} else if (!memtable->can_be_minor_merged()) {
FLOG_INFO("memtable cannot mini merge now", K(ret), K(i), KPC(memtable), K(max_snapshot_version), K(memtable_handles), K(param));
break;
} else if (memtable->get_end_log_ts() <= last_minor_log_ts) {
} else if (memtable->get_end_log_ts() <= clog_checkpoint_ts) {
if (!tablet_id.is_special_merge_tablet()) {
++log_ts_included_memtable_cnt;
if (static_cast<ObMemtable *>(memtable)->get_is_force_freeze()
&& memtable->get_snapshot_version() > tablet.get_tablet_meta().snapshot_version_) {
contain_force_freeze_memtable = true;
}
} else {
LOG_DEBUG("memtable wait to release", K(param), KPC(memtable));
continue;
@ -189,9 +192,15 @@ int ObPartitionMergePolicy::find_mini_merge_tables(
if (OB_SUCC(ret)) {
result.suggest_merge_type_ = param.merge_type_;
result.version_range_.multi_version_start_ = tablet.get_multi_version_start();
if (log_ts_included_memtable_cnt > 0 && log_ts_included_memtable_cnt == result.handle_.get_count()) {
result.update_tablet_directly_ = true;
LOG_INFO("meet one empty force freeze memtable, could update tablet directly", K(ret), K(result));
if (result.handle_.empty()) {
ret = OB_NO_NEED_MERGE;
} else if (result.log_ts_range_.end_log_ts_ <= clog_checkpoint_ts) {
if (contain_force_freeze_memtable) {
result.update_tablet_directly_ = true;
LOG_INFO("meet empty force freeze memtable, could update tablet directly", K(ret), K(result));
} else {
ret = OB_NO_NEED_MERGE;
}
} else if (OB_FAIL(refine_mini_merge_result(tablet, result))) {
if (OB_NO_NEED_MERGE != ret) {
LOG_WARN("failed to refine mini merge result", K(ret), K(tablet_id));
@ -1010,9 +1019,6 @@ int ObPartitionMergePolicy::refine_mini_merge_result(
if (OB_UNLIKELY(!table_store.is_valid())) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("Table store not valid", K(ret), K(table_store));
} else if (result.handle_.empty()){
ret = OB_NO_NEED_MERGE;
// LOG_WARN("no need mini merge", K(ret), K(result), K(table_store));
} else if (OB_ISNULL(last_table = table_store.get_minor_sstables().get_boundary_table(true/*last*/))) {
// no minor sstable, skip to cut memtable's boundary
} else if (result.log_ts_range_.start_log_ts_ > last_table->get_end_log_ts()) {