fix insert oom caused by wrap allocator's interface empty

This commit is contained in:
leslieyuchen
2022-11-13 02:14:32 +08:00
committed by wangzelin.wzl
parent 7f0d609c5f
commit 4c5f2470b8
29 changed files with 423 additions and 496 deletions

View File

@ -355,40 +355,7 @@ int ObTableMergeOp::inner_close()
return (OB_SUCCESS == ret) ? close_ret : ret;
}
int ObTableMergeOp::inner_get_next_row()
{
int ret = OB_SUCCESS;
if (iter_end_) {
LOG_WARN("can't get gi task, iter end", K(MY_SPEC.id_), K(iter_end_));
ret = OB_ITER_END;
} else {
while (OB_SUCC(ret)) {
if (OB_FAIL(try_check_status())) {
LOG_WARN("check status failed", K(ret));
} else if (OB_FAIL(get_next_row_from_child())) {
if (OB_ITER_END != ret) {
LOG_WARN("fail to get next row", K(ret));
} else {
iter_end_ = true;
}
} else if (OB_FAIL(merge_row_to_das())) {
LOG_WARN("merge row to das failed", K(ret));
}
}
if (OB_ITER_END == ret) {
if (OB_FAIL(merge_rows_post_proc())) {
LOG_WARN("do insert rows post process failed", K(ret));
} else {
ret = OB_ITER_END;
}
}
}
return ret;
}
int ObTableMergeOp::merge_row_to_das()
int ObTableMergeOp::write_row_to_das_buffer()
{
int ret = OB_SUCCESS;
bool is_match = false;
@ -408,26 +375,18 @@ int ObTableMergeOp::merge_row_to_das()
return ret;
}
int ObTableMergeOp::merge_rows_post_proc()
int ObTableMergeOp::write_rows_post_proc(int last_errno)
{
int ret = OB_SUCCESS;
ObPhysicalPlanCtx *plan_ctx = GET_PHY_PLAN_CTX(ctx_);
//iterator end, if das ref has task, need flush all task data to partition storage
if (OB_ISNULL(plan_ctx)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("plan_ctx is null", K(ret));
} else if (OB_FAIL(dml_rtctx_.das_ref_.pick_del_task_to_first())) {
LOG_WARN("pick delete das task to first failed", K(ret));
} else if (OB_FAIL(submit_all_dml_task())) {
LOG_WARN("submit all dml task failed", K(ret));
} else if (OB_FAIL(dml_rtctx_.das_ref_.close_all_task())) {
LOG_WARN("close all das task failed", K(ret));
} else {
dml_rtctx_.reuse();
}
if (OB_SUCC(ret)) {
plan_ctx->add_affected_rows(affected_rows_);
if (OB_SUCC(last_errno) && iter_end_) {
if (OB_ISNULL(plan_ctx)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("plan_ctx is null", K(ret));
} else {
plan_ctx->add_affected_rows(affected_rows_);
}
}
return ret;
}
@ -623,20 +582,6 @@ int ObTableMergeOp::do_insert()
return ret;
}
OB_INLINE int ObTableMergeOp::get_next_row_from_child()
{
int ret = OB_SUCCESS;
clear_evaluated_flag();
if (OB_FAIL(child_->get_next_row())) {
if (OB_ITER_END != ret) {
LOG_WARN("fail to get next row", K(ret));
}
} else {
LOG_TRACE("child output row", "row", ROWEXPR2STR(eval_ctx_, child_->get_spec().output_));
}
return ret;
}
int ObTableMergeOp::calc_update_tablet_loc(const ObUpdCtDef &upd_ctdef,
ObUpdRtDef &upd_rtdef,
ObDASTabletLoc *&old_tablet_loc,