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), sstable_array_pos_(-1),
ls_iter_guard_(), ls_iter_guard_(),
tablet_handle_(), tablet_handle_(),
table_store_wrapper_(),
mgr_handle_(), mgr_handle_(),
memtable_handles_(), memtable_handles_(),
sstable_handles_() sstable_handles_()
@ -162,7 +163,7 @@ int ObAllVirtualTxDataTable::get_next_tx_data_table_(ObITable *&tx_data_table)
sstable_handles_.reset(); sstable_handles_.reset();
tablet_handle_.reset(); tablet_handle_.reset();
mgr_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_FAIL(ls_iter_guard_->get_next(ls))) {
if (OB_ITER_END != ret) { 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_))) { } 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)); SERVER_LOG(WARN, "fail to get tx data tablet", KR(ret));
} else if (FALSE_IT(tablet = tablet_handle_.get_obj())) { } 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)); SERVER_LOG(WARN, "fail to fetch table store", K(ret));
} else if (OB_FAIL( } 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)); SERVER_LOG(WARN, "fail to get sstable handles", KR(ret));
} else { } else {
// iterate from the newest memtable in memtable handles // iterate from the newest memtable in memtable handles

View File

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

View File

@ -40,6 +40,7 @@ public:
ObTabletMemberWrapper(); ObTabletMemberWrapper();
~ObTabletMemberWrapper() = default; ~ObTabletMemberWrapper() = default;
public: public:
void reset();
bool is_valid() const; bool is_valid() const;
int get_member(const T *&t) const; int get_member(const T *&t) const;
const T *get_member() 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> template <typename T, typename U>
bool ObTabletMemberWrapper<T, U>::is_valid() const bool ObTabletMemberWrapper<T, U>::is_valid() const
{ {