fix virtual tx data table sstable lifetime
This commit is contained in:
@ -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
|
||||||
|
@ -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_;
|
||||||
|
@ -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
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user