apache / doris

Apache Doris is an easy-to-use, high performance and unified analytics database.
https://doris.apache.org
Apache License 2.0
11.95k stars 3.14k forks source link

[Bug] be coredump due to add & build index on a newly added column #27156

Closed xiaokang closed 3 months ago

xiaokang commented 8 months ago

Search before asking

Version

2.0.2

What's Wrong?

be coredump due to add & build index on a newly added column

What You Expected?

build index finish with index file created

How to Reproduce?

  1. create table

    create table testindex (
    id INT,
    s STRING
    )
    DUPLICATE KEY(id)
    DISTRIBUTED BY HASH(id) BUCKETS 1 
    PROPERTIES("replication_num"="1");
  2. insert data insert into testindex values(1, 'hello world');

  3. add column alter table testindex add column s1 varchar(50) default null after s;

  4. add & build index

    alter table testindex add index idx_s1(s1) USING INVERTED;
    build index idx_s1 on testindex;
  5. be core

    
    be.WARNING
    W1117 08:57:41.239485 905182 index_builder.cpp:172] referenced column was missing. [column=s1 referenced_column=-1]

be.out Query id: 0-0 tablet id: 0 Aborted at 1700182661 (unix time) try "date -d @1700182661" if you are using GNU date Current BE git commitID: 627723e SIGSEGV address not mapped to object (@0xc00030) received by PID 904220 (TID 905182 OR 0x7f6387f5f700) from PID 12582960; stack trace: 0# doris::signal::(anonymous namespace)::FailureSignalHandler(int, siginfo_t, void) at /root/src/doris-2.0/be/src/common/signal_handler.h:417 1# os::Linux::chained_handler(int, siginfo, void) in /mnt/disk2/xiaokang/opt/java/jre/lib/amd64/server/libjvm.so 2# JVM_handle_linux_signal in /mnt/disk2/xiaokang/opt/java/jre/lib/amd64/server/libjvm.so 3# signalHandler(int, siginfo, void) in /mnt/disk2/xiaokang/opt/java/jre/lib/amd64/server/libjvm.so 4# 0x00007F655FE00570 in /lib64/libc.so.6 5# doris::vectorized::OlapBlockDataConvertor::convert_column_data(unsigned long) at /root/src/doris-2.0/be/src/vec/olap/olap_data_convertor.cpp:223 6# doris::IndexBuilder::_write_inverted_index_data(std::shared_ptr, int, doris::vectorized::Block) at /root/src/doris-2.0/be/src/olap/task/index_builder.cpp:268 7# doris::IndexBuilder::handle_single_rowset(std::shared_ptr, std::vector<std::shared_ptr, std::allocator<std::shared_ptr > >&) at /root/src/doris-2.0/be/src/olap/task/index_builder.cpp:231 8# doris::IndexBuilder::handle_inverted_index_data() at /root/src/doris-2.0/be/src/olap/task/index_builder.cpp:398 9# doris::IndexBuilder::do_build_inverted_index() in /mnt/disk2/xiaokang/pkg/apache-doris-2.0.3-rc03-bin-x64/be/lib/doris_be 10# doris::StorageEngine::_handle_index_change(std::shared_ptr) at /root/src/doris-2.0/be/src/olap/olap_server.cpp:1040 11# doris::StorageEngine::process_index_change_task(doris::TAlterInvertedIndexReq const&) at /root/src/doris-2.0/be/src/olap/olap_server.cpp:1034 12# doris::EngineIndexChangeTask::execute() at /root/src/doris-2.0/be/src/olap/task/engine_index_change_task.cpp:43 13# doris::StorageEngine::execute_task(doris::EngineTask) at /root/src/doris-2.0/be/src/olap/storage_engine.cpp:1245 14# doris::TaskWorkerPool::_alter_inverted_index_worker_thread_callback() at /root/src/doris-2.0/be/src/agent/task_worker_pool.cpp:354 15# doris::ThreadPool::dispatch_thread() in /mnt/disk2/xiaokang/pkg/apache-doris-2.0.3-rc03-bin-x64/be/lib/doris_be 16# doris::Thread::supervise_thread(void*) at /root/src/doris-2.0/be/src/util/thread.cpp:499 17# start_thread at pthread_create.c:480 18# clone at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97



### Anything Else?

_No response_

### Are you willing to submit PR?

- [ ] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://www.apache.org/foundation/policies/conduct)
qidaye commented 4 months ago

This case also causes Doris crash on master. There is a new core stack trace:

start BE in local mode
terminate called after throwing an instance of 'std::out_of_range'
  what():  _Map_base::at
