Skip to content

Commit

Permalink
[fix](scanner) fix shared rowset reader in different scanners (apache…
Browse files Browse the repository at this point in the history
…#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: a733a56 ***
*** 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<doris::vectorized::IColumn>::mutable_ptr<doris::vectorized::IColumn>&,
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<unsigned
int, std::allocator<unsigned int> > const&,
std::vector<COW<doris::vectorized::IColumn>::mutable_ptr<doris::vectorized::IColumn>,
std::allocator<COW<doris::vectorized::IColumn>::mutable_ptr<doris::vectorized::IColumn>
> >&, 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::shared_ptr<doris::RowsetReader>,
std::allocator<std::shared_ptr<doris::RowsetReader> > >&) 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<doris::vectorized::ScannerContext>,
std::shared_ptr<doris::vectorized::ScanTask>) at
/home/zcp/repo_center/doris_branch-3.0/doris/be/src/vec/exec/scan/scanner_scheduler.cpp:221
22# std::_Function_handler<void (),
doris::vectorized::ScannerScheduler::submit(std::shared_ptr<doris::vectorized::ScannerContext>,
std::shared_ptr<doris::vectorized::ScanTask>)::$_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
  • Loading branch information
Gabriel39 authored Feb 13, 2025
1 parent 456d31d commit b79c5b2
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion be/src/pipeline/exec/olap_scan_operator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -383,6 +383,10 @@ Status OlapScanLocalState::_init_scanners(std::list<vectorized::VScannerSPtr>* 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(),
Expand Down Expand Up @@ -452,7 +456,7 @@ Status OlapScanLocalState::hold_tablets() {
}
timer.stop();
double cost_secs = static_cast<double>(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={})",
Expand Down

0 comments on commit b79c5b2

Please sign in to comment.