Skip to content

Commit 0e73049

Browse files
authored
ref(gnu-integration): update clickhouse stacktrace parsing (#4598)
This integration was added back in 2019 #288 but I think since then the stack trace from clickhouse driver has changed, anyway I tried to update it so that it parses the stack trace again
1 parent ca3241e commit 0e73049

File tree

2 files changed

+29
-87
lines changed

2 files changed

+29
-87
lines changed

sentry_sdk/integrations/gnu_backtrace.py

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,12 @@
1212
from sentry_sdk._types import Event
1313

1414

15-
MODULE_RE = r"[a-zA-Z0-9/._:\\-]+"
16-
TYPE_RE = r"[a-zA-Z0-9._:<>,-]+"
17-
HEXVAL_RE = r"[A-Fa-f0-9]+"
18-
15+
FUNCTION_RE = r"[^@]+?)\s+@\s+0x[0-9a-fA-F]+"
1916

2017
FRAME_RE = r"""
21-
^(?P<index>\d+)\.\s
22-
(?P<package>{MODULE_RE})\(
23-
(?P<retval>{TYPE_RE}\ )?
24-
((?P<function>{TYPE_RE})
25-
(?P<args>\(.*\))?
26-
)?
27-
((?P<constoffset>\ const)?\+0x(?P<offset>{HEXVAL_RE}))?
28-
\)\s
29-
\[0x(?P<retaddr>{HEXVAL_RE})\]$
18+
^(?P<index>\d+)\.\s+(?P<function>{FUNCTION_RE}\s+in\s+(?P<package>.+)$
3019
""".format(
31-
MODULE_RE=MODULE_RE, HEXVAL_RE=HEXVAL_RE, TYPE_RE=TYPE_RE
20+
FUNCTION_RE=FUNCTION_RE,
3221
)
3322

3423
FRAME_RE = re.compile(FRAME_RE, re.MULTILINE | re.VERBOSE)

tests/integrations/test_gnu_backtrace.py

Lines changed: 26 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -4,74 +4,31 @@
44
from sentry_sdk.integrations.gnu_backtrace import GnuBacktraceIntegration
55

66
LINES = r"""
7-
0. clickhouse-server(StackTrace::StackTrace()+0x16) [0x99d31a6]
8-
1. clickhouse-server(DB::Exception::Exception(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)+0x22) [0x372c822]
9-
10. clickhouse-server(DB::ActionsVisitor::visit(std::shared_ptr<DB::IAST> const&)+0x1a12) [0x6ae45d2]
10-
10. clickhouse-server(DB::InterpreterSelectQuery::executeImpl(DB::InterpreterSelectQuery::Pipeline&, std::shared_ptr<DB::IBlockInputStream> const&, bool)+0x11af) [0x75c68ff]
11-
10. clickhouse-server(ThreadPoolImpl<std::thread>::worker(std::_List_iterator<std::thread>)+0x1ab) [0x6f90c1b]
12-
11. clickhouse-server() [0xae06ddf]
13-
11. clickhouse-server(DB::ExpressionAnalyzer::getRootActions(std::shared_ptr<DB::IAST> const&, bool, std::shared_ptr<DB::ExpressionActions>&, bool)+0xdb) [0x6a0a63b]
14-
11. clickhouse-server(DB::InterpreterSelectQuery::InterpreterSelectQuery(std::shared_ptr<DB::IAST> const&, DB::Context const&, std::shared_ptr<DB::IBlockInputStream> const&, std::shared_ptr<DB::IStorage> const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, DB::QueryProcessingStage::Enum, unsigned long, bool)+0x5e6) [0x75c7516]
15-
12. /lib/x86_64-linux-gnu/libpthread.so.0(+0x8184) [0x7f3bbc568184]
16-
12. clickhouse-server(DB::ExpressionAnalyzer::getConstActions()+0xc9) [0x6a0b059]
17-
12. clickhouse-server(DB::InterpreterSelectQuery::InterpreterSelectQuery(std::shared_ptr<DB::IAST> const&, DB::Context const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, DB::QueryProcessingStage::Enum, unsigned long, bool)+0x56) [0x75c8276]
18-
13. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7f3bbbb8303d]
19-
13. clickhouse-server(DB::InterpreterSelectWithUnionQuery::InterpreterSelectWithUnionQuery(std::shared_ptr<DB::IAST> const&, DB::Context const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, DB::QueryProcessingStage::Enum, unsigned long, bool)+0x7e7) [0x75d4067]
20-
13. clickhouse-server(DB::evaluateConstantExpression(std::shared_ptr<DB::IAST> const&, DB::Context const&)+0x3ed) [0x656bfdd]
21-
14. clickhouse-server(DB::InterpreterFactory::get(std::shared_ptr<DB::IAST>&, DB::Context&, DB::QueryProcessingStage::Enum)+0x3a8) [0x75b0298]
22-
14. clickhouse-server(DB::makeExplicitSet(DB::ASTFunction const*, DB::Block const&, bool, DB::Context const&, DB::SizeLimits const&, std::unordered_map<DB::PreparedSetKey, std::shared_ptr<DB::Set>, DB::PreparedSetKey::Hash, std::equal_to<DB::PreparedSetKey>, std::allocator<std::pair<DB::PreparedSetKey const, std::shared_ptr<DB::Set> > > >&)+0x382) [0x6adf692]
23-
15. clickhouse-server() [0x7664c79]
24-
15. clickhouse-server(DB::ActionsVisitor::makeSet(DB::ASTFunction const*, DB::Block const&)+0x2a7) [0x6ae2227]
25-
16. clickhouse-server(DB::ActionsVisitor::visit(std::shared_ptr<DB::IAST> const&)+0x1973) [0x6ae4533]
26-
16. clickhouse-server(DB::executeQuery(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, DB::Context&, bool, DB::QueryProcessingStage::Enum)+0x8a) [0x76669fa]
27-
17. clickhouse-server(DB::ActionsVisitor::visit(std::shared_ptr<DB::IAST> const&)+0x1324) [0x6ae3ee4]
28-
17. clickhouse-server(DB::TCPHandler::runImpl()+0x4b9) [0x30973c9]
29-
18. clickhouse-server(DB::ExpressionAnalyzer::getRootActions(std::shared_ptr<DB::IAST> const&, bool, std::shared_ptr<DB::ExpressionActions>&, bool)+0xdb) [0x6a0a63b]
30-
18. clickhouse-server(DB::TCPHandler::run()+0x2b) [0x30985ab]
31-
19. clickhouse-server(DB::ExpressionAnalyzer::appendGroupBy(DB::ExpressionActionsChain&, bool)+0x100) [0x6a0b4f0]
32-
19. clickhouse-server(Poco::Net::TCPServerConnection::start()+0xf) [0x9b53e4f]
33-
2. clickhouse-server(DB::FunctionTuple::getReturnTypeImpl(std::vector<std::shared_ptr<DB::IDataType const>, std::allocator<std::shared_ptr<DB::IDataType const> > > const&) const+0x122) [0x3a2a0f2]
34-
2. clickhouse-server(DB::readException(DB::Exception&, DB::ReadBuffer&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)+0x21f) [0x6fb253f]
35-
2. clickhouse-server(void DB::readDateTimeTextFallback<void>(long&, DB::ReadBuffer&, DateLUTImpl const&)+0x318) [0x99ffed8]
36-
20. clickhouse-server(DB::InterpreterSelectQuery::analyzeExpressions(DB::QueryProcessingStage::Enum, bool)+0x364) [0x6437fa4]
37-
20. clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0x16a) [0x9b5422a]
38-
21. clickhouse-server(DB::InterpreterSelectQuery::executeImpl(DB::InterpreterSelectQuery::Pipeline&, std::shared_ptr<DB::IBlockInputStream> const&, bool)+0x36d) [0x643c28d]
39-
21. clickhouse-server(Poco::PooledThread::run()+0x77) [0x9c70f37]
40-
22. clickhouse-server(DB::InterpreterSelectQuery::executeWithMultipleStreams()+0x50) [0x643ecd0]
41-
22. clickhouse-server(Poco::ThreadImpl::runnableEntry(void*)+0x38) [0x9c6caa8]
42-
23. clickhouse-server() [0xa3c68cf]
43-
23. clickhouse-server(DB::InterpreterSelectWithUnionQuery::executeWithMultipleStreams()+0x6c) [0x644805c]
44-
24. /lib/x86_64-linux-gnu/libpthread.so.0(+0x8184) [0x7fe839d2d184]
45-
24. clickhouse-server(DB::InterpreterSelectWithUnionQuery::execute()+0x38) [0x6448658]
46-
25. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d) [0x7fe83934803d]
47-
25. clickhouse-server() [0x65744ef]
48-
26. clickhouse-server(DB::executeQuery(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, DB::Context&, bool, DB::QueryProcessingStage::Enum, bool)+0x81) [0x6576141]
49-
27. clickhouse-server(DB::TCPHandler::runImpl()+0x752) [0x3739f82]
50-
28. clickhouse-server(DB::TCPHandler::run()+0x2b) [0x373a5cb]
51-
29. clickhouse-server(Poco::Net::TCPServerConnection::start()+0xf) [0x708e63f]
52-
3. clickhouse-server(DB::Connection::receiveException()+0x81) [0x67d3ad1]
53-
3. clickhouse-server(DB::DefaultFunctionBuilder::getReturnTypeImpl(std::vector<DB::ColumnWithTypeAndName, std::allocator<DB::ColumnWithTypeAndName> > const&) const+0x223) [0x38ac3b3]
54-
3. clickhouse-server(DB::FunctionComparison<DB::NotEqualsOp, DB::NameNotEquals>::executeDateOrDateTimeOrEnumOrUUIDWithConstString(DB::Block&, unsigned long, DB::IColumn const*, DB::IColumn const*, std::shared_ptr<DB::IDataType const> const&, std::shared_ptr<DB::IDataType const> const&, bool, unsigned long)+0xbb3) [0x411dee3]
55-
30. clickhouse-server(Poco::Net::TCPServerDispatcher::run()+0xe9) [0x708ed79]
56-
31. clickhouse-server(Poco::PooledThread::run()+0x81) [0x7142011]
57-
4. clickhouse-server(DB::Connection::receivePacket()+0x767) [0x67d9cd7]
58-
4. clickhouse-server(DB::FunctionBuilderImpl::getReturnTypeWithoutLowCardinality(std::vector<DB::ColumnWithTypeAndName, std::allocator<DB::ColumnWithTypeAndName> > const&) const+0x75) [0x6869635]
59-
4. clickhouse-server(DB::FunctionComparison<DB::NotEqualsOp, DB::NameNotEquals>::executeImpl(DB::Block&, std::vector<unsigned long, std::allocator<unsigned long> > const&, unsigned long, unsigned long)+0x576) [0x41ab006]
60-
5. clickhouse-server(DB::FunctionBuilderImpl::getReturnType(std::vector<DB::ColumnWithTypeAndName, std::allocator<DB::ColumnWithTypeAndName> > const&) const+0x350) [0x6869f10]
61-
5. clickhouse-server(DB::MultiplexedConnections::receivePacket()+0x7e) [0x67e7ede]
62-
5. clickhouse-server(DB::PreparedFunctionImpl::execute(DB::Block&, std::vector<unsigned long, std::allocator<unsigned long> > const&, unsigned long, unsigned long)+0x3e2) [0x7933492]
63-
6. clickhouse-server(DB::ExpressionAction::execute(DB::Block&, std::unordered_map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, unsigned long, std::hash<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::equal_to<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, unsigned long> > >&) const+0x61a) [0x7ae093a]
64-
6. clickhouse-server(DB::FunctionBuilderImpl::build(std::vector<DB::ColumnWithTypeAndName, std::allocator<DB::ColumnWithTypeAndName> > const&) const+0x3c) [0x38accfc]
65-
6. clickhouse-server(DB::RemoteBlockInputStream::readImpl()+0x87) [0x631da97]
66-
7. clickhouse-server(DB::ExpressionActions::addImpl(DB::ExpressionAction, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)+0x552) [0x6a00052]
67-
7. clickhouse-server(DB::ExpressionActions::execute(DB::Block&) const+0xe6) [0x7ae1e06]
68-
7. clickhouse-server(DB::IBlockInputStream::read()+0x178) [0x63075e8]
69-
8. clickhouse-server(DB::ExpressionActions::add(DB::ExpressionAction const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)+0x42) [0x6a00422]
70-
8. clickhouse-server(DB::FilterBlockInputStream::FilterBlockInputStream(std::shared_ptr<DB::IBlockInputStream> const&, std::shared_ptr<DB::ExpressionActions> const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)+0x711) [0x79970d1]
71-
8. clickhouse-server(DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::thread(std::shared_ptr<DB::ThreadGroupStatus>, unsigned long)+0x2f1) [0x64467c1]
72-
9. clickhouse-server() [0x75bd5a3]
73-
9. clickhouse-server(DB::ScopeStack::addAction(DB::ExpressionAction const&)+0xd2) [0x6ae04d2]
74-
9. clickhouse-server(ThreadFromGlobalPool::ThreadFromGlobalPool<DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::process()::{lambda()#1}>(DB::ParallelInputsProcessor<DB::UnionBlockInputStream::Handler>::process()::{lambda()#1}&&)::{lambda()#1}::operator()() const+0x6d) [0x644722d]
7+
0. DB::Exception::Exception(DB::Exception::MessageMasked&&, int, bool) @ 0x000000000bfc38a4 in /usr/bin/clickhouse
8+
1. DB::Exception::Exception<String, String>(int, FormatStringHelperImpl<std::type_identity<String>::type, std::type_identity<String>::type>, String&&, String&&) @ 0x00000000075d242c in /usr/bin/clickhouse
9+
2. DB::ActionsMatcher::visit(DB::ASTIdentifier const&, std::shared_ptr<DB::IAST> const&, DB::ActionsMatcher::Data&) @ 0x0000000010b1c648 in /usr/bin/clickhouse
10+
3. DB::ActionsMatcher::visit(DB::ASTFunction const&, std::shared_ptr<DB::IAST> const&, DB::ActionsMatcher::Data&) @ 0x0000000010b1f58c in /usr/bin/clickhouse
11+
4. DB::ActionsMatcher::visit(DB::ASTFunction const&, std::shared_ptr<DB::IAST> const&, DB::ActionsMatcher::Data&) @ 0x0000000010b1f58c in /usr/bin/clickhouse
12+
5. DB::ActionsMatcher::visit(std::shared_ptr<DB::IAST> const&, DB::ActionsMatcher::Data&) @ 0x0000000010b1c394 in /usr/bin/clickhouse
13+
6. DB::InDepthNodeVisitor<DB::ActionsMatcher, true, false, std::shared_ptr<DB::IAST> const>::doVisit(std::shared_ptr<DB::IAST> const&) @ 0x0000000010b154a0 in /usr/bin/clickhouse
14+
7. DB::ExpressionAnalyzer::getRootActions(std::shared_ptr<DB::IAST> const&, bool, std::shared_ptr<DB::ActionsDAG>&, bool) @ 0x0000000010af83b4 in /usr/bin/clickhouse
15+
8. DB::SelectQueryExpressionAnalyzer::appendSelect(DB::ExpressionActionsChain&, bool) @ 0x0000000010aff168 in /usr/bin/clickhouse
16+
9. DB::ExpressionAnalysisResult::ExpressionAnalysisResult(DB::SelectQueryExpressionAnalyzer&, std::shared_ptr<DB::StorageInMemoryMetadata const> const&, bool, bool, bool, std::shared_ptr<DB::FilterDAGInfo> const&, std::shared_ptr<DB::FilterDAGInfo> const&, DB::Block const&) @ 0x0000000010b05b74 in /usr/bin/clickhouse
17+
10. DB::InterpreterSelectQuery::getSampleBlockImpl() @ 0x00000000111559fc in /usr/bin/clickhouse
18+
11. DB::InterpreterSelectQuery::InterpreterSelectQuery(std::shared_ptr<DB::IAST> const&, std::shared_ptr<DB::Context> const&, std::optional<DB::Pipe>, std::shared_ptr<DB::IStorage> const&, DB::SelectQueryOptions const&, std::vector<String, std::allocator<String>> const&, std::shared_ptr<DB::StorageInMemoryMetadata const> const&, std::shared_ptr<DB::PreparedSets>)::$_0::operator()(bool) const @ 0x0000000011148254 in /usr/bin/clickhouse
19+
12. DB::InterpreterSelectQuery::InterpreterSelectQuery(std::shared_ptr<DB::IAST> const&, std::shared_ptr<DB::Context> const&, std::optional<DB::Pipe>, std::shared_ptr<DB::IStorage> const&, DB::SelectQueryOptions const&, std::vector<String, std::allocator<String>> const&, std::shared_ptr<DB::StorageInMemoryMetadata const> const&, std::shared_ptr<DB::PreparedSets>) @ 0x00000000111413e8 in /usr/bin/clickhouse
20+
13. DB::InterpreterSelectWithUnionQuery::InterpreterSelectWithUnionQuery(std::shared_ptr<DB::IAST> const&, std::shared_ptr<DB::Context>, DB::SelectQueryOptions const&, std::vector<String, std::allocator<String>> const&) @ 0x00000000111d3708 in /usr/bin/clickhouse
21+
14. DB::InterpreterFactory::get(std::shared_ptr<DB::IAST>&, std::shared_ptr<DB::Context>, DB::SelectQueryOptions const&) @ 0x0000000011100b64 in /usr/bin/clickhouse
22+
15. DB::executeQueryImpl(char const*, char const*, std::shared_ptr<DB::Context>, bool, DB::QueryProcessingStage::Enum, DB::ReadBuffer*) @ 0x00000000114c3f3c in /usr/bin/clickhouse
23+
16. DB::executeQuery(String const&, std::shared_ptr<DB::Context>, bool, DB::QueryProcessingStage::Enum) @ 0x00000000114c0ec8 in /usr/bin/clickhouse
24+
17. DB::TCPHandler::runImpl() @ 0x00000000121bb5d8 in /usr/bin/clickhouse
25+
18. DB::TCPHandler::run() @ 0x00000000121cb728 in /usr/bin/clickhouse
26+
19. Poco::Net::TCPServerConnection::start() @ 0x00000000146d9404 in /usr/bin/clickhouse
27+
20. Poco::Net::TCPServerDispatcher::run() @ 0x00000000146da900 in /usr/bin/clickhouse
28+
21. Poco::PooledThread::run() @ 0x000000001484da7c in /usr/bin/clickhouse
29+
22. Poco::ThreadImpl::runnableEntry(void*) @ 0x000000001484bc24 in /usr/bin/clickhouse
30+
23. start_thread @ 0x0000000000007624 in /usr/lib/aarch64-linux-gnu/libpthread-2.31.so
31+
24. ? @ 0x00000000000d162c in /usr/lib/aarch64-linux-gnu/libc-2.31.so
7532
"""
7633

7734

@@ -94,8 +51,4 @@ def test_basic(sentry_init, capture_events, input):
9451
)
9552
(frame,) = exception["stacktrace"]["frames"][1:]
9653

97-
if frame.get("function") is None:
98-
assert "clickhouse-server()" in input or "pthread" in input
99-
else:
100-
assert ")" not in frame["function"] and "(" not in frame["function"]
101-
assert frame["function"] in input
54+
assert frame["function"]

0 commit comments

Comments
 (0)