check continuous logic macro block id on building index tree

This commit is contained in:
saltonz
2023-04-13 09:51:26 +00:00
committed by ob-robot
parent 75a7b5ec3f
commit 6abc8da479

View File

@ -670,6 +670,7 @@ int ObSSTableIndexBuilder::merge_index_tree(ObSSTableMergeRes &res)
} else {
const int64_t curr_logical_version = index_store_desc_.get_logical_version();
ObIndexBlockRowDesc row_desc(data_desc);
ObLogicMacroBlockId prev_logic_id;
for (int64_t i = 0; OB_SUCC(ret) && i < roots_.count(); ++i) {
ObMacroMetasArray *macro_metas = roots_[i]->macro_metas_;
for (int64_t j = 0; OB_SUCC(ret) && j < macro_metas->count(); ++j) {
@ -677,8 +678,15 @@ int ObSSTableIndexBuilder::merge_index_tree(ObSSTableMergeRes &res)
if (OB_ISNULL(macro_meta)) {
ret = OB_ERR_UNEXPECTED;
STORAGE_LOG(WARN, "unexpected null macro meta", K(ret), K(j), KPC(roots_.at(i)));
} else if (OB_UNLIKELY(macro_meta->get_logic_id() == prev_logic_id)) {
// Since we rely on upper stream of sstable writing process to ensure the uniqueness of logic id
// and we don't want more additional memory/time consumption, we only check continuous ids here
ret = OB_ERR_UNEXPECTED;
STORAGE_LOG(ERROR, "unexpected duplicate logic macro id", K(ret), KPC(macro_meta), K(prev_logic_id));
} else if (OB_FAIL(index_builder_.append_row(*macro_meta, row_desc))) {
STORAGE_LOG(WARN, "fail to append row", K(ret), KPC(macro_meta), K(j), KPC(roots_.at(i)));
} else {
prev_logic_id = macro_meta->get_logic_id();
}
}
}