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

"Amount of memory requested to allocate is more than allowed" in Variant + Map type #63582

Closed
al13n321 opened this issue May 9, 2024 · 1 comment · Fixed by #63583
Closed
Assignees
Labels
experimental feature Bug in the feature that should not be used in production

Comments

@al13n321
Copy link
Member

al13n321 commented May 9, 2024

Simplified query:

:) select [map(1, [], '', 1), map('', 1, 1, '', toUInt128(1), 1)] settings allow_experimental_analyzer=1, allow_experimental_variant_type=1, use_variant_as_common_type=1

SELECT [map(1, [], '', 1), map('', 1, 1, '', toUInt128(1), 1)]
SETTINGS allow_experimental_analyzer = 1, allow_experimental_variant_type = 1, use_variant_as_common_type = 1

Query id: 11c5bcb8-de48-4051-9196-fa6e74f5da26


Elapsed: 0.002 sec. 

Received exception from server (version 24.5.1):
Code: 173. DB::Exception: Received from localhost:9000. DB::Exception: Amount of memory requested to allocate is more than allowed. (CANNOT_ALLOCATE_MEMORY)

(It's probably supposed to fail, but not with this error.)

Stack trace:

0. ./contrib/llvm-project/libcxx/include/exception:141: Poco::Exception::Exception(String const&, int) @ 0x0000000013cbbf52
1. ./build/./src/Common/Exception.cpp:101: DB::Exception::Exception(DB::Exception::MessageMasked&&, int, bool) @ 0x000000000b19a7b9
2. DB::Exception::Exception(PreformattedMessage&&, int) @ 0x000000000656eeec
3. DB::Exception::Exception<>(int, FormatStringHelperImpl<>) @ 0x000000000657986b
4. ./build/./src/Common/PODArray.cpp:29: DB::PODArrayDetails::byte_size(unsigned long, unsigned long) @ 0x000000000b1ba8e9
5. ./src/Common/PODArray.h:250: DB::ColumnVector<unsigned long>::popBack(unsigned long) @ 0x0000000010706443
6. ./build/./src/Columns/ColumnTuple.cpp:166: DB::ColumnTuple::tryInsert(DB::Field const&) @ 0x00000000106767b6
7. ./build/./src/Columns/ColumnArray.cpp:329: DB::ColumnArray::tryInsert(DB::Field const&) @ 0x0000000010535c93
8. ./build/./src/Columns/ColumnMap.cpp:109: DB::ColumnMap::tryInsert(DB::Field const&) @ 0x0000000010635e2b
9. ./build/./src/Columns/ColumnVariant.cpp:444: DB::ColumnVariant::tryInsert(DB::Field const&) @ 0x00000000106da650
10. ./build/./src/Columns/ColumnVariant.cpp:430: DB::ColumnVariant::insert(DB::Field const&) @ 0x00000000106da4f5
11. ./build/./src/Columns/ColumnArray.cpp:315: DB::ColumnArray::insert(DB::Field const&) @ 0x0000000010535bc3
12. ./src/Common/COW.h:284: DB::IDataType::createColumnConst(unsigned long, DB::Field const&) const @ 0x000000000f30578b
13. ./contrib/boost/boost/smart_ptr/intrusive_ptr.hpp:117: DB::(anonymous namespace)::PlannerActionsVisitorImpl::visitImpl(std::shared_ptr<DB::IQueryTreeNode>) @ 0x000000000f653be6
14. ./build/./src/Planner/PlannerActionsVisitor.cpp:590: DB::PlannerActionsVisitor::visit(std::shared_ptr<DB::ActionsDAG>, std::shared_ptr<DB::IQueryTreeNode>) @ 0x000000000f65118d
15. ./contrib/llvm-project/libcxx/include/vector:951: DB::buildActionsDAGFromExpressionNode(std::shared_ptr<DB::IQueryTreeNode> const&, std::vector<DB::ColumnWithTypeAndName, std::allocator<DB::ColumnWithTypeAndName>> const&, std::shared_ptr<DB::PlannerContext> const&) @ 0x000000001005d587
16. ./build/./src/Planner/PlannerExpressionAnalysis.cpp:316: DB::buildExpressionAnalysisResult(std::shared_ptr<DB::IQueryTreeNode> const&, std::vector<DB::ColumnWithTypeAndName, std::allocator<DB::ColumnWithTypeAndName>> const&, std::shared_ptr<DB::PlannerContext> const&, DB::PlannerQueryProcessingInfo const&) @ 0x0000000010094a27
17. ./build/./src/Planner/Planner.cpp:0: DB::Planner::buildPlanForQueryNode() @ 0x00000000100494b7
18. ./contrib/llvm-project/libcxx/include/__memory/shared_ptr.h:815: DB::Planner::buildQueryPlanIfNeeded() @ 0x0000000010044e89
19. ./src/Planner/Planner.h:44: DB::InterpreterSelectQueryAnalyzer::getQueryPlan() @ 0x0000000010042fad
20. ./build/./src/Interpreters/executeQuery.cpp:1151: DB::executeQueryImpl(char const*, char const*, std::shared_ptr<DB::Context>, DB::QueryFlags, DB::QueryProcessingStage::Enum, DB::ReadBuffer*) @ 0x00000000103ea37a
21. ./build/./src/Interpreters/executeQuery.cpp:1393: DB::executeQuery(String const&, std::shared_ptr<DB::Context>, DB::QueryFlags, DB::QueryProcessingStage::Enum) @ 0x00000000103e70d5
22. ./contrib/llvm-project/libcxx/include/__memory/shared_ptr.h:612: DB::TCPHandler::runImpl() @ 0x00000000113e6a44
23. ./contrib/llvm-project/libcxx/include/__memory/shared_ptr.h:593: DB::TCPHandler::run() @ 0x00000000113fde39
24. ./build/./base/poco/Net/src/TCPServerConnection.cpp:57: Poco::Net::TCPServerConnection::start() @ 0x0000000013bd8c47
25. ./contrib/llvm-project/libcxx/include/__memory/unique_ptr.h:48: Poco::Net::TCPServerDispatcher::run() @ 0x0000000013bd911a
26. ./build/./base/poco/Foundation/src/ThreadPool.cpp:202: Poco::PooledThread::run() @ 0x0000000013d11847
27. ./base/poco/Foundation/include/Poco/SharedPtr.h:139: Poco::ThreadImpl::runnableEntry(void*) @ 0x0000000013d0f463
28. ? @ 0x00007ffff7c94ac3
29. ? @ 0x00007ffff7d26850

I.e. ColumnTuple::tryInsert() inserts to some of the columns, then tries to undo these inserts using popBack(), but the columns is empty somehow.


Original fuzzer error is slightly different but probably has the same root cause: https://s3.amazonaws.com/clickhouse-test-reports/62104/df5cca373ae89741a4eadf27ff9884ca369948de/ast_fuzzer__ubsan_.html

2024.05.07 00:20:59.503567 [ 960 ] {} <Fatal> BaseDaemon: ########## Short fault info ############
2024.05.07 00:20:59.503590 [ 960 ] {} <Fatal> BaseDaemon: (version 24.5.1.532, build id: 0C64688047A06043D3A5ADF507328CC00D2F55DD, git hash: 92059693c2aeab904e5f6b73f730be9320d16c0b) (from thread 167) Received signal -3
2024.05.07 00:20:59.503599 [ 960 ] {} <Fatal> BaseDaemon: Signal description: sanitizer trap
2024.05.07 00:20:59.503605 [ 960 ] {} <Fatal> BaseDaemon: Sanitizer trap.
2024.05.07 00:20:59.503619 [ 960 ] {} <Fatal> BaseDaemon: Stack trace: 0x000055a042d52c57 0x000055a043178185 0x000055a03691f186 0x000055a03692b39f 0x000055a05047d57a 0x000055a05043e8c3 0x000055a0502f0b4a 0x000055a050058cf8 0x000055a05026299e 0x000055a0504374f7 0x000055a050437191 0x000055a05005847b 0x000055a04dc018c4 0x000055a04e288282 0x000055a04e27ff90 0x000055a04f741c7b 0x000055a04f7b0ce8 0x000055a04f718ade 0x000055a04f711064 0x000055a04f70d2cf 0x000055a04fdebe32 0x000055a04fde5487 0x000055a051b7a7e6 0x000055a051bb4e96 0x000055a054eccd9e 0x000055a054ecdeba 0x000055a05513a050 0x000055a055135151 0x00007f0d29398ac3 0x00007f0d2942a850
2024.05.07 00:20:59.503633 [ 960 ] {} <Fatal> BaseDaemon: ########################################
2024.05.07 00:20:59.503728 [ 960 ] {} <Fatal> BaseDaemon: (version 24.5.1.532, build id: 0C64688047A06043D3A5ADF507328CC00D2F55DD, git hash: 92059693c2aeab904e5f6b73f730be9320d16c0b) (from thread 167) (query_id: 80b7b2e4-a18b-4201-a2cb-27ac8b6d28d7) (query: SELECT   5, [map('a', toUInt128(toNullable(1)), 1, toFixedString('b', 1), 1, [1, 2, 3], 'c', 1, 1, [[4, 5, 6]]), map('a', 1, 1, toFixedString(toLowCardinality(toNullable('b')), 1), toUInt128(1), 1, 1, 'c', 1, [[4, 5, 6]]), 'str_2', toNullable(5)] GROUP BY             toNullable('str_1'),  toNullable(5),   toUInt256(5),         'str_1',     materialize(materialize(toUInt256(5))) WITH TOTALS) Received signal sanitizer trap (-3)
2024.05.07 00:20:59.503773 [ 960 ] {} <Fatal> BaseDaemon: Sanitizer trap.
2024.05.07 00:20:59.503819 [ 960 ] {} <Fatal> BaseDaemon: Stack trace: 0x000055a042d52c57 0x000055a043178185 0x000055a03691f186 0x000055a03692b39f 0x000055a05047d57a 0x000055a05043e8c3 0x000055a0502f0b4a 0x000055a050058cf8 0x000055a05026299e 0x000055a0504374f7 0x000055a050437191 0x000055a05005847b 0x000055a04dc018c4 0x000055a04e288282 0x000055a04e27ff90 0x000055a04f741c7b 0x000055a04f7b0ce8 0x000055a04f718ade 0x000055a04f711064 0x000055a04f70d2cf 0x000055a04fdebe32 0x000055a04fde5487 0x000055a051b7a7e6 0x000055a051bb4e96 0x000055a054eccd9e 0x000055a054ecdeba 0x000055a05513a050 0x000055a055135151 0x00007f0d29398ac3 0x00007f0d2942a850
2024.05.07 00:20:59.515860 [ 960 ] {} <Fatal> BaseDaemon: 0. ./build_docker/./src/Common/StackTrace.cpp:347: StackTrace::tryCapture() @ 0x00000000248e4c57
2024.05.07 00:20:59.544442 [ 960 ] {} <Fatal> BaseDaemon: 1. ./src/Common/StackTrace.h:0: sanitizerDeathCallback() @ 0x0000000024d0a185
2024.05.07 00:21:00.503898 [ 960 ] {} <Fatal> BaseDaemon: 2. __sanitizer::Die() @ 0x00000000184b1186
2024.05.07 00:21:01.424441 [ 960 ] {} <Fatal> BaseDaemon: 3. ? @ 0x00000000184bd39f
2024.05.07 00:21:02.352049 [ 960 ] {} <Fatal> BaseDaemon: 4. ? @ 0x000000003200f57a
2024.05.07 00:21:02.374079 [ 960 ] {} <Fatal> BaseDaemon: 5. ./build_docker/./src/Columns/ColumnVariant.cpp:0: DB::ColumnVariant::popBack(unsigned long) @ 0x0000000031fd08c3
2024.05.07 00:21:02.386683 [ 960 ] {} <Fatal> BaseDaemon: 6. ./build_docker/./src/Columns/ColumnTuple.cpp:166: DB::ColumnTuple::tryInsert(DB::Field const&) @ 0x0000000031e82b4a
2024.05.07 00:21:02.405070 [ 960 ] {} <Fatal> BaseDaemon: 7. ./build_docker/./src/Columns/ColumnArray.cpp:329: DB::ColumnArray::tryInsert(DB::Field const&) @ 0x0000000031beacf8
2024.05.07 00:21:02.414584 [ 960 ] {} <Fatal> BaseDaemon: 8. ./build_docker/./src/Columns/ColumnMap.cpp:109: DB::ColumnMap::tryInsert(DB::Field const&) @ 0x0000000031df499e
2024.05.07 00:21:02.434316 [ 960 ] {} <Fatal> BaseDaemon: 9. ./build_docker/./src/Columns/ColumnVariant.cpp:444: DB::ColumnVariant::tryInsert(DB::Field const&) @ 0x0000000031fc94f7
2024.05.07 00:21:02.453848 [ 960 ] {} <Fatal> BaseDaemon: 10. ./build_docker/./src/Columns/ColumnVariant.cpp:430: DB::ColumnVariant::insert(DB::Field const&) @ 0x0000000031fc9191
2024.05.07 00:21:02.471929 [ 960 ] {} <Fatal> BaseDaemon: 11. ./build_docker/./src/Columns/ColumnArray.cpp:315: DB::ColumnArray::insert(DB::Field const&) @ 0x0000000031bea47b
2024.05.07 00:21:02.479034 [ 960 ] {} <Fatal> BaseDaemon: 12. ./build_docker/./src/DataTypes/IDataType.cpp:0: DB::IDataType::createColumnConst(unsigned long, DB::Field const&) const @ 0x000000002f7938c4
2024.05.07 00:21:02.511604 [ 960 ] {} <Fatal> BaseDaemon: 13.0. inlined from ./contrib/boost/boost/smart_ptr/intrusive_ptr.hpp:117: intrusive_ptr
2024.05.07 00:21:02.511624 [ 960 ] {} <Fatal> BaseDaemon: 13.1. inlined from ./contrib/boost/boost/smart_ptr/intrusive_ptr.hpp:124: boost::intrusive_ptr<DB::IColumn const>::operator=(boost::intrusive_ptr<DB::IColumn const>&&)
2024.05.07 00:21:02.511664 [ 960 ] {} <Fatal> BaseDaemon: 13.2. inlined from ./src/Common/COW.h:136: COW<DB::IColumn>::immutable_ptr<DB::IColumn>::operator=(COW<DB::IColumn>::immutable_ptr<DB::IColumn>&&)
2024.05.07 00:21:02.511706 [ 960 ] {} <Fatal> BaseDaemon: 13.3. inlined from ./build_docker/./src/Planner/PlannerActionsVisitor.cpp:697: DB::(anonymous namespace)::PlannerActionsVisitorImpl::visitConstant(std::shared_ptr<DB::IQueryTreeNode> const&)
2024.05.07 00:21:02.511748 [ 960 ] {} <Fatal> BaseDaemon: 13. ./build_docker/./src/Planner/PlannerActionsVisitor.cpp:609: DB::(anonymous namespace)::PlannerActionsVisitorImpl::visitImpl(std::shared_ptr<DB::IQueryTreeNode>) @ 0x000000002fe1a282
2024.05.07 00:21:02.542903 [ 960 ] {} <Fatal> BaseDaemon: 14.0. inlined from ./contrib/llvm-project/libcxx/include/vector:556: std::vector<DB::(anonymous namespace)::ActionsScopeNode, std::allocator<DB::(anonymous namespace)::ActionsScopeNode>>::front[abi:v15000]()
2024.05.07 00:21:02.542921 [ 960 ] {} <Fatal> BaseDaemon: 14.1. inlined from ./build_docker/./src/Planner/PlannerActionsVisitor.cpp:590: DB::(anonymous namespace)::PlannerActionsVisitorImpl::visit(std::shared_ptr<DB::IQueryTreeNode>)
2024.05.07 00:21:02.542963 [ 960 ] {} <Fatal> BaseDaemon: 14. ./build_docker/./src/Planner/PlannerActionsVisitor.cpp:992: DB::PlannerActionsVisitor::visit(std::shared_ptr<DB::ActionsDAG>, std::shared_ptr<DB::IQueryTreeNode>) @ 0x000000002fe11f90
2024.05.07 00:21:02.573544 [ 960 ] {} <Fatal> BaseDaemon: 15. ./build_docker/./src/Planner/Utils.cpp:222: DB::buildActionsDAGFromExpressionNode(std::shared_ptr<DB::IQueryTreeNode> const&, std::vector<DB::ColumnWithTypeAndName, std::allocator<DB::ColumnWithTypeAndName>> const&, std::shared_ptr<DB::PlannerContext> const&) @ 0x00000000312d3c7b
2024.05.07 00:21:02.599639 [ 960 ] {} <Fatal> BaseDaemon: 16.0. inlined from ./build_docker/./src/Planner/PlannerExpressionAnalysis.cpp:316: DB::(anonymous namespace)::analyzeProjection(DB::QueryNode const&, std::vector<DB::ColumnWithTypeAndName, std::allocator<DB::ColumnWithTypeAndName>> const&, std::shared_ptr<DB::PlannerContext> const&, DB::ActionsChain&)
2024.05.07 00:21:02.599658 [ 960 ] {} <Fatal> BaseDaemon: 16. ./build_docker/./src/Planner/PlannerExpressionAnalysis.cpp:526: DB::buildExpressionAnalysisResult(std::shared_ptr<DB::IQueryTreeNode> const&, std::vector<DB::ColumnWithTypeAndName, std::allocator<DB::ColumnWithTypeAndName>> const&, std::shared_ptr<DB::PlannerContext> const&, DB::PlannerQueryProcessingInfo const&) @ 0x0000000031342ce8
2024.05.07 00:21:02.650029 [ 960 ] {} <Fatal> BaseDaemon: 17.0. inlined from ./contrib/llvm-project/libcxx/include/vector:1222: vector
2024.05.07 00:21:02.650046 [ 960 ] {} <Fatal> BaseDaemon: 17. ./build_docker/./src/Planner/Planner.cpp:1525: DB::Planner::buildPlanForQueryNode() @ 0x00000000312aaade
2024.05.07 00:21:02.697945 [ 960 ] {} <Fatal> BaseDaemon: 18.0. inlined from ./contrib/llvm-project/libcxx/include/__memory/shared_ptr.h:815: std::shared_ptr<DB::PlannerContext>::operator->[abi:v15000]() const
2024.05.07 00:21:02.697970 [ 960 ] {} <Fatal> BaseDaemon: 18.1. inlined from ./build_docker/./src/Planner/Planner.cpp:248: DB::(anonymous namespace)::extendQueryContextAndStoragesLifetime(DB::QueryPlan&, std::shared_ptr<DB::PlannerContext> const&)
2024.05.07 00:21:02.698019 [ 960 ] {} <Fatal> BaseDaemon: 18. ./build_docker/./src/Planner/Planner.cpp:1242: DB::Planner::buildQueryPlanIfNeeded() @ 0x00000000312a3064
2024.05.07 00:21:02.715256 [ 960 ] {} <Fatal> BaseDaemon: 19. ./build_docker/./src/Interpreters/InterpreterSelectQueryAnalyzer.cpp:206: DB::InterpreterSelectQueryAnalyzer::getQueryPlan() @ 0x000000003129f2cf
2024.05.07 00:21:02.768340 [ 960 ] {} <Fatal> BaseDaemon: 20.0. inlined from ./contrib/llvm-project/libcxx/include/__memory/unique_ptr.h:274: std::unique_ptr<DB::IInterpreter, std::default_delete<DB::IInterpreter>>::operator->[abi:v15000]() const
2024.05.07 00:21:02.768373 [ 960 ] {} <Fatal> BaseDaemon: 20. ./build_docker/./src/Interpreters/executeQuery.cpp:1150: DB::executeQueryImpl(char const*, char const*, std::shared_ptr<DB::Context>, DB::QueryFlags, DB::QueryProcessingStage::Enum, DB::ReadBuffer*) @ 0x000000003197de32
2024.05.07 00:21:02.826196 [ 960 ] {} <Fatal> BaseDaemon: 21. ./build_docker/./src/Interpreters/executeQuery.cpp:1392: DB::executeQuery(String const&, std::shared_ptr<DB::Context>, DB::QueryFlags, DB::QueryProcessingStage::Enum) @ 0x0000000031977487
2024.05.07 00:21:02.867376 [ 960 ] {} <Fatal> BaseDaemon: 22. ./build_docker/./src/Server/TCPHandler.cpp:0: DB::TCPHandler::runImpl() @ 0x000000003370c7e6
2024.05.07 00:21:02.932316 [ 960 ] {} <Fatal> BaseDaemon: 23. ./build_docker/./src/Server/TCPHandler.cpp:2343: DB::TCPHandler::run() @ 0x0000000033746e96
2024.05.07 00:21:02.934021 [ 960 ] {} <Fatal> BaseDaemon: 24. ./build_docker/./base/poco/Net/src/TCPServerConnection.cpp:57: Poco::Net::TCPServerConnection::start() @ 0x0000000036a5ed9e
2024.05.07 00:21:02.937144 [ 960 ] {} <Fatal> BaseDaemon: 25.0. inlined from ./contrib/llvm-project/libcxx/include/__memory/unique_ptr.h:302: std::unique_ptr<Poco::Net::TCPServerConnection, std::default_delete<Poco::Net::TCPServerConnection>>::reset[abi:v15000](Poco::Net::TCPServerConnection*)
2024.05.07 00:21:02.937163 [ 960 ] {} <Fatal> BaseDaemon: 25.1. inlined from ./contrib/llvm-project/libcxx/include/__memory/unique_ptr.h:259: ~unique_ptr
2024.05.07 00:21:02.937202 [ 960 ] {} <Fatal> BaseDaemon: 25. ./build_docker/./base/poco/Net/src/TCPServerDispatcher.cpp:116: Poco::Net::TCPServerDispatcher::run() @ 0x0000000036a5feba
2024.05.07 00:21:02.940446 [ 960 ] {} <Fatal> BaseDaemon: 26. ./build_docker/./base/poco/Foundation/src/ThreadPool.cpp:202: Poco::PooledThread::run() @ 0x0000000036ccc050
2024.05.07 00:21:02.943545 [ 960 ] {} <Fatal> BaseDaemon: 27.0. inlined from ./base/poco/Foundation/include/Poco/AutoPtr.h:205: Poco::AutoPtr<Poco::ThreadImpl::ThreadData>::operator->()
2024.05.07 00:21:02.943562 [ 960 ] {} <Fatal> BaseDaemon: 27. ./base/poco/Foundation/src/Thread_POSIX.cpp:350: Poco::ThreadImpl::runnableEntry(void*) @ 0x0000000036cc7151
2024.05.07 00:21:02.943597 [ 960 ] {} <Fatal> BaseDaemon: 28. ? @ 0x00007f0d29398ac3
2024.05.07 00:21:02.943636 [ 960 ] {} <Fatal> BaseDaemon: 29. ? @ 0x00007f0d2942a850
2024.05.07 00:21:02.943677 [ 960 ] {} <Fatal> BaseDaemon: Integrity check of the executable skipped because the reference checksum could not be read.
2024.05.07 00:21:06.363830 [ 960 ] {} <Fatal> BaseDaemon: Changed settings: receive_timeout = 10., receive_data_timeout_ms = 10000, s3_truncate_on_insert = true, allow_suspicious_low_cardinality_types = true, log_queries = true, table_function_remote_max_addresses = 200, allow_experimental_analyzer = true, max_execution_time = 10., max_memory_usage = 10000000000, log_comment = '/workspace/ch/tests/queries/0_stateless/02944_variant_as_common_type_analyzer.sql', allow_introspection_functions = true, use_variant_as_common_type = true, allow_experimental_variant_type = true, input_format_json_infer_incomplete_types_as_strings = true
@alexey-milovidov alexey-milovidov added the experimental feature Bug in the feature that should not be used in production label May 9, 2024
@al13n321 al13n321 self-assigned this May 9, 2024
@al13n321
Copy link
Member Author

al13n321 commented May 9, 2024

Oh, wait, this is trivial, I spent longer writing up this issue than it would take to spot the typo in the code...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
experimental feature Bug in the feature that should not be used in production
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants