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));
 | 
					  ASSERT_EQ(OB_SUCCESS, data_writer.open(data_desc.get_desc(), data_seq));
 | 
				
			||||||
  // do not insert any data
 | 
					  // do not insert any data
 | 
				
			||||||
  ASSERT_EQ(OB_SUCCESS, data_writer.close());
 | 
					  ASSERT_EQ(OB_SUCCESS, data_writer.close());
 | 
				
			||||||
 | 
					  ASSERT_EQ(1, sstable_builder.roots_.count());
 | 
				
			||||||
  ObSSTableMergeRes res;
 | 
					  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);
 | 
					  ret = sstable_builder.close(res);
 | 
				
			||||||
  ASSERT_EQ(OB_SUCCESS, ret);
 | 
					  ASSERT_EQ(OB_SUCCESS, ret);
 | 
				
			||||||
  ASSERT_TRUE(res.root_desc_.is_empty());
 | 
					  ASSERT_TRUE(res.root_desc_.is_empty());
 | 
				
			||||||
 | 
				
			|||||||
@ -689,7 +689,10 @@ int ObSSTableIndexBuilder::init_meta_iter(ObMacroMetaIter &iter)
 | 
				
			|||||||
  if (IS_NOT_INIT) {
 | 
					  if (IS_NOT_INIT) {
 | 
				
			||||||
    ret = OB_NOT_INIT;
 | 
					    ret = OB_NOT_INIT;
 | 
				
			||||||
    STORAGE_LOG(WARN, "invalid sstable builder", K(ret), K_(is_inited));
 | 
					    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()))) {
 | 
					  } else if (OB_FAIL(iter.init(roots_, index_store_desc_.get_desc().is_cg()))) {
 | 
				
			||||||
    STORAGE_LOG(WARN, "fail to init iter", K(ret));
 | 
					    STORAGE_LOG(WARN, "fail to init iter", K(ret));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user