From c4b2ddd688ddb66b001ae80be4faaf599d3753a3 Mon Sep 17 00:00:00 2001 From: lihangyu <15605149486@163.com> Date: Fri, 24 May 2024 19:10:07 +0800 Subject: [PATCH] [Fix](Variant) clear block after a flush complete (#35226) (#35372) Otherwise result in crash ``` *** SIGSEGV address not mapped to object (@0x0) received by PID 4149909 (TID 4152328 OR 0x7efefc60d700) from PID 0; stack trace: *** 0# doris::signal::(anonymous namespace)::FailureSignalHandler(int, siginfo_t*, void*) at /home/zcp/repo_center/doris_master/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# 0x00007F031AD0E090 in /lib/x86_64-linux-gnu/libc.so.6 4# doris::Status doris::vectorized::MutableBlock::merge_impl(doris::vectorized::Block const&) at /home/zcp/repo_center/doris_master/doris/be/src/vec/core/block.h:586 5# doris::Status doris::vectorized::MutableBlock::merge(doris::vectorized::Block const&) at /home/zcp/repo_center/doris_master/doris/be/src/vec/core/block.h:521 ``` --- be/src/olap/rowset/segment_creator.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/be/src/olap/rowset/segment_creator.cpp b/be/src/olap/rowset/segment_creator.cpp index ffa8a1b291..f7b364a9fd 100644 --- a/be/src/olap/rowset/segment_creator.cpp +++ b/be/src/olap/rowset/segment_creator.cpp @@ -389,6 +389,7 @@ Status SegmentCreator::add_block(const vectorized::Block* block) { if (_buffer_block.allocated_bytes() > config::write_buffer_size) { vectorized::Block block = _buffer_block.to_block(); RETURN_IF_ERROR(flush_single_block(&block)); + _buffer_block.clear(); } else { RETURN_IF_ERROR(_buffer_block.merge(*block)); } @@ -420,6 +421,7 @@ Status SegmentCreator::flush() { if (_buffer_block.rows() > 0) { vectorized::Block block = _buffer_block.to_block(); RETURN_IF_ERROR(flush_single_block(&block)); + _buffer_block.clear(); } if (_flush_writer == nullptr) { return Status::OK();