*** Query id: 0-0 ***
*** is nereids: 0 ***
*** tablet id: 0 ***
*** Aborted at 1710922758 (unix time) try "date -d @1710922758" if you are using GNU date ***
*** Current BE git commitID: 340b41c1b0 ***
*** SIGABRT unknown detail explain (@0x421002de52f) received by PID 3007791 (TID 3010028 OR 0x7fc9f9bca700) from PID 3007791; stack trace: ***
 0# doris::signal::(anonymous namespace)::FailureSignalHandler(int, siginfo_t*, void*) at /mnt/disk2/luen/develop/workspace/incubator-doris/be/src/common/signal_handler.h:421
 1# 0x00007FCE12A60B50 in /lib64/libc.so.6
 2# __GI_raise in /lib64/libc.so.6
 3# __GI_abort in /lib64/libc.so.6
 4# __gnu_cxx::__verbose_terminate_handler() [clone .cold] at ../../../../libstdc++-v3/libsupc++/vterminate.cc:75
 5# __cxxabiv1::__terminate(void (*)()) at ../../../../libstdc++-v3/libsupc++/eh_terminate.cc:48
 6# 0x00005630E1E68E61 in /mnt/disk2/luen/mydoris/be/lib/doris_be
 7# 0x00005630E1E68FB4 in /mnt/disk2/luen/mydoris/be/lib/doris_be
 8# std::__throw_out_of_range(char const*) at ../../../../../libstdc++-v3/src/c++11/functexcept.cc:86
 9# std::__detail::_Map_base<int, std::pair<int const, int>, std::allocator<std::pair<int const, int> >, std::__detail::_Select1st, std::equal_to<int>, std::hash<int>, std::__detail::_Mod_range_hashing, std::__detail::_Default_ranged_hash, std::__detail::_Prime_rehash_policy, std::__detail::_Hashtable_traits<false, false, true>, true>::at(int const&) const at /mnt/disk2/luen/develop/tools/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/hashtable_policy.h:776
