fix builder trim empty roots when rewriting macro blocks

This commit is contained in:
obdev 2023-11-28 17:11:45 +00:00 committed by ob-robot
parent 3dfd2fff98
commit c9d2d3bdf5
2 changed files with 19 additions and 1 deletions

View File

@ -828,7 +828,22 @@ TEST_F(TestIndexTree, test_empty_index_tree)
ASSERT_EQ(OB_SUCCESS, data_writer.open(data_desc.get_desc(), data_seq));
// do not insert any data
ASSERT_EQ(OB_SUCCESS, data_writer.close());
ASSERT_EQ(1, sstable_builder.roots_.count());
ObSSTableMergeRes res;
ret = sstable_builder.close(res);
ASSERT_EQ(0, sstable_builder.roots_.count());
ASSERT_EQ(OB_SUCCESS, ret);
ASSERT_TRUE(res.root_desc_.is_empty());
// test rebuild macro blocks
ASSERT_EQ(OB_SUCCESS, data_writer.open(data_desc.get_desc(), data_seq));
// do not insert any data
ASSERT_EQ(OB_SUCCESS, data_writer.close());
ASSERT_EQ(1, sstable_builder.roots_.count());
ObSSTableIndexBuilder::ObMacroMetaIter macro_iter;
sstable_builder.init_meta_iter(macro_iter);
ASSERT_EQ(0, sstable_builder.roots_.count());
ret = sstable_builder.close(res);
ASSERT_EQ(OB_SUCCESS, ret);
ASSERT_TRUE(res.root_desc_.is_empty());

View File

@ -689,7 +689,10 @@ int ObSSTableIndexBuilder::init_meta_iter(ObMacroMetaIter &iter)
if (IS_NOT_INIT) {
ret = OB_NOT_INIT;
STORAGE_LOG(WARN, "invalid sstable builder", K(ret), K_(is_inited));
} else if (FALSE_IT(sort_roots())) {
} else if (OB_FAIL(trim_empty_roots())) {
STORAGE_LOG(WARN, "fail to trim empty roots", K(ret));
} else if (OB_FAIL(sort_roots())) {
STORAGE_LOG(WARN, "fail to sort roots", K(ret));
} else if (OB_FAIL(iter.init(roots_, index_store_desc_.get_desc().is_cg()))) {
STORAGE_LOG(WARN, "fail to init iter", K(ret));
}