fix builder trim empty roots when rewriting macro blocks
This commit is contained in:
		@ -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());
 | 
			
		||||
 | 
			
		||||
@ -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));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user