[CP] fix hash join hang leads mem leak

This commit is contained in:
obdev
2022-06-24 10:32:22 +08:00
committed by wangzelin.wzl
parent fe6e40168b
commit e44cddde95
5 changed files with 12 additions and 6 deletions

View File

@ -831,7 +831,7 @@ int ObChunkDatumStore::add_row(const common::ObIArray<ObExpr*>& exprs, ObEvalCtx
if (NULL == cur_blk_) {
int64_t min_buf_size = 0;
Block* new_blk = nullptr;
if (OB_FAIL(Block::min_buf_size(exprs, *ctx, min_buf_size))) {
if (OB_FAIL(Block::min_buf_size(exprs, row_extend_size_, *ctx, min_buf_size))) {
} else if (OB_FAIL(alloc_block_buffer(new_blk, min_buf_size, false))) {
LOG_WARN("alloc block failed", K(ret));
} else {
@ -844,7 +844,7 @@ int ObChunkDatumStore::add_row(const common::ObIArray<ObExpr*>& exprs, ObEvalCtx
if (OB_FAIL(cur_blk_->append_row(exprs, ctx, cur_blk_buffer_, row_extend_size_, stored_row))) {
if (OB_BUF_NOT_ENOUGH == ret) {
int64_t min_buf_size = 0;
if (OB_FAIL(Block::min_buf_size(exprs, *ctx, min_buf_size))) {
if (OB_FAIL(Block::min_buf_size(exprs, row_extend_size_, *ctx, min_buf_size))) {
} else if (OB_FAIL(switch_block(min_buf_size))) {
if (OB_EXCEED_MEM_LIMIT != ret) {
LOG_WARN("switch block failed", K(ret));

View File

@ -307,14 +307,14 @@ public:
Block() : magic_(0), blk_size_(0), rows_(0)
{}
static int inline min_buf_size(const common::ObIArray<ObExpr*>& exprs, ObEvalCtx& ctx, int64_t& size)
static int inline min_buf_size(const common::ObIArray<ObExpr*>& exprs, int64_t row_extend_size, ObEvalCtx& ctx, int64_t& size)
{
int ret = OB_SUCCESS;
size = 0;
if (OB_FAIL(row_store_size(exprs, ctx, size))) {
SQL_ENG_LOG(WARN, "failed to calc store row size", K(ret));
} else {
size += BlockBuffer::HEAD_SIZE + sizeof(BlockBuffer);
size += BlockBuffer::HEAD_SIZE + sizeof(BlockBuffer) + row_extend_size;
}
return ret;
}