[CP] [Bugfix]fix htable query memory leak

This commit is contained in:
WeiXinChan 2023-09-20 14:34:14 +00:00 committed by ob-robot
parent 5813fbd504
commit 055b14bc3a
7 changed files with 13 additions and 0 deletions

View File

@ -362,6 +362,7 @@ int ObHTableDeleteExecutor::query_and_delete(const ObTableQuery &query)
LOG_WARN("fail to close row iterator", K(tmp_ret));
ret = COVER_SUCC(tmp_ret);
}
ObTableQueryUtils::destroy_result_iterator(result_iter);
return ret;
}

View File

@ -1027,6 +1027,7 @@ int ObTableQueryAndMutateP::try_process()
scan_spec->destroy_executor(executor);
tb_ctx_.set_expr_info(nullptr);
}
ObTableQueryUtils::destroy_result_iterator(result_iterator);
}
bool need_rollback_trans = (OB_SUCCESS != ret);

View File

@ -139,6 +139,13 @@ int ObTableQueryUtils::generate_query_result_iterator(ObIAllocator &allocator,
return ret;
}
void ObTableQueryUtils::destroy_result_iterator(ObTableQueryResultIterator *result_iter)
{
if (OB_NOT_NULL(result_iter)) {
result_iter->~ObTableQueryResultIterator();
}
}
int ObTableQueryUtils::get_rowkey_column_names(const ObTableSchema &table_schema, ObIArray<ObString> &names)
{
int ret = OB_SUCCESS;

View File

@ -30,6 +30,7 @@ public:
ObTableQueryResult &one_result,
const ObTableCtx &tb_ctx,
ObTableQueryResultIterator *&result_iter);
static void destroy_result_iterator(ObTableQueryResultIterator *result_iter);
static int get_rowkey_column_names(const ObTableSchema &table_schema, ObIArray<ObString> &names);
static int get_full_column_names(const ObTableSchema &table_schema, ObIArray<ObString> &names);

View File

@ -229,6 +229,7 @@ int ObTableQueryP::query_and_result(ObTableApiScanExecutor *executor)
LOG_WARN("fail to close row iter", K(tmp_ret));
ret = COVER_SUCC(tmp_ret);
}
ObTableQueryUtils::destroy_result_iterator(result_iter);
LOG_DEBUG("last result", K(ret), "row_count", result_.get_row_count());
NG_TRACE_EXT(tag1, OB_ID(return_rows), result_count, OB_ID(arg2), result_row_count_);

View File

@ -643,6 +643,7 @@ int ObTableQuerySyncP::destory_query_session(bool need_rollback_trans)
} else if (OB_FAIL(ObQuerySyncMgr::get_instance().get_query_session_map()->erase_refactored(query_session_id_))) {
LOG_WARN("fail to erase query session from query sync mgr", K(ret));
} else {
ObTableQueryUtils::destroy_result_iterator(query_session_->get_result_iter());
OB_DELETE(ObTableQuerySyncSession, ObModIds::TABLE_PROC, query_session_);
LOG_DEBUG("destory query session success", K(ret), K(query_session_id_));
}

View File

@ -75,6 +75,7 @@ public:
~ObTableQuerySyncSession();
void set_result_iterator(table::ObTableQueryResultIterator* iter);
table::ObTableQueryResultIterator *get_result_iter() { return result_iterator_; };
void set_in_use(bool in_use) {in_use_ = in_use;}
bool is_in_use() {return in_use_;}
int init();