fix empty shell cannot be washed
This commit is contained in:
parent
aede9be0db
commit
c83b726c71
@ -686,6 +686,35 @@ TEST_F(TestLSTabletService, test_replay_empty_shell)
|
||||
ObTabletMemberWrapper<ObTabletTableStore> wrapper;
|
||||
test_tablet_handle.get_obj()->fetch_table_store(wrapper);
|
||||
ASSERT_EQ(nullptr, wrapper.get_member()->get_major_sstables().get_boundary_table(true));
|
||||
ObMetaDiskAddr tablet_addr = test_tablet_handle.get_obj()->tablet_addr_;
|
||||
|
||||
// validate that empty shell can be washed
|
||||
ObTabletHandle normal_tablet_hdl;
|
||||
void *free_obj = nullptr;
|
||||
ObTabletPointer *tablet_ptr = test_tablet_handle.get_obj()->pointer_hdl_.get_resource_ptr();
|
||||
ObTablet *empty_tablet = test_tablet_handle.get_obj();
|
||||
test_tablet_handle.reset(); // release the ref cnt of tablet
|
||||
ret = tablet_ptr->dump_meta_obj(normal_tablet_hdl, free_obj);
|
||||
ASSERT_EQ(OB_SUCCESS, ret);
|
||||
ASSERT_NE(nullptr, free_obj);
|
||||
ASSERT_EQ((char *)(empty_tablet), (char *)(free_obj)+32); // 32Bytes header
|
||||
|
||||
// gc empty tablet
|
||||
ObTenantMetaMemMgr *t3m = MTL(ObTenantMetaMemMgr *);
|
||||
ret = t3m->gc_tablet(empty_tablet);
|
||||
ASSERT_EQ(OB_SUCCESS, ret);
|
||||
bool cleared = false;
|
||||
ret = t3m->gc_tablets_in_queue(cleared);
|
||||
ASSERT_EQ(OB_SUCCESS, ret);
|
||||
ASSERT_TRUE(cleared);
|
||||
|
||||
|
||||
// test load empty tablet
|
||||
ret = ls_handle.get_ls()->get_tablet_svr()->get_tablet(tablet_id, test_tablet_handle, 0, ObMDSGetTabletMode::READ_WITHOUT_CHECK);
|
||||
ASSERT_EQ(OB_SUCCESS, ret);
|
||||
test_tablet_handle.get_obj()->fetch_table_store(wrapper);
|
||||
ASSERT_EQ(nullptr, wrapper.get_member()->get_major_sstables().get_boundary_table(true));
|
||||
ASSERT_EQ(tablet_addr, test_tablet_handle.get_obj()->tablet_addr_);
|
||||
|
||||
ObTabletMapKey key(ls_id_, tablet_id);
|
||||
ret = ls_tablet_service_->do_remove_tablet(key);
|
||||
|
@ -314,8 +314,6 @@ int ObTabletPointer::dump_meta_obj(ObMetaObjGuard<ObTablet> &guard, void *&free_
|
||||
} else if (OB_UNLIKELY(obj_.ptr_->get_ref() < 1)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("unexpected error, tablet ref is less than 1", K(ret), KPC(obj_.ptr_));
|
||||
} else if (OB_UNLIKELY(phy_addr_.is_file())) {
|
||||
LOG_INFO("obj is empty shell, don't be wash", K(ret), K(phy_addr_));
|
||||
} else if (OB_ISNULL(obj_.pool_)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_ERROR("obj is not allocated from pool", K(ret), K(*this));
|
||||
|
Loading…
x
Reference in New Issue
Block a user