Skip to content

[Bug] BE coredump when call get_value() in expr_context.cpp #6167

@weizuo93

Description

@weizuo93

Describe the bug

BE coredump in expr_context.cpp when call get_value().

Core was generated by `/home/work/app/doris/c3prc-hadoop-test/be/package/be/lib/palo_be'.
Program terminated with signal 11, Segmentation fault.
#0  is_null (offset=..., offset=..., this=<optimized out>) at /builds/BkUi_hk7/0/olap/doris/be/src/runtime/tuple.h:138
138	/builds/BkUi_hk7/0/olap/doris/be/src/runtime/tuple.h: 没有那个文件或目录.
Missing separate debuginfos, use: debuginfo-install glibc-2.17-157.el7_3.1.x86_64 libgcc-4.8.5-28.el7_5.1.x86_64 zlib-1.2.7-17.el7.x86_64
(gdb) bt
#0  is_null (offset=..., offset=..., this=<optimized out>) at /builds/BkUi_hk7/0/olap/doris/be/src/runtime/tuple.h:138
#1  doris::SlotRef::get_big_int_val (this=0x72a65400, context=0xf660b680, row=<optimized out>) at /builds/BkUi_hk7/0/olap/doris/be/src/exprs/slot_ref.cpp:177
#2  0x0000000000d76daf in get_value (row=0xf660b680, e=<optimized out>, this=0xf660b680) at /builds/BkUi_hk7/0/olap/doris/be/src/exprs/expr_context.cpp:302
#3  doris::ExprContext::get_value (this=0xf660b680, row=row@entry=0x139dee000) at /builds/BkUi_hk7/0/olap/doris/be/src/exprs/expr_context.cpp:254
#4  0x0000000001632efc in doris::NewAggFnEvaluator::Update (this=0x30c40d00, row=row@entry=0x139dee000, dst=dst@entry=0x27caa6000, fn=<optimized out>)
    at /builds/BkUi_hk7/0/olap/doris/be/src/exprs/new_agg_fn_evaluator.cc:410
#5  0x000000000158ced6 in Add (dst=0x27caa6000, row=0x139dee000, this=<optimized out>) at /builds/BkUi_hk7/0/olap/doris/be/src/exprs/new_agg_fn_evaluator.h:284
#6  doris::PartitionedAggregationNode::UpdateTuple (this=this@entry=0xb215b80, agg_fn_evals=0x37788a00, tuple=0x27caa6000, row=row@entry=0x139dee000, is_merge=is_merge@entry=false)
    at /builds/BkUi_hk7/0/olap/doris/be/src/exec/partitioned_aggregation_node.cc:1047
#7  0x0000000001597d6f in TryAddToHashTable (status=0xb215d48, remaining_capacity=0x7f7584151150, hash=1225313753, in_row=0x139dee000, hash_tbl=<optimized out>, partition=0x40e4d2c0, ht_ctx=0x38fbbb80, 
    this=0xb215b80) at /builds/BkUi_hk7/0/olap/doris/be/src/exec/partitioned_aggregation_node_ir.cc:242
#8  doris::PartitionedAggregationNode::ProcessBatchStreaming (this=this@entry=0xb215b80, needs_serialize=<optimized out>, in_batch=0x3e7fab00, out_batch=out_batch@entry=0x899e2f20, ht_ctx=0x38fbbb80, 
    remaining_capacity=0x7f7584151140) at /builds/BkUi_hk7/0/olap/doris/be/src/exec/partitioned_aggregation_node_ir.cc:184
#9  0x00000000015908c8 in doris::PartitionedAggregationNode::GetRowsStreaming (this=this@entry=0xb215b80, state=state@entry=0xdb50a300, out_batch=out_batch@entry=0x899e2f20)
    at /builds/BkUi_hk7/0/olap/doris/be/src/exec/partitioned_aggregation_node.cc:579
#10 0x0000000001593ed1 in doris::PartitionedAggregationNode::GetNextInternal (this=this@entry=0xb215b80, state=0xdb50a300, row_batch=row_batch@entry=0x899e2f20, eos=0x8ede93b1)
    at /builds/BkUi_hk7/0/olap/doris/be/src/exec/partitioned_aggregation_node.cc:440
#11 0x000000000159407f in doris::PartitionedAggregationNode::get_next (this=0xb215b80, state=<optimized out>, row_batch=0x899e2f20, eos=<optimized out>)
    at /builds/BkUi_hk7/0/olap/doris/be/src/exec/partitioned_aggregation_node.cc:363
#12 0x00000000010985df in doris::PlanFragmentExecutor::get_next_internal (this=this@entry=0x8ede9270, batch=batch@entry=0x7f7584151368)
    at /builds/BkUi_hk7/0/olap/doris/be/src/runtime/plan_fragment_executor.cpp:474
#13 0x0000000001099aa1 in doris::PlanFragmentExecutor::open_internal (this=this@entry=0x8ede9270) at /builds/BkUi_hk7/0/olap/doris/be/src/runtime/plan_fragment_executor.cpp:283
#14 0x000000000109a350 in doris::PlanFragmentExecutor::open (this=this@entry=0x8ede9270) at /builds/BkUi_hk7/0/olap/doris/be/src/runtime/plan_fragment_executor.cpp:249
#15 0x000000000101bdbb in doris::FragmentExecState::execute (this=0x8ede9200) at /builds/BkUi_hk7/0/olap/doris/be/src/runtime/fragment_mgr.cpp:220
#16 0x000000000101e526 in doris::FragmentMgr::exec_actual(std::shared_ptr<doris::FragmentExecState>, std::function<void (doris::PlanFragmentExecutor*)>) (this=0x6113100, exec_state=..., cb=...)
    at /builds/BkUi_hk7/0/olap/doris/be/src/runtime/fragment_mgr.cpp:430
#17 0x0000000001023c1c in __invoke_impl<void, void (doris::FragmentMgr::*&)(std::shared_ptr<doris::FragmentExecState>, std::function<void(doris::PlanFragmentExecutor*)>), doris::FragmentMgr*&, std::shared_ptr<doris::FragmentExecState>&, std::function<void(doris::PlanFragmentExecutor*)>&> (__t=@0xf640d580: 0x6113100, __f=
    @0xf640d540: (void (doris::FragmentMgr::*)(doris::FragmentMgr * const, std::shared_ptr<doris::FragmentExecState>, std::function<void(doris::PlanFragmentExecutor*)>)) 0x101e500 <doris::FragmentMgr::exec_actual(std::shared_ptr<doris::FragmentExecState>, std::function<void (doris::PlanFragmentExecutor*)>)>) at /usr/include/c++/7.3.0/bits/invoke.h:73
#18 __invoke<void (doris::FragmentMgr::*&)(std::shared_ptr<doris::FragmentExecState>, std::function<void(doris::PlanFragmentExecutor*)>), doris::FragmentMgr*&, std::shared_ptr<doris::FragmentExecState>&, std::function<void(doris::PlanFragmentExecutor*)>&> (__fn=
    @0xf640d540: (void (doris::FragmentMgr::*)(doris::FragmentMgr * const, std::shared_ptr<doris::FragmentExecState>, std::function<void(doris::PlanFragmentExecutor*)>)) 0x101e500 <doris::FragmentMgr::exec_actual(std::shared_ptr<doris::FragmentExecState>, std::function<void (doris::PlanFragmentExecutor*)>)>) at /usr/include/c++/7.3.0/bits/invoke.h:95
#19 __call<void, 0, 1, 2> (__args=..., this=0xf640d540) at /usr/include/c++/7.3.0/functional:632
#20 operator()<> (this=0xf640d540) at /usr/include/c++/7.3.0/functional:718
#21 std::_Function_handler<void (), std::_Bind_result<void, void (doris::FragmentMgr::*(doris::FragmentMgr*, std::shared_ptr<doris::FragmentExecState>, std::function<void (doris::PlanFragmentExecutor*)>))(std::shared_ptr<doris::FragmentExecState>, std::function<void (doris::PlanFragmentExecutor*)>)> >::_M_invoke(std::_Any_data const&) (__functor=...) at /usr/include/c++/7.3.0/bits/std_function.h:316
#22 0x00000000011ade82 in operator() (this=0x151f3058) at /usr/include/c++/7.3.0/bits/std_function.h:706
#23 run (this=0x151f3050) at /builds/BkUi_hk7/0/olap/doris/be/src/util/threadpool.cpp:42
#24 doris::ThreadPool::dispatch_thread (this=0x6be7c20) at /builds/BkUi_hk7/0/olap/doris/be/src/util/threadpool.cpp:551
#25 0x00000000011a5ce8 in operator() (this=0x8a9a2e8) at /usr/include/c++/7.3.0/bits/std_function.h:706
#26 doris::Thread::supervise_thread (arg=0x8a9a2d0) at /builds/BkUi_hk7/0/olap/doris/be/src/util/thread.cpp:385
#27 0x00007f75da561dc5 in start_thread () from /lib64/libpthread.so.0
#28 0x00007f75da86d73d in clone () from /lib64/libc.so.6
(gdb) f 3
#3  doris::ExprContext::get_value (this=0xf660b680, row=row@entry=0x139dee000) at /builds/BkUi_hk7/0/olap/doris/be/src/exprs/expr_context.cpp:254
254	/builds/BkUi_hk7/0/olap/doris/be/src/exprs/expr_context.cpp: 没有那个文件或目录.
(gdb) p row
$1 = (doris::TupleRow *) 0x139dee000
(gdb) p *(doris::TupleRow *) 0x139dee000
$2 = {
  _tuples = {0x1d380a000}
}
(gdb) f 2
#2  0x0000000000d76daf in get_value (row=0xf660b680, e=<optimized out>, this=0xf660b680) at /builds/BkUi_hk7/0/olap/doris/be/src/exprs/expr_context.cpp:302
302	in /builds/BkUi_hk7/0/olap/doris/be/src/exprs/expr_context.cpp
(gdb) p row
$3 = (doris::TupleRow *) 0xf660b680
(gdb) p *(doris::TupleRow *) 0xf660b680
$4 = {
  _tuples = {0x0}
}
(gdb)

I'm confused why the value of TupleRow * point row changed between frame 2 and frame 3.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions