From b79c5b21709c001e3cc53746a18b8c67c0f01696 Mon Sep 17 00:00:00 2001 From: Gabriel Date: Thu, 13 Feb 2025 14:47:45 +0800 Subject: [PATCH] [fix](scanner) fix shared rowset reader in different scanners (#47744) *** Query id: b7482b4d3ab94bcf-acdb53e8a8fcff81 *** *** is nereids: 1 *** *** tablet id: 0 *** *** Aborted at 1739024048 (unix time) try "date -d @1739024048" if you are using GNU date *** *** Current BE git commitID: a733a56648 *** *** SIGSEGV address not mapped to object (@0x0) received by PID 5943 (TID 7905 OR 0x7fd0b0c80640) from PID 0; stack trace: *** 0# doris::signal::(anonymous namespace)::FailureSignalHandler(int, siginfo_t*, void*) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/common/signal_handler.h:421 1# PosixSignals::chained_handler(int, siginfo*, void*) [clone .part.0] in /usr/lib/jvm/java-17-openjdk-amd64/lib/server/libjvm.so 2# JVM_handle_linux_signal in /usr/lib/jvm/java-17-openjdk-amd64/lib/server/libjvm.so 3# 0x00007FD4985D8520 in /lib/x86_64-linux-gnu/libc.so.6 4# doris::segment_v2::FileColumnIterator::next_batch(unsigned long*, COW::mutable_ptr&, bool*) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/olap/rowset/segment_v2/column_reader.cpp:1271 5# doris::segment_v2::SegmentIterator::_read_columns(std::vector > const&, std::vector::mutable_ptr, std::allocator::mutable_ptr > >&, unsigned long) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/olap/rowset/segment_v2/segment_iterator.cpp:1575 6# doris::segment_v2::SegmentIterator::_seek_and_peek(unsigned int) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/olap/rowset/segment_v2/segment_iterator.cpp:1253 7# doris::segment_v2::SegmentIterator::_lookup_ordinal_from_sk_index(doris::RowCursor const&, bool, unsigned int, unsigned int*) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/olap/rowset/segment_v2/segment_iterator.cpp:1148 8# doris::segment_v2::SegmentIterator::_get_row_ranges_by_keys() at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/olap/rowset/segment_v2/segment_iterator.cpp:432 9# doris::segment_v2::SegmentIterator::_lazy_init() at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/olap/rowset/segment_v2/segment_iterator.cpp:382 10# doris::segment_v2::SegmentIterator::_next_batch_internal(doris::vectorized::Block*) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/olap/rowset/segment_v2/segment_iterator.cpp:2012 11# doris::segment_v2::SegmentIterator::next_batch(doris::vectorized::Block*) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/olap/rowset/segment_v2/segment_iterator.cpp:1920 12# doris::segment_v2::LazyInitSegmentIterator::next_batch(doris::vectorized::Block*) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/olap/rowset/segment_v2/lazy_init_segment_iterator.h:45 13# doris::vectorized::VUnionIterator::next_batch(doris::vectorized::Block*) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/vec/olap/vgeneric_iterators.cpp:405 14# doris::BetaRowsetReader::next_block(doris::vectorized::Block*) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/olap/rowset/beta_rowset_reader.cpp:376 15# doris::vectorized::VCollectIterator::Level0Iterator::refresh_current_row() at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/vec/olap/vcollect_iterator.cpp:509 16# doris::vectorized::VCollectIterator::Level0Iterator::init(bool) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/vec/olap/vcollect_iterator.cpp:462 17# doris::vectorized::VCollectIterator::build_heap(std::vector, std::allocator > >&) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/vec/olap/vcollect_iterator.cpp:126 18# doris::vectorized::BlockReader::_init_collect_iter(doris::TabletReader::ReaderParams const&) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/vec/olap/block_reader.cpp:148 19# doris::vectorized::BlockReader::init(doris::TabletReader::ReaderParams const&) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/vec/olap/block_reader.cpp:222 20# doris::vectorized::NewOlapScanner::open(doris::RuntimeState*) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/vec/exec/scan/new_olap_scanner.cpp:232 21# doris::vectorized::ScannerScheduler::_scanner_scan(std::shared_ptr, std::shared_ptr) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/vec/exec/scan/scanner_scheduler.cpp:221 22# std::_Function_handler, std::shared_ptr)::$_1::operator()() const::{lambda()#1}>::_M_invoke(std::_Any_data const&) at /var/local/ldb-toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:291 23# doris::ThreadPool::dispatch_thread() in /mnt/hdd01/PERFORMANCE_ENV/be/lib/doris_be 24# doris::Thread::supervise_thread(void*) at /home/zcp/repo_center/doris_branch-3.0/doris/be/src/util/thread.cpp:499 25# start_thread at ./nptl/pthread_create.c:442 26# 0x00007FD4986BC850 at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:83 --- be/src/pipeline/exec/olap_scan_operator.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/be/src/pipeline/exec/olap_scan_operator.cpp b/be/src/pipeline/exec/olap_scan_operator.cpp index b815f85c0e4614..37c7664358d927 100644 --- a/be/src/pipeline/exec/olap_scan_operator.cpp +++ b/be/src/pipeline/exec/olap_scan_operator.cpp @@ -383,6 +383,10 @@ Status OlapScanLocalState::_init_scanners(std::list* s } COUNTER_UPDATE(_key_range_counter, scanner_ranges.size()); + // `rs_reader` should not be shared by different scanners + for (auto& split : _read_sources[scan_range_idx].rs_splits) { + split.rs_reader = split.rs_reader->clone(); + } auto scanner = vectorized::NewOlapScanner::create_shared( this, vectorized::NewOlapScanner::Params { state(), @@ -452,7 +456,7 @@ Status OlapScanLocalState::hold_tablets() { } timer.stop(); double cost_secs = static_cast(timer.elapsed_time()) / NANOS_PER_SEC; - if (cost_secs > 5) { + if (cost_secs > 1) { LOG_WARNING( "Try to hold tablets costs {} seconds, it costs too much. (Query-ID={}, NodeId={}, " "ScanRangeNum={})",