Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
2 of 3 tasks
lide-reed opened this issue May 11, 2022 · 3 comments · Fixed by #9547
Closed
2 of 3 tasks
Assignees
Labels
usercase Important user case type label

Comments

@lide-reed
Copy link
Contributor

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

@lide-reed
Copy link
Contributor Author

image

@lide-reed
Copy link
Contributor Author

lide-reed commented May 11, 2022

(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
}

@wangbo
Copy link
Contributor

wangbo commented May 13, 2022

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
Labels
usercase Important user case type label
Projects
None yet
4 participants