diff --git a/mittest/mtlenv/storage/blocksstable/test_index_tree.cpp b/mittest/mtlenv/storage/blocksstable/test_index_tree.cpp index 00a345f5d0..8db60687f6 100644 --- a/mittest/mtlenv/storage/blocksstable/test_index_tree.cpp +++ b/mittest/mtlenv/storage/blocksstable/test_index_tree.cpp @@ -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()); diff --git a/src/storage/blocksstable/index_block/ob_index_block_builder.cpp b/src/storage/blocksstable/index_block/ob_index_block_builder.cpp index 0f4a7746e8..73517cda15 100644 --- a/src/storage/blocksstable/index_block/ob_index_block_builder.cpp +++ b/src/storage/blocksstable/index_block/ob_index_block_builder.cpp @@ -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)); }