diff --git a/be/src/common/daemon.cpp b/be/src/common/daemon.cpp index f91aec88f59572..98315609865de0 100644 --- a/be/src/common/daemon.cpp +++ b/be/src/common/daemon.cpp @@ -409,6 +409,7 @@ static void init_doris_metrics(const std::vector& store_paths) { void signal_handler(int signal) { if (signal == SIGINT || signal == SIGTERM) { k_doris_exit = true; + k_doris_start = false; LOG(INFO) << "doris start to exit"; } } diff --git a/be/src/common/daemon.h b/be/src/common/daemon.h index 5ac9abbe2b15ed..36d2ca0813a62e 100644 --- a/be/src/common/daemon.h +++ b/be/src/common/daemon.h @@ -27,6 +27,7 @@ namespace doris { struct StorePath; inline bool k_doris_exit = false; +inline bool k_doris_start = false; class Daemon { public: diff --git a/be/src/runtime/thread_context.h b/be/src/runtime/thread_context.h index bbfd1a029797e5..23ee742b867d66 100644 --- a/be/src/runtime/thread_context.h +++ b/be/src/runtime/thread_context.h @@ -100,6 +100,7 @@ class MemTracker; class RuntimeState; extern bool k_doris_exit; +extern bool k_doris_start; extern bthread_key_t btls_key; // Using gcc11 compiles thread_local variable on lower versions of GLIBC will report an error, @@ -388,17 +389,17 @@ class AddThreadMemTrackerConsumer { // which is different from the previous behavior. #define CONSUME_MEM_TRACKER(size) \ do { \ - if (doris::thread_context_ptr.init) { \ + if (doris::k_doris_start && doris::thread_context_ptr.init) { \ doris::thread_context()->consume_memory(size); \ - } else if (doris::ExecEnv::GetInstance()->initialized()) { \ + } else if (doris::k_doris_start && doris::ExecEnv::GetInstance()->initialized()) { \ doris::ExecEnv::GetInstance()->orphan_mem_tracker_raw()->consume_no_update_peak(size); \ } \ } while (0) #define RELEASE_MEM_TRACKER(size) \ do { \ - if (doris::thread_context_ptr.init) { \ + if (doris::k_doris_start && doris::thread_context_ptr.init) { \ doris::thread_context()->consume_memory(-size); \ - } else if (doris::ExecEnv::GetInstance()->initialized()) { \ + } else if (doris::k_doris_start && doris::ExecEnv::GetInstance()->initialized()) { \ doris::ExecEnv::GetInstance()->orphan_mem_tracker_raw()->consume_no_update_peak( \ -size); \ } \ diff --git a/be/src/service/doris_main.cpp b/be/src/service/doris_main.cpp index 3b6cf2969cfec6..643ba0837b9591 100644 --- a/be/src/service/doris_main.cpp +++ b/be/src/service/doris_main.cpp @@ -82,6 +82,7 @@ int __llvm_profile_write_file(); namespace doris { extern bool k_doris_exit; +extern bool k_doris_start; static void thrift_output(const char* x) { LOG(WARNING) << "thrift internal message: " << x; @@ -463,6 +464,7 @@ int main(int argc, char** argv) { // init exec env auto exec_env = doris::ExecEnv::GetInstance(); + doris::k_doris_start = true; doris::ExecEnv::init(exec_env, paths); doris::TabletSchemaCache::create_global_schema_cache();