diff --git a/be/src/vec/exec/volap_scan_node.cpp b/be/src/vec/exec/volap_scan_node.cpp index f0c667f8f4..53e8baee92 100644 --- a/be/src/vec/exec/volap_scan_node.cpp +++ b/be/src/vec/exec/volap_scan_node.cpp @@ -285,6 +285,7 @@ void VOlapScanNode::transfer_thread(RuntimeState* state) { _status = status; break; } + (*(scanner->vconjunct_ctx_ptr()))->debug_valid(); } } @@ -449,6 +450,7 @@ void VOlapScanNode::scanner_thread(VOlapScanner* scanner) { std::shared_lock l(_rf_lock); WARN_IF_ERROR((*_vconjunct_ctx_ptr)->clone(state, scanner->vconjunct_ctx_ptr()), "Something wrong for runtime filters: "); + (*(scanner->vconjunct_ctx_ptr()))->debug_valid(); } } @@ -1830,6 +1832,7 @@ Status VOlapScanNode::_append_rf_into_conjuncts(RuntimeState* state, std::vector } _vconjunct_ctx_ptr.reset(new doris::vectorized::VExprContext*); *(_vconjunct_ctx_ptr.get()) = new_vconjunct_ctx_ptr; + new_vconjunct_ctx_ptr->debug_valid(); } return Status::OK(); } diff --git a/be/src/vec/exprs/vexpr.cpp b/be/src/vec/exprs/vexpr.cpp index d493a87a65..183406926f 100644 --- a/be/src/vec/exprs/vexpr.cpp +++ b/be/src/vec/exprs/vexpr.cpp @@ -363,4 +363,11 @@ void VExpr::close_function_context(VExprContext* context, FunctionContext::Funct } } +void VExpr::debug_valid(VExprContext* context) { + DCHECK_LT(_fn_context_index, context->get_fn_context_size()); + for (int i = 0; i < _children.size(); ++i) { + _children[i]->debug_valid(context); + } +} + } // namespace doris::vectorized diff --git a/be/src/vec/exprs/vexpr.h b/be/src/vec/exprs/vexpr.h index 9d2d4ce64b..b19a415368 100644 --- a/be/src/vec/exprs/vexpr.h +++ b/be/src/vec/exprs/vexpr.h @@ -157,6 +157,9 @@ public: return nullptr; } + // Just for debug. Should be removed after fixing #11995 + void debug_valid(VExprContext* context); + protected: /// Simple debug string that provides no expr subclass-specific information std::string debug_string(const std::string& expr_name) const { diff --git a/be/src/vec/exprs/vexpr_context.cpp b/be/src/vec/exprs/vexpr_context.cpp index d6a64c9d9b..da0deda56d 100644 --- a/be/src/vec/exprs/vexpr_context.cpp +++ b/be/src/vec/exprs/vexpr_context.cpp @@ -150,4 +150,10 @@ Block VExprContext::get_output_block_after_execute_exprs( return {result_columns}; } +void VExprContext::debug_valid() { +#ifndef NDEBUG + _root->debug_valid(this); +#endif +} + } // namespace doris::vectorized diff --git a/be/src/vec/exprs/vexpr_context.h b/be/src/vec/exprs/vexpr_context.h index b454833ed3..53cfbdb389 100644 --- a/be/src/vec/exprs/vexpr_context.h +++ b/be/src/vec/exprs/vexpr_context.h @@ -76,6 +76,11 @@ public: _stale = true; } + int get_fn_context_size() const { return _fn_contexts.size(); } + + // Just for debug. Should be removed after fixing #11995 + void debug_valid(); + private: friend class VExpr;