fix virtual tx data table sstable lifetime

This commit is contained in:
saltonz
2023-07-31 13:48:18 +00:00
committed by ob-robot
parent 559145f72d
commit 19e893bc3f
3 changed files with 13 additions and 3 deletions

View File

@ -29,6 +29,7 @@ ObAllVirtualTxDataTable::ObAllVirtualTxDataTable()
sstable_array_pos_(-1),
ls_iter_guard_(),
tablet_handle_(),
table_store_wrapper_(),
mgr_handle_(),
memtable_handles_(),
sstable_handles_()
@ -162,7 +163,7 @@ int ObAllVirtualTxDataTable::get_next_tx_data_table_(ObITable *&tx_data_table)
sstable_handles_.reset();
tablet_handle_.reset();
mgr_handle_.reset();
ObTabletMemberWrapper<ObTabletTableStore> table_store_wrapper;
table_store_wrapper_.reset();
if (OB_FAIL(ls_iter_guard_->get_next(ls))) {
if (OB_ITER_END != ret) {
@ -177,10 +178,10 @@ int ObAllVirtualTxDataTable::get_next_tx_data_table_(ObITable *&tx_data_table)
} else if (OB_FAIL(ls->get_tablet_svr()->get_tablet(LS_TX_DATA_TABLET, tablet_handle_))) {
SERVER_LOG(WARN, "fail to get tx data tablet", KR(ret));
} else if (FALSE_IT(tablet = tablet_handle_.get_obj())) {
} else if (OB_FAIL(tablet->fetch_table_store(table_store_wrapper))) {
} else if (OB_FAIL(tablet->fetch_table_store(table_store_wrapper_))) {
SERVER_LOG(WARN, "fail to fetch table store", K(ret));
} else if (OB_FAIL(
table_store_wrapper.get_member()->get_minor_sstables().get_all_tables(sstable_handles_))) {
table_store_wrapper_.get_member()->get_minor_sstables().get_all_tables(sstable_handles_))) {
SERVER_LOG(WARN, "fail to get sstable handles", KR(ret));
} else {
// iterate from the newest memtable in memtable handles

View File

@ -78,6 +78,7 @@ private:
int64_t sstable_array_pos_;
ObSharedGuard<storage::ObLSIterator> ls_iter_guard_;
ObTabletHandle tablet_handle_;
ObTabletMemberWrapper<ObTabletTableStore> table_store_wrapper_;
ObMemtableMgrHandle mgr_handle_;
common::ObSEArray<ObTableHandleV2, 1> memtable_handles_;
common::ObSEArray<ObITable *, 8> sstable_handles_;

View File

@ -40,6 +40,7 @@ public:
ObTabletMemberWrapper();
~ObTabletMemberWrapper() = default;
public:
void reset();
bool is_valid() const;
int get_member(const T *&t) const;
const T *get_member() const;
@ -61,6 +62,13 @@ ObTabletMemberWrapper<T, U>::ObTabletMemberWrapper()
{
}
template <typename T, typename U>
void ObTabletMemberWrapper<T, U>::reset()
{
ptr_ = nullptr;
secondary_meta_handle_.reset();
};
template <typename T, typename U>
bool ObTabletMemberWrapper<T, U>::is_valid() const
{