doris icon indicating copy to clipboard operation
doris copied to clipboard

[bug] unexpected be core in string search function

Open xy720 opened this issue 1 year ago • 0 comments

Search before asking

  • [X] I had searched in the issues and found no similar issues.

Version

1.2/2.0/trunk(449f0c010c0910858cdf06b052f244a53305402f)

What's Wrong?

core dump:

Program terminated with signal SIGSEGV, Segmentation fault.
#0  0x000055a6929be0ed in doris::vectorized::ColumnVector<unsigned long>::get_data (this=<optimized out>) at /data/home/lambxu/work/git/doris-1.2/doris/be/src/vec/columns/column_vector.h:423
423         const Container& get_data() const { return data; }
[Current thread is 1 (Thread 0x7fd7b7211700 (LWP 11617))]
(gdb) bt
#0  0x000055a6929be0ed in doris::vectorized::ColumnVector<unsigned long>::get_data (this=<optimized out>) at /data/home/lambxu/work/git/doris-1.2/doris/be/src/vec/columns/column_vector.h:423
#1  doris::vectorized::ColumnArray::get_offsets (this=<optimized out>) at /data/home/lambxu/work/git/doris-1.2/doris/be/src/vec/columns/column_array.h:154
#2  doris::vectorized::FunctionsMultiStringSearch<doris::vectorized::FunctionMultiMatchAnyImpl<signed char, (doris::vectorized::MultiMatchTraits::Find)0, false> >::execute_impl (this=0x7fd674624000, 
    context=<optimized out>, block=..., arguments=..., result=5, input_rows_count=1) at /data/home/lambxu/work/git/doris-1.2/doris/be/src/vec/functions/functions_multi_string_search.cpp:111
#3  0x000055a6908a199c in doris::vectorized::DefaultExecutable::execute_impl (input_rows_count=1, result=5, arguments=..., block=..., context=0x7fd674686018, this=0x7fd8849c4c90)
    at /data/home/lambxu/work/git/doris-1.2/doris/be/src/vec/functions/function.h:484
#4  doris::vectorized::PreparedFunctionImpl::execute_without_low_cardinality_columns (this=0x7fd8849c4c90, context=0x7fd674686018, block=..., args=..., result=5, input_rows_count=1, dry_run=false)
    at /data/home/lambxu/work/git/doris-1.2/doris/be/src/vec/functions/function.cpp:244
#5  0x000055a6908a2859 in doris::vectorized::PreparedFunctionImpl::execute (this=<optimized out>, context=<optimized out>, block=..., args=..., result=<optimized out>, input_rows_count=1, dry_run=false)
    at /data/home/lambxu/work/git/doris-1.2/doris/be/src/vec/functions/function.cpp:265
#6  0x000055a68ef9d2c4 in doris::vectorized::IFunctionBase::execute (this=this@entry=0x7fd674624050, context=0x7fd674686018, block=..., arguments=..., result=result@entry=5, input_rows_count=1, dry_run=false)
    at /data/home/lambxu/installs/ldb_toolchain/include/c++/11/bits/shared_ptr_base.h:1290
#7  0x000055a69000f4f6 in doris::vectorized::VectorizedFnCall::execute (this=0x7fd6746a5800, context=0x7fd67461b980, block=0x7fd7b7208880, result_column_id=0x7fd7b720884c)
    at /data/home/lambxu/work/git/doris-1.2/doris/be/src/vec/exprs/vectorized_fn_call.cpp:109
#8  0x000055a690012378 in doris::vectorized::VExprContext::execute (result_column_id=0x7fd7b720884c, block=0x7fd7b7208880, this=0x7fd67461b980)
    at /data/home/lambxu/work/git/doris-1.2/doris/be/src/vec/exprs/vexpr_context.cpp:46
