Repository navigation
Description
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
- I agree to follow this project's Code of Conduct
Activity
lide-reed commentedon May 11, 2022
lide-reed commentedon 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 commentedon 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.