weizuo93 opened a new issue #6316:
URL: https://github.com/apache/incubator-doris/issues/6316


   If the size of memtable is greater than max segment size and the memtable 
will flush more than one segment file. BE coredump will be triggered when 
flushing memtable. The stack is as follow:
   ```
   (gdb) bt
   #0  0x0000000001ab11ca in 
std::vector<std::unique_ptr<doris::segment_v2::ColumnWriter, 
std::default_delete<doris::segment_v2::ColumnWriter> >, 
std::allocator<std::unique_ptr<doris::segment_v2::ColumnWriter, 
std::default_delete<doris::segment_v2::ColumnWriter> > > >::size (this=0xa0) at 
/opt/rh/devtoolset-10/root/usr/include/c++/10/bits/stl_vector.h:918
   #1  doris::segment_v2::SegmentWriter::append_row<doris::ContiguousRow> 
(this=0x0, row=...) at ../src/olap/rowset/segment_v2/segment_writer.cpp:103
   #2  0x0000000001383f0a in doris::BetaRowsetWriter::flush_single_memtable 
(this=0x90d4140, memtable=<optimized out>, flush_size=0x9db9c18) at 
/opt/rh/devtoolset-10/root/usr/include/c++/10/bits/unique_ptr.h:421
   #3  0x0000000001328154 in doris::MemTable::flush (this=0x9db9b00) at 
../src/util/stopwatch.hpp:66
   #4  0x00000000012aaa1e in doris::FlushToken::_flush_memtable 
(this=0x8eff860, memtable=...) at 
/opt/rh/devtoolset-10/root/usr/include/c++/10/bits/shared_ptr_base.h:1324
   #5  0x00000000012ab2b1 in std::__invoke_impl<void, void 
(doris::FlushToken::*&)(std::shared_ptr<doris::MemTable>), doris::FlushToken*&, 
std::shared_ptr<doris::MemTable>&> (__f=<optimized out>, 
       __t=<optimized out>, __f=<optimized out>, __t=<optimized out>) at 
/opt/rh/devtoolset-10/root/usr/include/c++/10/ext/atomicity.h:100
   #6  std::__invoke<void 
(doris::FlushToken::*&)(std::shared_ptr<doris::MemTable>), doris::FlushToken*&, 
std::shared_ptr<doris::MemTable>&> (__fn=<optimized out>)
       at /opt/rh/devtoolset-10/root/usr/include/c++/10/bits/invoke.h:95
   #7  std::_Bind<void (doris::FlushToken::*(doris::FlushToken*, 
std::shared_ptr<doris::MemTable>))(std::shared_ptr<doris::MemTable>)>::__call<void,
 , 0ul, 1ul>(std::tuple<>&&, std::_Index_tuple<0ul, 1ul>) (
       __args=..., this=<optimized out>) at 
/opt/rh/devtoolset-10/root/usr/include/c++/10/functional:416
   #8  std::_Bind<void (doris::FlushToken::*(doris::FlushToken*, 
std::shared_ptr<doris::MemTable>))(std::shared_ptr<doris::MemTable>)>::operator()<,
 void>() (this=<optimized out>)
       at /opt/rh/devtoolset-10/root/usr/include/c++/10/functional:499
   #9  std::__invoke_impl<void, std::_Bind<void 
(doris::FlushToken::*(doris::FlushToken*, 
std::shared_ptr<doris::MemTable>))(std::shared_ptr<doris::MemTable>)>&>(std::__invoke_other,
 std::_Bind<void (doris::FlushToken::*(doris::FlushToken*, 
std::shared_ptr<doris::MemTable>))(std::shared_ptr<doris::MemTable>)>&) 
(__f=...) at /opt/rh/devtoolset-10/root/usr/include/c++/10/bits/invoke.h:60
   #10 std::__invoke_r<void, std::_Bind<void 
(doris::FlushToken::*(doris::FlushToken*, 
std::shared_ptr<doris::MemTable>))(std::shared_ptr<doris::MemTable>)>&>(std::_Bind<void
 (doris::FlushToken::*(doris::FlushToken*, 
std::shared_ptr<doris::MemTable>))(std::shared_ptr<doris::MemTable>)>&) 
(__fn=...) at /opt/rh/devtoolset-10/root/usr/include/c++/10/bits/invoke.h:110
   #11 std::_Function_handler<void (), std::_Bind<void 
(doris::FlushToken::*(doris::FlushToken*, 
std::shared_ptr<doris::MemTable>))(std::shared_ptr<doris::MemTable>)> 
>::_M_invoke(std::_Any_data const&) (
       __functor=...) at 
/opt/rh/devtoolset-10/root/usr/include/c++/10/bits/std_function.h:291
   #12 0x0000000001579f56 in std::function<void ()>::operator()() const 
(this=0x913fd18) at 
/opt/rh/devtoolset-10/root/usr/include/c++/10/bits/std_function.h:617
   #13 doris::FunctionRunnable::run (this=0x913fd10) at 
../src/util/threadpool.cpp:42
   #14 doris::ThreadPool::dispatch_thread (this=0x58108c0) at 
../src/util/threadpool.cpp:573
   #15 0x0000000001574394 in std::function<void ()>::operator()() const 
(this=0x582f758) at 
/opt/rh/devtoolset-10/root/usr/include/c++/10/bits/std_function.h:617
   #16 doris::Thread::supervise_thread (arg=0x582f740) at 
../src/util/thread.cpp:385
   #17 0x00007efe179adea5 in start_thread () from /lib64/libpthread.so.0
   #18 0x00007efe173d49fd in clone () from /lib64/libc.so.6
   (gdb) f 1
   #1  doris::segment_v2::SegmentWriter::append_row<doris::ContiguousRow> 
(this=0x0, row=...) at ../src/olap/rowset/segment_v2/segment_writer.cpp:103
   103      for (size_t cid = 0; cid < _column_writers.size(); ++cid) {
   (gdb) p this
   $1 = (doris::segment_v2::SegmentWriter * const) 0x0
   (gdb)
   ```
   `segment writer` will be released after first segment was flushed 
successfully. When `segment writer` is used for subsequent segment, there is a 
null pointer exception.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to