#9  doris::vectorized::VExprContext::get_output_block_after_execute_exprs (output_vexpr_ctxs=..., input_block=..., status=...) at /data/home/lambxu/work/git/doris-1.2/doris/be/src/vec/exprs/vexpr_context.cpp:148
#10 0x000055a6929fbb0a in doris::vectorized::VMysqlResultWriter::append_block (this=0x7fd6746021a0, input_block=...) at /data/home/lambxu/work/git/doris-1.2/doris/be/src/vec/sink/vmysql_result_writer.cpp:457
#11 0x000055a6929f6b80 in doris::vectorized::VResultSink::send (this=0x7fd6745d1aa0, state=<optimized out>, block=0x7fd674602240) at /data/home/lambxu/work/git/doris-1.2/doris/be/src/vec/sink/vresult_sink.cpp:95
#12 0x000055a68dc29801 in doris::PlanFragmentExecutor::open_vectorized_internal (this=this@entry=0x7fd6746c8080) at /data/home/lambxu/work/git/doris-1.2/doris/be/src/runtime/plan_fragment_executor.cpp:322
#13 0x000055a68dc2a7de in doris::PlanFragmentExecutor::open (this=this@entry=0x7fd6746c8080) at /data/home/lambxu/work/git/doris-1.2/doris/be/src/runtime/plan_fragment_executor.cpp:261
#14 0x000055a68dc02f30 in doris::FragmentExecState::execute (this=0x7fd6746c8000) at /data/home/lambxu/work/git/doris-1.2/doris/be/src/runtime/fragment_mgr.cpp:260
#15 0x000055a68dc0653e in doris::FragmentMgr::_exec_actual(std::shared_ptr<doris::FragmentExecState>, std::function<void (doris::PlanFragmentExecutor*)>) (this=this@entry=0x7fd887b90000, exec_state=..., cb=...)
    at /data/home/lambxu/installs/ldb_toolchain/include/c++/11/bits/shared_ptr_base.h:1290
#16 0x000055a68dc06a72 in operator() (__closure=<optimized out>) at /data/home/lambxu/work/git/doris-1.2/doris/be/src/runtime/fragment_mgr.cpp:737
#17 std::__invoke_impl<void, doris::FragmentMgr::exec_plan_fragment(const doris::TExecPlanFragmentParams&, doris::FragmentMgr::FinishCallback)::<lambda()>&> (__f=...)
    at /data/home/lambxu/installs/ldb_toolchain/include/c++/11/bits/invoke.h:61
#18 std::__invoke_r<void, doris::FragmentMgr::exec_plan_fragment(const doris::TExecPlanFragmentParams&, doris::FragmentMgr::FinishCallback)::<lambda()>&> (__fn=...)
    at /data/home/lambxu/installs/ldb_toolchain/include/c++/11/bits/invoke.h:111
#19 std::_Function_handler<void(), doris::FragmentMgr::exec_plan_fragment(const doris::TExecPlanFragmentParams&, doris::FragmentMgr::FinishCallback)::<lambda()> >::_M_invoke(const std::_Any_data &) (
    __functor=...) at /data/home/lambxu/installs/ldb_toolchain/include/c++/11/bits/std_function.h:291
#20 0x000055a68debebc5 in std::function<void ()>::operator()() const (this=<optimized out>) at /data/home/lambxu/installs/ldb_toolchain/include/c++/11/bits/std_function.h:560
#21 doris::FunctionRunnable::run (this=<optimized out>) at /data/home/lambxu/work/git/doris-1.2/doris/be/src/util/threadpool.cpp:46
#22 doris::ThreadPool::dispatch_thread (this=0x7fd877e51bc0) at /data/home/lambxu/work/git/doris-1.2/doris/be/src/util/threadpool.cpp:535
#23 0x000055a68deb401f in std::function<void ()>::operator()() const (this=0x7fd887b83df8) at /data/home/lambxu/installs/ldb_toolchain/include/c++/11/bits/std_function.h:560
#24 doris::Thread::supervise_thread (arg=0x7fd887b83de0) at /data/home/lambxu/work/git/doris-1.2/doris/be/src/util/thread.cpp:454
#25 0x00007fd8a0474ea5 in start_thread () from /lib64/libpthread.so.0
#26 0x00007fd8a0787b0d in clone () from /lib64/libc.so.6

other:

(gdb) f 2
#2  doris::vectorized::FunctionsMultiStringSearch<doris::vectorized::FunctionMultiMatchAnyImpl<signed char, (doris::vectorized::MultiMatchTraits::Find)0, false> >::execute_impl (this=0x7fd674624000, 
    context=<optimized out>, block=..., arguments=..., result=5, input_rows_count=1) 
