From e5faeaaf45ca07ae0cc44a46b973ee1a5873d41b Mon Sep 17 00:00:00 2001 From: jacktengg <18241664+jacktengg@users.noreply.github.com> Date: Wed, 7 Jun 2023 11:14:21 +0800 Subject: [PATCH] [fix](olapscanner) fix coredump caused by concurrent acccess of olap scan node _conjuncts --- be/src/vec/exec/scan/new_olap_scan_node.cpp | 1 + be/src/vec/exec/scan/new_olap_scanner.cpp | 5 ++++- be/src/vec/exec/scan/new_olap_scanner.h | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/be/src/vec/exec/scan/new_olap_scan_node.cpp b/be/src/vec/exec/scan/new_olap_scan_node.cpp index a5a18a97ddf7c9..ac916bfcd14e0c 100644 --- a/be/src/vec/exec/scan/new_olap_scan_node.cpp +++ b/be/src/vec/exec/scan/new_olap_scan_node.cpp @@ -513,6 +513,7 @@ Status NewOlapScanNode::_init_scanners(std::list* scanners) { key_ranges, rs_readers, rs_reader_seg_offsets, _need_agg_finalize, _scanner_profile.get()); + RETURN_IF_ERROR(scanner->prepare(_state, _conjuncts)); scanner->set_compound_filters(_compound_filters); scanners->push_back(scanner); return Status::OK(); diff --git a/be/src/vec/exec/scan/new_olap_scanner.cpp b/be/src/vec/exec/scan/new_olap_scanner.cpp index f87c247ea9c993..3537f9b1948600 100644 --- a/be/src/vec/exec/scan/new_olap_scanner.cpp +++ b/be/src/vec/exec/scan/new_olap_scanner.cpp @@ -103,10 +103,13 @@ static std::string read_columns_to_string(TabletSchemaSPtr tablet_schema, return read_columns_string; } +Status NewOlapScanner::prepare(RuntimeState* state, const VExprContextSPtrs& conjuncts) { + return VScanner::prepare(state, conjuncts); +} + Status NewOlapScanner::init() { _is_init = true; auto parent = static_cast(_parent); - RETURN_IF_ERROR(VScanner::prepare(_state, parent->_conjuncts)); for (auto& ctx : parent->_common_expr_ctxs_push_down) { VExprContextSPtr context; diff --git a/be/src/vec/exec/scan/new_olap_scanner.h b/be/src/vec/exec/scan/new_olap_scanner.h index 29178c12856d44..28adc4d5fe488e 100644 --- a/be/src/vec/exec/scan/new_olap_scanner.h +++ b/be/src/vec/exec/scan/new_olap_scanner.h @@ -65,6 +65,8 @@ class NewOlapScanner : public VScanner { Status close(RuntimeState* state) override; + Status prepare(RuntimeState* state, const VExprContextSPtrs& conjuncts); + const std::string& scan_disk() const { return _tablet->data_dir()->path(); } void set_compound_filters(const std::vector& compound_filters);