fix direct load memory leak when an error occurs
This commit is contained in:
@ -848,6 +848,7 @@ int ObTableLoadStore::px_start_trans(const ObTableLoadTransId &trans_id)
|
|||||||
ret = OB_NOT_SUPPORTED;
|
ret = OB_NOT_SUPPORTED;
|
||||||
LOG_WARN("not support trans id", KR(ret), K(trans_id), K(param_.session_count_));
|
LOG_WARN("not support trans id", KR(ret), K(trans_id), K(param_.session_count_));
|
||||||
} else {
|
} else {
|
||||||
|
LOG_INFO("store px start trans", K(trans_id));
|
||||||
ObTableLoadStoreTrans *trans = nullptr;
|
ObTableLoadStoreTrans *trans = nullptr;
|
||||||
if (OB_FAIL(store_ctx_->start_trans(trans_id, trans))) {
|
if (OB_FAIL(store_ctx_->start_trans(trans_id, trans))) {
|
||||||
LOG_WARN("fail to start trans", KR(ret), K(trans_id));
|
LOG_WARN("fail to start trans", KR(ret), K(trans_id));
|
||||||
|
|||||||
@ -112,32 +112,31 @@ int ObTableDirectInsertService::close_task(const uint64_t table_id,
|
|||||||
const int error_code)
|
const int error_code)
|
||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
if (OB_SUCC(error_code)) {
|
ObTableLoadTableCtx *table_ctx = nullptr;
|
||||||
ObTableLoadTableCtx *table_ctx = nullptr;
|
ObTableLoadKey key(MTL_ID(), table_id);
|
||||||
ObTableLoadKey key(MTL_ID(), table_id);
|
if (OB_FAIL(ObTableLoadService::get_ctx(key, table_ctx))) {
|
||||||
if (OB_FAIL(ObTableLoadService::get_ctx(key, table_ctx))) {
|
LOG_WARN("fail to get table ctx", KR(ret), K(key), K(table_id));
|
||||||
LOG_WARN("fail to get table ctx", KR(ret), K(key), K(table_id));
|
} else {
|
||||||
} else {
|
table::ObTableLoadTransId trans_id;
|
||||||
table::ObTableLoadTransId trans_id;
|
trans_id.segment_id_ = task_id;
|
||||||
trans_id.segment_id_ = task_id;
|
trans_id.trans_gid_ = 1;
|
||||||
trans_id.trans_gid_ = 1;
|
if (OB_SUCC(error_code)) {
|
||||||
ObTableLoadStore store(table_ctx);
|
ObTableLoadStore store(table_ctx);
|
||||||
if (OB_FAIL(store.init())) {
|
if (OB_FAIL(store.init())) {
|
||||||
LOG_WARN("fail to init store", KR(ret));
|
LOG_WARN("fail to init store", KR(ret));
|
||||||
} else if (OB_FAIL(store.px_finish_trans(trans_id))) {
|
} else if (OB_FAIL(store.px_finish_trans(trans_id))) {
|
||||||
LOG_WARN("fail to finish direct load trans", KR(ret), K(trans_id));
|
LOG_WARN("fail to finish direct load trans", KR(ret), K(trans_id));
|
||||||
}
|
}
|
||||||
if (OB_FAIL(ret)) {
|
}
|
||||||
int tmp_ret = OB_SUCCESS;
|
if (OB_FAIL(ret)) {
|
||||||
if (OB_TMP_FAIL(ObTableLoadStore::px_abandon_trans(table_ctx, trans_id))) {
|
if (OB_FAIL(ObTableLoadStore::px_abandon_trans(table_ctx, trans_id))) {
|
||||||
LOG_WARN("fail to abandon direct load trans", KR(tmp_ret), K(trans_id));
|
LOG_WARN("fail to abandon direct load trans", KR(ret), K(trans_id));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (OB_NOT_NULL(table_ctx)) {
|
}
|
||||||
ObTableLoadService::put_ctx(table_ctx);
|
if (OB_NOT_NULL(table_ctx)) {
|
||||||
table_ctx = nullptr;
|
ObTableLoadService::put_ctx(table_ctx);
|
||||||
}
|
table_ctx = nullptr;
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user