(gdb) p col_needles_vector
$1 = (const doris::vectorized::ColumnArray *) 0x0
(gdb) p col_needles_const
$2 = (const doris::vectorized::ColumnConst *) 0x0
(gdb) p *(*(doris::vectorized::ColumnConst*)needles_ptr.t).data.value.t
$3 = {<COW<doris::vectorized::IColumn>> = {ref_counter = {<std::__atomic_base<unsigned int>> = {static _S_alignment = 4, _M_i = 1}, static is_always_lock_free = true}}, 
  _vptr.IColumn = 0x55a695a19390 <vtable for doris::vectorized::ColumnNullable+16>, is_date = false, is_date_time = false, is_decimalv2 = false}
(gdb) p *(doris::vectorized::ColumnString*)(*((doris::vectorized::ColumnNullable*)(*((doris::vectorized::ColumnArray*)(*(doris::vectorized::ColumnNullable*)(*((doris::vectorized::ColumnConst*)needles_ptr.t)).data.value.t).nested_column.value.t)).data.value.t)).nested_column.value.t
$4 = {<COWHelper<doris::vectorized::IColumn, doris::vectorized::ColumnString>> = {<doris::vectorized::IColumn> = {<COW<doris::vectorized::IColumn>> = {ref_counter = {<std::__atomic_base<unsigned int>> = {
            static _S_alignment = 4, _M_i = 1}, static is_always_lock_free = true}}, _vptr.IColumn = 0x55a695a19718 <vtable for doris::vectorized::ColumnString+16>, is_date = false, is_date_time = false, 
      is_decimalv2 = false}, <No data fields>}, static MAX_STRING_SIZE = 4294967295, 
  offsets = {<doris::vectorized::PODArrayBase<4, 4096, Allocator<false, false>, 15, 16>> = {<boost::noncopyable_::noncopyable> = {<boost::noncopyable_::base_token> = {<No data fields>}, <No data fields>}, <Allocator<false, false>> = {static clear_memory = <optimized out>, static mmap_flags = <optimized out>}, static pad_right = <optimized out>, static pad_left = 16, static null = <optimized out>, 
      c_start = 0x7fd674290050 "\005", c_end = 0x7fd674290058 "", c_end_of_storage = 0x7fd674290070 "LocalBytesSent", c_end_peak = 0x7fd674290050 "\005"}, <No data fields>}, 
  chars = {<doris::vectorized::PODArrayBase<1, 4096, Allocator<false, false>, 15, 16>> = {<boost::noncopyable_::noncopyable> = {<boost::noncopyable_::base_token> = {<No data fields>}, <No data fields>}, <Allocator<false, false>> = {static clear_memory = <optimized out>, static mmap_flags = <optimized out>}, static pad_right = <optimized out>, static pad_left = 16, static null = <optimized out>, 
      c_start = 0x7fd8748fded0 "helloyou", c_end = 0x7fd8748fded8 "", c_end_of_storage = 0x7fd8748fdef1 "ocalSendTime", c_end_peak = 0x7fd8748fded0 "helloyou"}, <No data fields>}}

What You Expected?

work

How to Reproduce?

1、create table

CREATE TABLE bak
(
    `col1`      INT NOT NULL,
    `content`   TEXT NULL,
    `mode`      ARRAY<TEXT> NULL
) ENGINE=OLAP
DUPLICATE KEY(`col1`)
COMMENT 'OLAP'
DISTRIBUTED BY HASH(`col1`) BUCKETS 3
PROPERTIES (
"replication_allocation" = "tag.location.default: 1",
"in_memory" = "false",
"storage_format" = "V2"
);

2、insert data

INSERT INTO bak (col1, content, mode) VALUES
            (1, 'Hello, World!', ['hello', 'world'] ),
            (2, 'Hello, World!', ['hello', 'world', 'Hello', '!'] ),
            (3, 'hello, world!', ['Hello', 'world'] ),
            (4, 'hello, world!', ['hello', 'world', 'Hello', '!'] ),
            (5, 'HHHHW!', ['H', 'HHHH', 'HW', 'WH'] ),
            (6, 'abc', null),
            (7, null, null),
            (8, null, ['a', 'b', 'c']);

3、execute sql

select multi_match_any(content, 'hello') from bak order by col1;

or 

select multi_match_any(content, '[hello]') from bak order by col1

Anything Else?

No response

Are you willing to submit PR?

  • [X] Yes I am willing to submit a PR!

Code of Conduct

xy720 avatar Feb 23 '24 05:02 xy720