Skip to content

[Bug] BE crash when enable both enable_vectorized_engine and enable_storage_vectorization #9509

Closed

Description

@lide-reed

Search before asking

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

Version

dev 1.0.1

What's Wrong?

The statement will hang for a long time and be will crash when execute "select count(*) from lide_test";

be.out:

*** SIGSEGV unkown detail explain (@0x0) received by PID 3595 (TID 0x7f7a697cd700) from PID 0; stack trace: ***
0# doris::signal::(anonymous namespace)::FailureSignalHandler(int, siginfo_t*, void*) at /data/doris-1.x/be/src/common/signal_handler.h:420
1# 0x00007F7A83CAC400 in /lib64/libc.so.6
2# doris::segment_v2::SegmentIterator::_init_current_block(doris::vectorized::Block*, std::vector<COWdoris::vectorized::IColumn::mutable_ptrdoris::vectorized::IColumn, std::allocator<COWdoris::vectorized::IColumn::mutable_ptrdoris::vectorized::IColumn > >&) at /data/doris-1.x/be/src/olap/rowset/segment_v2/segment_iterator.cpp:767
3# doris::segment_v2::SegmentIterator::next_batch(doris::vectorized::Block*) at /data/doris-1.x/be/src/olap/rowset/segment_v2/segment_iterator.cpp:923
4# doris::BetaRowsetReader::next_block(doris::vectorized::Block*) at /data/doris-1.x/be/src/olap/rowset/beta_rowset_reader.cpp:194
5# doris::vectorized::VCollectIterator::Level1Iterator::next(doris::vectorized::Block*) at /data/doris-1.x/be/src/vec/olap/vcollect_iterator.cpp:264
6# doris::vectorized::BlockReader::_direct_next_block(doris::vectorized::Block*, doris::MemPool*, doris::ObjectPool*, bool*) at /data/doris-1.x/be/src/vec/olap/block_reader.cpp:176
7# doris::vectorized::VOlapScanner::get_block(doris::RuntimeState*, doris::vectorized::Block*, bool*) at /data/doris-1.x/be/src/vec/exec/volap_scanner.cpp:56
8# doris::vectorized::VOlapScanNode::scanner_thread(doris::vectorized::VOlapScanner*) at /data/doris-1.x/be/src/vec/exec/volap_scan_node.cpp:210
9# doris::PriorityWorkStealingThreadPool::work_thread(int) at /data/doris-1.x/be/src/util/priority_work_stealing_thread_pool.hpp:135
10# execute_native_thread_routine in /usr/local/service/doris/lib/be/palo_be
11# start_thread in /lib64/libpthread.so.0
12# __clone in /lib64/libc.so.6

What You Expected?

MySQL [testdb]> select count() from lide_test;
+----------+
| count(
) |
+----------+
| 7 |
+----------+
1 row in set (0.01 sec)

How to Reproduce?

CREATE TABLE lide_test (c1 varchar(190) NOT NULL COMMENT "",c2 bigint(20) NOT NULL COMMENT "", c3 varchar(160) NULL COMMENT "" ) ENGINE=OLAP DUPLICATE KEY(c1, c2) COMMENT "OLAP" DISTRIBUTED BY HASH(c3) BUCKETS 3 ;

INSERT INTO lide_test VALUES ('abcdef',1,'fjdsajfldjafljdslajfdl'),('abcdef',2,'fjdsajfldjafljdslajfdl'),('abcdef',4,'fjdsajfldjafljdslajfdl'),('abcdef',5,'fjdsajfldjafljdslajfdl');

delete from lide_test where c1 = 'fjdsajfldjafljdslajfdl';

INSERT INTO lide_test VALUES ('abcdef',1,'fjdsajfldjafljdslajfdl'),('abcdef',2,'fjdsajfldjafljdslajfdl'),('abcdef',4,'fjdsajfldjafljdslajfdl'),('abcdef',5,'fjdsajfldjafljdslajfdl');

select count(*) from lide_test;
^CCtrl-C -- query killed. Continuing normally.

Anything Else?

No response

Are you willing to submit PR?

  • Yes I am willing to submit a PR!

Code of Conduct

