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

Logical error: 'Bad cast from type DB::ColumnString to DB::ColumnLowCardinality' #57808

Closed
kssenii opened this issue Dec 13, 2023 · 0 comments · Fixed by #61879
Closed

Logical error: 'Bad cast from type DB::ColumnString to DB::ColumnLowCardinality' #57808

kssenii opened this issue Dec 13, 2023 · 0 comments · Fixed by #61879
Assignees
Labels
fuzz Problem found by one of the fuzzers

Comments

@kssenii
Copy link
Member

kssenii commented Dec 13, 2023

https://s3.amazonaws.com/clickhouse-test-reports/57754/f2336ff0253703c755dae8f53cc7c0604fb7f450/stress_test__tsan_.html

2023.12.13 02:43:51.928396 [ 4302 ] {27dae196-c217-4de3-8af6-4c3456fcd17a} <Debug> executeQuery: (from [::1]:57404) (comment: 02516_join_with_totals_and_subquery_bug.sql) SELECT * FROM ( SELECT ([toString(number % 2)] :: Array(LowCardinality(String))) AS item_id, count() FROM numbers(3) GROUP BY item_id WITH TOTALS ) AS l FULL JOIN ( SELECT ([toString((number % 2) * 2)] :: Array(String)) AS item_id FROM numbers(3) ) AS r ON l.item_id = r.item_id ORDER BY 1,2,3 ; (stage: Complete)
2023.12.13 02:43:52.002323 [ 4302 ] {27dae196-c217-4de3-8af6-4c3456fcd17a} <Trace> InterpreterSelectQuery: FetchColumns -> Complete
2023.12.13 02:43:52.003883 [ 4302 ] {27dae196-c217-4de3-8af6-4c3456fcd17a} <Debug> MergeJoin: Joining keys: left [item_id], right [r.item_id]
2023.12.13 02:43:52.023720 [ 4302 ] {27dae196-c217-4de3-8af6-4c3456fcd17a} <Trace> InterpreterSelectQuery: FetchColumns -> Complete
2023.12.13 02:43:52.025005 [ 4302 ] {27dae196-c217-4de3-8af6-4c3456fcd17a} <Trace> InterpreterSelectQuery: FetchColumns -> Complete
2023.12.13 02:43:52.025329 [ 4302 ] {27dae196-c217-4de3-8af6-4c3456fcd17a} <Debug> JoiningTransform: Before join block: 'item_id Array(LowCardinality(String)) Array(size = 0, UInt64(size = 0), ColumnLowCardinality(size = 0, UInt8(size = 0), ColumnUnique(size = 1, String(size = 1)))), count() UInt64 UInt64(size = 0)'
2023.12.13 02:43:52.025641 [ 4302 ] {27dae196-c217-4de3-8af6-4c3456fcd17a} <Debug> JoiningTransform: After join block: 'item_id Array(LowCardinality(String)) Array(size = 0, UInt64(size = 0), String(size = 0)), count() UInt64 UInt64(size = 0), r.item_id Array(String) Array(size = 0, UInt64(size = 0), String(size = 0))'
2023.12.13 02:43:52.030466 [ 4302 ] {27dae196-c217-4de3-8af6-4c3456fcd17a} <Debug> JoiningTransform: Before join block: 'item_id Array(LowCardinality(String)) Array(size = 0, UInt64(size = 0), ColumnLowCardinality(size = 0, UInt8(size = 0), ColumnUnique(size = 1, String(size = 1)))), count() UInt64 UInt64(size = 0)'
2023.12.13 02:43:52.030730 [ 4302 ] {27dae196-c217-4de3-8af6-4c3456fcd17a} <Debug> JoiningTransform: After join block: 'item_id Array(LowCardinality(String)) Array(size = 0, UInt64(size = 0), String(size = 0)), count() UInt64 UInt64(size = 0), r.item_id Array(String) Array(size = 0, UInt64(size = 0), String(size = 0))'
2023.12.13 02:43:52.051975 [ 4096 ] {27dae196-c217-4de3-8af6-4c3456fcd17a} <Trace> AggregatingTransform: Aggregating
2023.12.13 02:43:52.052153 [ 4096 ] {27dae196-c217-4de3-8af6-4c3456fcd17a} <Trace> Aggregator: Aggregation method: serialized
2023.12.13 02:43:52.052466 [ 4096 ] {27dae196-c217-4de3-8af6-4c3456fcd17a} <Trace> AggregatingTransform: Aggregated. 3 to 2 rows (from 27.00 B) in 0.01933663 sec. (155.146 rows/sec., 1.36 KiB/sec.)
2023.12.13 02:43:52.052545 [ 4096 ] {27dae196-c217-4de3-8af6-4c3456fcd17a} <Trace> Aggregator: Merging aggregated data
2023.12.13 02:43:52.052632 [ 4096 ] {27dae196-c217-4de3-8af6-4c3456fcd17a} <Trace> Aggregator: Statistics updated for key=17159025851066512695: new sum_of_sizes=2, median_size=2
2023.12.13 02:43:52.056712 [ 4302 ] {27dae196-c217-4de3-8af6-4c3456fcd17a} <Fatal> : Logical error: 'Bad cast from type DB::ColumnString to DB::ColumnLowCardinality'.

There was no stacktrace in log unfortunately.
Only from gdb.log:

2023-12-13 02:43:52 Thread 1118 "TCPHandler" received signal SIGABRT, Aborted.
2023-12-13 02:43:52 [Switching to Thread 0x7fbdb5647640 (LWP 4302)]
2023-12-13 02:43:52 0x00007fc133b5d9fc in pthread_kill () from /lib/x86_64-linux-gnu/libc.so.6
2023-12-13 02:43:52 #0  0x00007fc133b5d9fc in pthread_kill () from /lib/x86_64-linux-gnu/libc.so.6
2023-12-13 02:43:52 No symbol table info available.
2023-12-13 02:43:52 #1  0x00007fc133b09476 in raise () from /lib/x86_64-linux-gnu/libc.so.6
2023-12-13 02:43:52 No symbol table info available.
2023-12-13 02:43:52 #2  0x00007fc133aef7f3 in abort () from /lib/x86_64-linux-gnu/libc.so.6
2023-12-13 02:43:52 No symbol table info available.
2023-12-13 02:43:52 #3  0x00005604b7920033 in __interceptor_abort ()
2023-12-13 02:43:52 No symbol table info available.
2023-12-13 02:43:52 #4  0x00005604bf8dde2b in DB::abortOnFailedAssertion (description=...) at ./build_docker/./src/Common/Exception.cpp:44
2023-12-13 02:43:52 No locals.
2023-12-13 02:43:52 #5  0x00005604bf8de834 in DB::handle_error_code (msg=..., code=49, trace=..., remote=<optimized out>) at ./build_docker/./src/Common/Exception.cpp:60
2023-12-13 02:43:52 No locals.
2023-12-13 02:43:52 #6  DB::Exception::Exception (this=0x7b50006a5880, msg_masked=..., code=49, remote_=<optimized out>) at ./build_docker/./src/Common/Exception.cpp:101
2023-12-13 02:43:52 No locals.
2023-12-13 02:43:52 #7  0x00005604b79add1c in DB::Exception::Exception<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >(int, FormatStringHelperImpl<std::__1::type_identity<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::type, std::__1::type_identity<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::type>, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >&&) ()
2023-12-13 02:43:52 No symbol table info available.
2023-12-13 02:43:52 #8  0x00005604c77e271a in typeid_cast<DB::ColumnLowCardinality const&, DB::IColumn const> (from=...) at ./src/Common/typeid_cast.h:33
2023-12-13 02:43:52 No locals.
2023-12-13 02:43:52 #9  0x00005604c77dc0e5 in DB::SerializationLowCardinality::serializeBinaryBulkWithMultipleStreams (this=0x7b1400ec0508, column=..., offset=0, limit=0, settings=..., state=...) at ./build_docker/./src/DataTypes/Serializations/SerializationLowCardinality.cpp:440
2023-12-13 02:43:53         sub_column = {<boost::intrusive_ptr<DB::ColumnLowCardinality>> = {px = 0x7b0c00e397a0}, <No data fields>}
2023-12-13 02:43:53         index_version = {static NeedGlobalDictionaryBit = 256, static HasAdditionalKeysBit = 512, static NeedUpdateDictionary = 1024, type = 32, has_additional_keys = false, need_global_dictionary = false, need_update_dictionary = false}
2023-12-13 02:43:53         index_serialization = {__ptr_ = 0x6, __cntrl_ = 0x0}
2023-12-13 02:43:53         low_cardinality_column = <optimized out>
2023-12-13 02:43:53         low_cardinality_state = <optimized out>
2023-12-13 02:43:53         global_dictionary = <optimized out>
2023-12-13 02:43:53         max_limit = <optimized out>
2023-12-13 02:43:53         positions = <optimized out>
2023-12-13 02:43:53         keys = <optimized out>
2023-12-13 02:43:53         need_write_dictionary = <optimized out>
2023-12-13 02:43:53         keys_stream = <optimized out>
2023-12-13 02:43:53         indexes_stream = <optimized out>
2023-12-13 02:43:53         need_update_dictionary = <optimized out>
2023-12-13 02:43:53         need_additional_keys = <optimized out>
2023-12-13 02:43:53         need_dictionary = <optimized out>
2023-12-13 02:43:53         num_rows = <optimized out>
2023-12-13 02:43:53 #10 0x00005604c77ace0a in DB::SerializationArray::serializeBinaryBulkWithMultipleStreams (this=0x7b100102d3d8, column=..., offset=0, limit=0, settings=..., state=...) at ./build_docker/./src/DataTypes/Serializations/SerializationArray.cpp:337
2023-12-13 02:43:54         column_array = @0x7b080091be20: {<COWHelper<DB::IColumn, DB::ColumnArray>> = {<DB::IColumn> = {<COW<DB::IColumn>> = {<boost::sp_adl_block::intrusive_ref_counter<DB::IColumn, boost::sp_adl_block::thread_safe_counter>> = {m_ref_counter = {value_ = 1}}, <No data fields>}, _vptr$IColumn = 0x5604d0e454b0 <vtable for DB::ColumnArray+16>}, <No data fields>}, data = {value = {<boost::intrusive_ptr<DB::IColumn const>> = {px = 0x7b100119a9c0}, <No data fields>}}, offsets = {value = {<boost::intrusive_ptr<DB::IColumn const>> = {px = 0x7b0c00e39790}, <No data fields>}}}
2023-12-13 02:43:54         offset_values = <optimized out>
2023-12-13 02:43:54         end = <optimized out>
2023-12-13 02:43:54         nested_offset = 0
2023-12-13 02:43:54         nested_limit = <optimized out>
2023-12-13 02:43:54 #11 0x00005604ca36f7cc in DB::writeData (serialization=..., ostr=..., offset=0, limit=0, column=...) at ./build_docker/./src/Formats/NativeWriter.cpp:62
2023-12-13 02:43:54         full_column = {<boost::intrusive_ptr<DB::IColumn const>> = {px = 0x7b080091be20}, <No data fields>}
2023-12-13 02:43:54         settings = {getter = {<std::__1::__function::__maybe_derive_from_unary_function<DB::WriteBuffer *(const DB::ISerialization::SubstreamPath &)>> = {<std::__1::__unary_function_keep_layout_base<DB::ISerialization::SubstreamPath const&, DB::WriteBuffer*>> = {<No data fields>}, <No data fields>}, <std::__1::__function::__maybe_derive_from_binary_function<DB::WriteBuffer *(const DB::ISerialization::SubstreamPath &)>> = {<No data fields>}, __f_ = {__buf_ = {__small = {-24 '\350', -21 '\353', -77 '\263', 0 '\000', 52 '4', 123 '{', 0 '\000', 0 '\000', <optimized out>, <optimized out>, <optimized out>, <optimized out>, <optimized out>, <optimized out>, <optimized out>, <optimized out>}, __large = 0x7b3400b3ebe8}, __invoker_ = {__call_ = 0x5604ca370240 <std::__1::__function::__policy_invoker<DB::WriteBuffer* (DB::ISerialization::SubstreamPath const&)>::__call_impl<std::__1::__function::__default_alloc_func<DB::writeData(DB::ISerialization const&, COW<DB::IColumn>::immutable_ptr<DB::IColumn> const&, DB::WriteBuffer&, unsigned long, unsigned long)::$_0, DB::WriteBuffer* (DB::ISerialization::SubstreamPath const&)> >(std::__1::__function::__policy_storage const*, DB::ISerialization::SubstreamPath const&)>}, __policy_ = 0x5604d0e71a00 <std::__1::__function::__policy::__choose_policy[abi:v15000]<std::__1::__function::__default_alloc_func<DB::writeData(DB::ISerialization const&, COW<DB::IColumn>::immutable_ptr<DB::IColumn> const&, DB::WriteBuffer&, unsigned long, unsigned long)::$_0, DB::WriteBuffer* (DB::ISerialization::SubstreamPath const&)> >(std::__1::integral_constant<bool, true>)::__policy_>}}, path = {<std::__1::vector<DB::ISerialization::Substream, std::__1::allocator<DB::ISerialization::Substream> >> = {__begin_ = <optimized out>, __end_ = <optimized out>, __end_cap_ = {<std::__1::__compressed_pair_elem<DB::ISerialization::Substream*, 0, false>> = {__value_ = <optimized out>}, <std::__1::__compressed_pair_elem<std::__1::allocator<DB::ISerialization::Substream>, 1, true>> = {<std::__1::allocator<DB::ISerialization::Substream>> = {<std::__1::__non_trivial_if<true, std::__1::allocator<DB::ISerialization::Substream> >> = {<No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}}, <No data fields>}, low_cardinality_max_dictionary_size = 0, low_cardinality_use_single_dictionary_for_part = true, position_independent_encoding = false}
2023-12-13 02:43:54         state = {__ptr_ = 0x0, __cntrl_ = 0x0}
2023-12-13 02:43:54 #12 DB::NativeWriter::write (this=0x7b20006edc00, block=...) at ./build_docker/./src/Formats/NativeWriter.cpp:163
2023-12-13 02:43:54         column = <optimized out>
2023-12-13 02:43:54         include_version = <optimized out>
2023-12-13 02:43:54         type_name = <optimized out>
2023-12-13 02:43:54         serialization = {__ptr_ = 0x7b100102d3d8, __cntrl_ = 0x7b100102d3c0}
2023-12-13 02:43:54         mark = {offset_in_compressed_file = 0, offset_in_decompressed_block = 0}
2023-12-13 02:43:54         i = 0
2023-12-13 02:43:54         index_block = {num_columns = 0, num_rows = 140452768784448, columns = {__begin_ = 0x0, __end_ = 0x0, __end_cap_ = {<std::__1::__compressed_pair_elem<DB::IndexOfOneColumnForNativeFormat*, 0, false>> = {__value_ = 0x0}, <std::__1::__compressed_pair_elem<std::__1::allocator<DB::IndexOfOneColumnForNativeFormat>, 1, true>> = {<std::__1::allocator<DB::IndexOfOneColumnForNativeFormat>> = {<std::__1::__non_trivial_if<true, std::__1::allocator<DB::IndexOfOneColumnForNativeFormat> >> = {<No data fields>}, <No data fields>}, <No data fields>}, <No data fields>}}}
2023-12-13 02:43:54         written_before = 6230
2023-12-13 02:43:54         columns = <optimized out>
2023-12-13 02:43:54         rows = 4
2023-12-13 02:43:54         written_after = <optimized out>
2023-12-13 02:43:54         written_size = <optimized out>
2023-12-13 02:43:54 #13 0x00005604ca32c420 in DB::TCPHandler::sendData (this=this@entry=0x7b680159ba00, block=...) at ./build_docker/./src/Server/TCPHandler.cpp:2168
2023-12-13 02:43:54         prev_bytes_written_out = <optimized out>
2023-12-13 02:43:54         prev_bytes_written_compressed_out = <optimized out>
2023-12-13 02:43:54 #14 0x00005604ca3290f5 in DB::TCPHandler::processOrdinaryQueryWithProcessors (this=this@entry=0x7b680159ba00) at ./build_docker/./src/Server/TCPHandler.cpp:1019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
fuzz Problem found by one of the fuzzers
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants