[FIX] pre process tx data memtable
This commit is contained in:
@ -60,6 +60,7 @@ int64_t ObTxDataMemtable::PERIODICAL_SELECT_INTERVAL_NS = 10LL;
|
|||||||
int ObTxDataMemtable::get_past_commit_versions_(ObCommitVersionsArray &past_commit_versions)
|
int ObTxDataMemtable::get_past_commit_versions_(ObCommitVersionsArray &past_commit_versions)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
|
ret = past_commit_versions.array_.push_back(ObCommitVersionsArray::Node(SCN::max_scn(), SCN::max_scn()));
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -186,7 +187,6 @@ public:
|
|||||||
|
|
||||||
void do_print_leak_slice_test();
|
void do_print_leak_slice_test();
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void insert_tx_data_();
|
void insert_tx_data_();
|
||||||
void insert_abort_tx_data_();
|
void insert_abort_tx_data_();
|
||||||
|
|||||||
@ -361,6 +361,7 @@ int ObTxDataMemtable::pre_process_commit_version_row_(ObTxData *fake_tx_data)
|
|||||||
STORAGE_LOG(WARN, "periodical select commit version failed.", KR(ret));
|
STORAGE_LOG(WARN, "periodical select commit version failed.", KR(ret));
|
||||||
} else if (OB_FAIL(get_past_commit_versions_(past_commit_versions)/*step 2*/)) {
|
} else if (OB_FAIL(get_past_commit_versions_(past_commit_versions)/*step 2*/)) {
|
||||||
STORAGE_LOG(WARN, "get past commit versions failed.", KR(ret), K(past_commit_versions));
|
STORAGE_LOG(WARN, "get past commit versions failed.", KR(ret), K(past_commit_versions));
|
||||||
|
} else if (FALSE_IT(clear_fake_node_if_exist_(past_commit_versions))) {
|
||||||
} else if (do_recycle_ && OB_FAIL(memtable_mgr_->get_tx_data_table()->get_recycle_scn(recycle_scn) /*step 3*/)) {
|
} else if (do_recycle_ && OB_FAIL(memtable_mgr_->get_tx_data_table()->get_recycle_scn(recycle_scn) /*step 3*/)) {
|
||||||
STORAGE_LOG(WARN, "get recycle ts failed.", KR(ret));
|
STORAGE_LOG(WARN, "get recycle ts failed.", KR(ret));
|
||||||
} else if (OB_FAIL(merge_cur_and_past_commit_verisons_(recycle_scn, cur_commit_versions,/*step 4*/
|
} else if (OB_FAIL(merge_cur_and_past_commit_verisons_(recycle_scn, cur_commit_versions,/*step 4*/
|
||||||
@ -529,6 +530,14 @@ int ObTxDataMemtable::get_past_commit_versions_(ObCommitVersionsArray &past_comm
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ObTxDataMemtable::clear_fake_node_if_exist_(ObCommitVersionsArray &past_commit_versions)
|
||||||
|
{
|
||||||
|
if (1 == past_commit_versions.array_.count() && past_commit_versions.array_.at(0).commit_version_.is_max()) {
|
||||||
|
STORAGE_LOG(INFO, "clear fake commit version node", K(past_commit_versions));
|
||||||
|
past_commit_versions.reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int ObTxDataMemtable::merge_cur_and_past_commit_verisons_(const SCN recycle_scn,
|
int ObTxDataMemtable::merge_cur_and_past_commit_verisons_(const SCN recycle_scn,
|
||||||
ObCommitVersionsArray &cur_commit_versions,
|
ObCommitVersionsArray &cur_commit_versions,
|
||||||
ObCommitVersionsArray &past_commit_versions,
|
ObCommitVersionsArray &past_commit_versions,
|
||||||
@ -619,7 +628,6 @@ int ObTxDataMemtable::merge_pre_process_node_(const int64_t step_len,
|
|||||||
STORAGE_LOG(WARN, "push back commit version node failed.", KR(ret), KPC(this));
|
STORAGE_LOG(WARN, "push back commit version node failed.", KR(ret), KPC(this));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -396,6 +396,7 @@ private: // ObTxDataMemtable
|
|||||||
ObCommitVersionsArray::Node &node);
|
ObCommitVersionsArray::Node &node);
|
||||||
|
|
||||||
int get_past_commit_versions_(ObCommitVersionsArray &past_commit_versions);
|
int get_past_commit_versions_(ObCommitVersionsArray &past_commit_versions);
|
||||||
|
void clear_fake_node_if_exist_(ObCommitVersionsArray &past_commit_versions);
|
||||||
|
|
||||||
int merge_cur_and_past_commit_verisons_(const share::SCN recycle_scn,
|
int merge_cur_and_past_commit_verisons_(const share::SCN recycle_scn,
|
||||||
ObCommitVersionsArray &cur_commit_versions,
|
ObCommitVersionsArray &cur_commit_versions,
|
||||||
|
|||||||
Reference in New Issue
Block a user