Activity

  1. lide-reed commented on May 11, 2022

    @lide-reed
    ContributorAuthor

    image

  2. lide-reed commented on May 11, 2022

    @lide-reed
    ContributorAuthor

    (gdb) p block
    $77 = {
    data = {
    <std::_Vector_base<doris::vectorized::ColumnWithTypeAndName, std::allocatordoris::vectorized::ColumnWithTypeAndName >> = {
    _M_impl = {
    <std::allocatordoris::vectorized::ColumnWithTypeAndName> = {
    <__gnu_cxx::new_allocatordoris::vectorized::ColumnWithTypeAndName> = {}, },
    <std::_Vector_base<doris::vectorized::ColumnWithTypeAndName, std::allocatordoris::vectorized::ColumnWithTypeAndName >::_Vector_impl_data> = {
    _M_start = 0x564db3b4a340,
    _M_finish = 0x564db3b4a378,
    _M_end_of_storage = 0x564db3b4a378
    }, }
    }, },
    index_by_name = {
    <phmap::priv::raw_hash_map<phmap::priv::FlatHashMapPolicy<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, unsigned long>, phmap::priv::StringHashT, phmap::priv::StringHashEqT::Eq, std::allocator<std::pair<std::cxx11::basic_string<char, std::char_traits, std::allocator > const, unsigned long> > >> = {
    <phmap::priv::raw_hash_set<phmap::priv::FlatHashMapPolicy<std::cxx11::basic_string<char, std::char_traits, std::allocator >, unsigned long>, phmap::priv::StringHashT, phmap::priv::StringHashEqT::Eq, std::allocator<std::pair<std::cxx11::basic_string<char, std::char_traits, std::allocator > const, unsigned long> > >> = {
    ctrl
    = 0x564db3b4a300 "w\377w", '\200' <repeats 14 times>,
    slots
    = 0x564db3b4a318,
    size
    = 1,
    capacity
    = 1,
    infoz = {},
    settings = {
    <phmap::priv::internal_compressed_tuple::CompressedTupleImpl<phmap::priv::CompressedTuple<unsigned long, phmap::priv::StringHashT, phmap::priv::StringHashEqT::Eq, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits, std::allocator > const, unsigned long> > >, phmap::integer_sequence<unsigned long, 0, 1, 2, 3> >> = {
    <phmap::priv::internal_compressed_tuple::Storage<phmap::priv::CompressedTuple<unsigned long, phmap::priv::StringHashT, phmap::priv::StringHashEqT::Eq, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits, std::allocator > const, unsigned long> > >, 0, false>> = {
    value = 0
    },
    <phmap::priv::internal_compressed_tuple::Storage<phmap::priv::CompressedTuple<unsigned long, phmap::priv::StringHashT, phmap::priv::StringHashEqT::Eq, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits, std::allocator > const, unsigned long> > >, 1, true>> = {
    <phmap::priv::StringHashT> = {}, },
    <phmap::priv::internal_compressed_tuple::Storage<phmap::priv::CompressedTuple<unsigned long, phmap::priv::StringHashT, phmap::priv::StringHashEqT::Eq, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits, std::allocator > const, unsigned long> > >, 2, true>> = {
    <phmap::priv::StringHashEqT::Eq> = {}, },
    <phmap::priv::internal_compressed_tuple::Storage<phmap::priv::CompressedTuple<unsigned long, phmap::priv::StringHashT, phmap::priv::StringHashEqT::Eq, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits, std::allocator > const, unsigned long> > >, 3, true>> = {
    <std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits, std::allocator > const, unsigned long> >> = {
    <__gnu_cxx::new_allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits, std::allocator > const, unsigned long> >> = {}, }, }, }, }
    }, }, },
    info = {
    is_overflows = false,
    bucket_num = -1
    }
    }
    (gdb) p _schema.num_column_ids()
    Cannot evaluate function -- may be inlined
    (gdb) p _schema
    $78 = (const doris::Schema &) @0x564dbaf466c0: {
    _col_ids = {
    <std::_Vector_base<unsigned int, std::allocator >> = {
    _M_impl = {
    <std::allocator> = {
    <__gnu_cxx::new_allocator> = {}, },
    <std::_Vector_base<unsigned int, std::allocator >::_Vector_impl_data> = {
    _M_start = 0x564dad483f38,
    _M_finish = 0x564dad483f40,
    _M_end_of_storage = 0x564dad483f40
    }, }
    }, },
    _cols = {
    <std::_Vector_base<doris::Field, std::allocatordoris::Field* >> = {
    _M_impl = {
    <std::allocatordoris::Field*> = {
    <__gnu_cxx::new_allocatordoris::Field*> = {}, },
    <std::_Vector_base<doris::Field*, std::allocatordoris::Field* >::_Vector_impl_data> = {
    _M_start = 0x564db292b680,
    _M_finish = 0x564db292b8b0,
    _M_end_of_storage = 0x564db292b8b0
    }, }
    }, },
    _col_offsets = {
    <std::_Vector_base<unsigned long, std::allocator >> = {
    _M_impl = {
    <std::allocator> = {
    <__gnu_cxx::new_allocator> = {}, },
    <std::_Vector_base<unsigned long, std::allocator >::_Vector_impl_data> = {
    _M_start = 0x564db292b8c0,
    _M_finish = 0x564db292baf0,
    _M_end_of_storage = 0x564db292baf0
    }, }
    }, },
    _num_key_columns = 2,
    _schema_size = 26,
    _delete_sign_idx = -1,
    _has_sequence_col = false
    }

  3. wangbo commented on May 13, 2022

    @wangbo
    Contributor

    The main reason for this bug is when delete column exits, storage schema could include delete columnid.
    But when init_current in storage layer, we will storage schema to visit query execution block(which not contain) delete column, then core happens.
    I will fix it and add a regression test for delete column.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

usercaseImportant user case type label

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions