From 64dc3b360f98ec2d7d7298419819bae607c5ddae Mon Sep 17 00:00:00 2001 From: Pxl Date: Fri, 19 Aug 2022 19:11:10 +0800 Subject: [PATCH] [Bug](function) fix dcheck fail on close vexpr ctx (#11908) --- be/src/exec/exec_node.cpp | 7 +++++-- be/src/exec/scan_node.cpp | 1 + be/src/vec/exec/join/vhash_join_node.cpp | 5 +++-- be/src/vec/exec/ves_http_scan_node.cpp | 10 ++-------- be/src/vec/exec/ves_http_scan_node.h | 1 + be/src/vec/exprs/vexpr_context.cpp | 1 - 6 files changed, 12 insertions(+), 13 deletions(-) diff --git a/be/src/exec/exec_node.cpp b/be/src/exec/exec_node.cpp index f581a11c40..5c4981c739 100644 --- a/be/src/exec/exec_node.cpp +++ b/be/src/exec/exec_node.cpp @@ -272,7 +272,9 @@ Status ExecNode::close(RuntimeState* state) { } } - if (_vconjunct_ctx_ptr) (*_vconjunct_ctx_ptr)->close(state); + if (_vconjunct_ctx_ptr) { + (*_vconjunct_ctx_ptr)->close(state); + } if (typeid(*this) != typeid(doris::vectorized::VOlapScanNode)) { Expr::close(_conjunct_ctxs, state); } @@ -428,8 +430,9 @@ Status ExecNode::create_node(RuntimeState* state, ObjectPool* pool, const TPlanN case TPlanNodeType::ODBC_SCAN_NODE: if (state->enable_vectorized_exec()) { *node = pool->add(new vectorized::VOdbcScanNode(pool, tnode, descs)); - } else + } else { *node = pool->add(new OdbcScanNode(pool, tnode, descs)); + } return Status::OK(); case TPlanNodeType::ES_HTTP_SCAN_NODE: diff --git a/be/src/exec/scan_node.cpp b/be/src/exec/scan_node.cpp index 63197327a4..2b8bb6b5cf 100644 --- a/be/src/exec/scan_node.cpp +++ b/be/src/exec/scan_node.cpp @@ -62,6 +62,7 @@ void ScanNode::_peel_pushed_vconjunct(RuntimeState* state, vectorized::VExpr* new_conjunct_expr_root = vectorized::VectorizedUtils::dfs_peel_conjunct( state, *_vconjunct_ctx_ptr, conjunct_expr_root, leaf_index, checker); if (new_conjunct_expr_root == nullptr) { + (*_vconjunct_ctx_ptr)->close(state); _vconjunct_ctx_ptr.reset(nullptr); } else { (*_vconjunct_ctx_ptr)->set_root(new_conjunct_expr_root); diff --git a/be/src/vec/exec/join/vhash_join_node.cpp b/be/src/vec/exec/join/vhash_join_node.cpp index 4fc36fd5ba..d27c0aea06 100644 --- a/be/src/vec/exec/join/vhash_join_node.cpp +++ b/be/src/vec/exec/join/vhash_join_node.cpp @@ -22,7 +22,6 @@ #include "runtime/memory/mem_tracker.h" #include "runtime/runtime_filter_mgr.h" #include "util/defer_op.h" -#include "vec/core/materialize_block.h" #include "vec/data_types/data_type_number.h" #include "vec/exprs/vexpr.h" #include "vec/exprs/vexpr_context.h" @@ -1475,7 +1474,9 @@ Status HashJoinNode::_build_output_block(Block* origin_block, Block* output_bloc } } - if (!is_mem_reuse) output_block->swap(mutable_block.to_block()); + if (!is_mem_reuse) { + output_block->swap(mutable_block.to_block()); + } DCHECK(output_block->rows() == rows); } diff --git a/be/src/vec/exec/ves_http_scan_node.cpp b/be/src/vec/exec/ves_http_scan_node.cpp index b05ca0d8e7..94b2c548c5 100644 --- a/be/src/vec/exec/ves_http_scan_node.cpp +++ b/be/src/vec/exec/ves_http_scan_node.cpp @@ -24,12 +24,8 @@ #include "exprs/expr_context.h" #include "gen_cpp/PlanNodes_types.h" #include "runtime/runtime_state.h" -#include "runtime/string_value.h" -#include "runtime/tuple.h" #include "runtime/tuple_row.h" #include "util/runtime_profile.h" -#include "util/types.h" -#include "vec/exprs/vexpr_context.h" namespace doris::vectorized { @@ -352,16 +348,14 @@ Status VEsHttpScanNode::close(RuntimeState* state) { _scanner_threads[i].join(); } - _batch_queue.clear(); - //don't need to hold lock to update_status in close function //collect scanners status update_status(collect_scanners_status()); - //close exec node - update_status(ExecNode::close(state)); + _batch_queue.clear(); _block_queue.clear(); + RETURN_IF_ERROR(ScanNode::close(state)); return _process_status; } diff --git a/be/src/vec/exec/ves_http_scan_node.h b/be/src/vec/exec/ves_http_scan_node.h index 92294d0e17..cd42a573e4 100644 --- a/be/src/vec/exec/ves_http_scan_node.h +++ b/be/src/vec/exec/ves_http_scan_node.h @@ -23,6 +23,7 @@ #include "exec/scan_node.h" #include "runtime/descriptors.h" #include "vec/exec/ves_http_scanner.h" + namespace doris { class RuntimeState; diff --git a/be/src/vec/exprs/vexpr_context.cpp b/be/src/vec/exprs/vexpr_context.cpp index da4a3a96eb..d6a64c9d9b 100644 --- a/be/src/vec/exprs/vexpr_context.cpp +++ b/be/src/vec/exprs/vexpr_context.cpp @@ -17,7 +17,6 @@ #include "vec/exprs/vexpr_context.h" -#include "runtime/thread_context.h" #include "udf/udf_internal.h" #include "vec/exprs/vexpr.h"