10# std::unordered_map<int, int, std::hash<int>, std::equal_to<int>, std::allocator<std::pair<int const, int> > >::at(int const&) const at /mnt/disk2/luen/develop/tools/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/unordered_map.h:1001
11# doris::TabletSchema::column_by_uid(int) const at /mnt/disk2/luen/develop/workspace/incubator-doris/be/src/olap/tablet_schema.cpp:1195
12# doris::IndexBuilder::update_inverted_index_info() at /mnt/disk2/luen/develop/workspace/incubator-doris/be/src/olap/task/index_builder.cpp:125
13# doris::IndexBuilder::do_build_inverted_index() at /mnt/disk2/luen/develop/workspace/incubator-doris/be/src/olap/task/index_builder.cpp:641
14# doris::StorageEngine::_handle_index_change(std::shared_ptr<doris::IndexBuilder>) at /mnt/disk2/luen/develop/workspace/incubator-doris/be/src/olap/olap_server.cpp:1077
15# doris::StorageEngine::process_index_change_task(doris::TAlterInvertedIndexReq const&) at /mnt/disk2/luen/develop/workspace/incubator-doris/be/src/olap/olap_server.cpp:1071
16# doris::EngineIndexChangeTask::execute() at /mnt/disk2/luen/develop/workspace/incubator-doris/be/src/olap/task/engine_index_change_task.cpp:45
17# doris::alter_inverted_index_callback(doris::StorageEngine&, doris::TAgentTaskRequest const&) at /mnt/disk2/luen/develop/workspace/incubator-doris/be/src/agent/task_worker_pool.cpp:705
18# auto doris::AgentServer::start_workers(doris::StorageEngine&, doris::ExecEnv*)::$_0::operator()<doris::TAgentTaskRequest const&>(doris::TAgentTaskRequest const&) const at /mnt/disk2/luen/develop/workspace/incubator-doris/be/src/agent/agent_server.cpp:123
19# void std::__invoke_impl<void, doris::AgentServer::start_workers(doris::StorageEngine&, doris::ExecEnv*)::$_0&, doris::TAgentTaskRequest const&>(std::__invoke_other, doris::AgentServer::start_workers(doris::StorageEngine&, doris::ExecEnv*)::$_0&, doris::TAgentTaskRequest const&) at /mnt/disk2/luen/develop/tools/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:61
20# std::enable_if<is_invocable_r_v<void, doris::AgentServer::start_workers(doris::StorageEngine&, doris::ExecEnv*)::$_0&, doris::TAgentTaskRequest const&>, void>::type std::__invoke_r<void, doris::AgentServer::start_workers(doris::StorageEngine&, doris::ExecEnv*)::$_0&, doris::TAgentTaskRequest const&>(doris::AgentServer::start_workers(doris::StorageEngine&, doris::ExecEnv*)::$_0&, doris::TAgentTaskRequest const&) at /mnt/disk2/luen/develop/tools/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:117
21# std::_Function_handler<void (doris::TAgentTaskRequest const&), doris::AgentServer::start_workers(doris::StorageEngine&, doris::ExecEnv*)::$_0>::_M_invoke(std::_Any_data const&, doris::TAgentTaskRequest const&) at /mnt/disk2/luen/develop/tools/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:291
22# std::function<void (doris::TAgentTaskRequest const&)>::operator()(doris::TAgentTaskRequest const&) const at /mnt/disk2/luen/develop/tools/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:560
23# doris::TaskWorkerPool::submit_task(doris::TAgentTaskRequest const&)::$_0::operator()<doris::TAgentTaskRequest const&>(doris::TAgentTaskRequest const&) const::{lambda()#1}::operator()() const at /mnt/disk2/luen/develop/workspace/incubator-doris/be/src/agent/task_worker_pool.cpp:504
24# void std::__invoke_impl<void, doris::TaskWorkerPool::submit_task(doris::TAgentTaskRequest const&)::$_0::operator()<doris::TAgentTaskRequest const&>(doris::TAgentTaskRequest const&) const::{lambda()#1}&>(std::__invoke_other, doris::TaskWorkerPool::submit_task(doris::TAgentTaskRequest const&)::$_0::operator()<doris::TAgentTaskRequest const&>(doris::TAgentTaskRequest const&) const::{lambda()#1}&) at /mnt/disk2/luen/develop/tools/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:61
25# std::enable_if<is_invocable_r_v<void, doris::TaskWorkerPool::submit_task(doris::TAgentTaskRequest const&)::$_0::operator()<doris::TAgentTaskRequest const&>(doris::TAgentTaskRequest const&) const::{lambda()#1}&>, void>::type std::__invoke_r<void, doris::TaskWorkerPool::submit_task(doris::TAgentTaskRequest const&)::$_0::operator()<doris::TAgentTaskRequest const&>(doris::TAgentTaskRequest const&) const::{lambda()#1}&>(doris::TaskWorkerPool::submit_task(doris::TAgentTaskRequest const&)::$_0::operator()<doris::TAgentTaskRequest const&>(doris::TAgentTaskRequest const&) const::{lambda()#1}&) at /mnt/disk2/luen/develop/tools/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:117
26# std::_Function_handler<void (), doris::TaskWorkerPool::submit_task(doris::TAgentTaskRequest const&)::$_0::operator()<doris::TAgentTaskRequest const&>(doris::TAgentTaskRequest const&) const::{lambda()#1}>::_M_invoke(std::_Any_data const&) at /mnt/disk2/luen/develop/tools/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:291
27# std::function<void ()>::operator()() const at /mnt/disk2/luen/develop/tools/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:560
28# doris::FunctionRunnable::run() at /mnt/disk2/luen/develop/workspace/incubator-doris/be/src/util/threadpool.cpp:48
29# doris::ThreadPool::dispatch_thread() at /mnt/disk2/luen/develop/workspace/incubator-doris/be/src/util/threadpool.cpp:543
30# void std::__invoke_impl<void, void (doris::ThreadPool::*&)(), doris::ThreadPool*&>(std::__invoke_memfun_deref, void (doris::ThreadPool::*&)(), doris::ThreadPool*&) at /mnt/disk2/luen/develop/tools/ldb_toolchain/bin/../lib/gcc/x86_64-l
inux-gnu/11/../../../../include/c++/11/bits/invoke.h:74
31# std::__invoke_result<void (doris::ThreadPool::*&)(), doris::ThreadPool*&>::type std::__invoke<void (doris::ThreadPool::*&)(), doris::ThreadPool*&>(void (doris::ThreadPool::*&)(), doris::ThreadPool*&) at /mnt/disk2/luen/develop/tools/l
db_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:96
32# void std::_Bind<void (doris::ThreadPool::*(doris::ThreadPool*))()>::__call<void, , 0ul>(std::tuple<>&&, std::_Index_tuple<0ul>) at /mnt/disk2/luen/develop/tools/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/
11/functional:420
33# void std::_Bind<void (doris::ThreadPool::*(doris::ThreadPool*))()>::operator()<, void>() at /mnt/disk2/luen/develop/tools/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/functional:503
34# void std::__invoke_impl<void, std::_Bind<void (doris::ThreadPool::*(doris::ThreadPool*))()>&>(std::__invoke_other, std::_Bind<void (doris::ThreadPool::*(doris::ThreadPool*))()>&) at /mnt/disk2/luen/develop/tools/ldb_toolchain/bin/../l
ib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:61
35# std::enable_if<is_invocable_r_v<void, std::_Bind<void (doris::ThreadPool::*(doris::ThreadPool*))()>&>, void>::type std::__invoke_r<void, std::_Bind<void (doris::ThreadPool::*(doris::ThreadPool*))()>&>(std::_Bind<void (doris::ThreadPoo
l::*(doris::ThreadPool*))()>&) at /mnt/disk2/luen/develop/tools/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/invoke.h:117
36# std::_Function_handler<void (), std::_Bind<void (doris::ThreadPool::*(doris::ThreadPool*))()> >::_M_invoke(std::_Any_data const&) at /mnt/disk2/luen/develop/tools/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c+
+/11/bits/std_function.h:291
37# std::function<void ()>::operator()() const at /mnt/disk2/luen/develop/tools/ldb_toolchain/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/std_function.h:560
38# doris::Thread::supervise_thread(void*) at /mnt/disk2/luen/develop/workspace/incubator-doris/be/src/util/thread.cpp:498
39# start_thread in /lib64/libpthread.so.0
40# __clone in /lib64/libc.so.6