This commit is contained in:
Alexey Milovidov 2024-11-21 06:34:10 +01:00 committed by GitHub
commit ced7136f97
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 18 additions and 9 deletions

View File

@ -2,6 +2,7 @@
#include <Common/config_version.h>
#include <Common/getHashOfLoadedBinary.h>
#include <Common/CurrentThread.h>
#include <Common/SymbolIndex.h>
#include <Daemon/BaseDaemon.h>
#include <Daemon/SentryWriter.h>
#include <base/sleep.h>
@ -15,6 +16,7 @@
#include <Core/Settings.h>
#include <Poco/Environment.h>
#pragma clang diagnostic ignored "-Wreserved-identifier"
namespace DB
@ -250,6 +252,16 @@ void blockSignals(const std::vector<int> & signals)
}
SignalListener::SignalListener(BaseDaemon * daemon_, LoggerPtr log_)
: daemon(daemon_), log(log_)
{
#if defined(__ELF__) && !defined(OS_FREEBSD)
build_id = SymbolIndex::instance().getBuildIDHex();
#else
build_id = "<unknown>";
#endif
}
void SignalListener::run()
{
static_assert(PIPE_BUF >= 512);
@ -336,7 +348,7 @@ void SignalListener::onTerminate(std::string_view message, UInt32 thread_num) co
size_t pos = message.find('\n');
LOG_FATAL(log, "(version {}{}, build id: {}, git hash: {}) (from thread {}) {}",
VERSION_STRING, VERSION_OFFICIAL, daemon ? daemon->build_id : "", GIT_HASH, thread_num, message.substr(0, pos));
VERSION_STRING, VERSION_OFFICIAL, build_id, GIT_HASH, thread_num, message.substr(0, pos));
/// Print trace from std::terminate exception line-by-line to make it easy for grep.
while (pos != std::string_view::npos)
@ -370,7 +382,7 @@ try
LOG_FATAL(log, "########## Short fault info ############");
LOG_FATAL(log, "(version {}{}, build id: {}, git hash: {}, architecture: {}) (from thread {}) Received signal {}",
VERSION_STRING, VERSION_OFFICIAL, daemon ? daemon->build_id : "", GIT_HASH, Poco::Environment::osArchitecture(),
VERSION_STRING, VERSION_OFFICIAL, build_id, GIT_HASH, Poco::Environment::osArchitecture(),
thread_num, sig);
std::string signal_description = "Unknown signal";
@ -436,13 +448,13 @@ try
if (query_id.empty())
{
LOG_FATAL(log, "(version {}{}, build id: {}, git hash: {}) (from thread {}) (no query) Received signal {} ({})",
VERSION_STRING, VERSION_OFFICIAL, daemon ? daemon->build_id : "", GIT_HASH,
VERSION_STRING, VERSION_OFFICIAL, build_id, GIT_HASH,
thread_num, signal_description, sig);
}
else
{
LOG_FATAL(log, "(version {}{}, build id: {}, git hash: {}) (from thread {}) (query_id: {}) (query: {}) Received signal {} ({})",
VERSION_STRING, VERSION_OFFICIAL, daemon ? daemon->build_id : "", GIT_HASH,
VERSION_STRING, VERSION_OFFICIAL, build_id, GIT_HASH,
thread_num, query_id, query, signal_description, sig);
}

View File

@ -66,16 +66,13 @@ public:
static constexpr int StopThread = -2;
static constexpr int SanitizerTrap = -3;
explicit SignalListener(BaseDaemon * daemon_, LoggerPtr log_)
: daemon(daemon_), log(log_)
{
}
explicit SignalListener(BaseDaemon * daemon_, LoggerPtr log_);
void run() override;
private:
BaseDaemon * daemon;
LoggerPtr log;
String build_id;
void onTerminate(std::string_view message, UInt32 thread_num) const;