From 267179d00b34a4518734aa398fae74b2fe2c67ef Mon Sep 17 00:00:00 2001 From: chejinge Date: Wed, 12 Jun 2024 19:55:35 +0800 Subject: [PATCH] change thread name --- src/net/include/backend_thread.h | 1 + src/net/include/client_thread.h | 1 + src/net/include/net_thread.h | 2 +- src/net/include/server_thread.h | 2 ++ src/net/src/backend_thread.cc | 2 ++ src/net/src/client_thread.cc | 2 ++ src/net/src/holy_thread.cc | 1 + src/net/src/holy_thread.h | 2 ++ src/net/src/net_thread.cc | 2 +- src/net/src/net_thread_name.h | 2 +- src/net/src/net_util.cc | 1 + src/net/src/net_util.h | 1 + src/net/src/thread_pool.cc | 4 +++- src/pika_repl_client.cc | 1 + src/pika_repl_server.cc | 3 ++- src/pika_server.cc | 8 +++++++- src/rsync_client.cc | 1 + src/rsync_server.cc | 4 ++-- 18 files changed, 32 insertions(+), 8 deletions(-) diff --git a/src/net/include/backend_thread.h b/src/net/include/backend_thread.h index 6e39583014..b374ec86c6 100644 --- a/src/net/include/backend_thread.h +++ b/src/net/include/backend_thread.h @@ -110,6 +110,7 @@ class BackendThread : public Thread { */ int StartThread() override; int StopThread() override; + void set_thread_name(const std::string& name) override { Thread::set_thread_name(name); } pstd::Status Write(int fd, const std::string& msg); pstd::Status Close(int fd); // Try to connect fd noblock, if return EINPROGRESS or EAGAIN or EWOULDBLOCK diff --git a/src/net/include/client_thread.h b/src/net/include/client_thread.h index 25846555c2..c57174724d 100644 --- a/src/net/include/client_thread.h +++ b/src/net/include/client_thread.h @@ -110,6 +110,7 @@ class ClientThread : public Thread { */ int StartThread() override; int StopThread() override; + void set_thread_name(const std::string& name) override { Thread::set_thread_name(name); } pstd::Status Write(const std::string& ip, int port, const std::string& msg); pstd::Status Close(const std::string& ip, int port); diff --git a/src/net/include/net_thread.h b/src/net/include/net_thread.h index ac700819a5..ff96811e91 100644 --- a/src/net/include/net_thread.h +++ b/src/net/include/net_thread.h @@ -34,7 +34,7 @@ class Thread : public pstd::noncopyable { std::string thread_name() const { return thread_name_; } - void set_thread_name(const std::string& name) { thread_name_ = name; } + virtual void set_thread_name(const std::string& name) { thread_name_ = name; } protected: std::atomic_bool should_stop_; diff --git a/src/net/include/server_thread.h b/src/net/include/server_thread.h index d0d6d63612..b8defbf2a6 100644 --- a/src/net/include/server_thread.h +++ b/src/net/include/server_thread.h @@ -150,6 +150,8 @@ class ServerThread : public Thread { // Move into server thread virtual void MoveConnIn(std::shared_ptr conn, const NotifyType& type) = 0; + void set_thread_name(const std::string& name) override { Thread::set_thread_name(name); } + virtual void KillAllConns() = 0; virtual bool KillConn(const std::string& ip_port) = 0; diff --git a/src/net/src/backend_thread.cc b/src/net/src/backend_thread.cc index b0eaa53687..27389293d7 100644 --- a/src/net/src/backend_thread.cc +++ b/src/net/src/backend_thread.cc @@ -48,6 +48,8 @@ int BackendThread::StartThread() { if (res) { return res; } + set_thread_name("BackendThread"); + return Thread::StartThread(); } diff --git a/src/net/src/client_thread.cc b/src/net/src/client_thread.cc index 916fd8f6ee..5561d6d3c0 100644 --- a/src/net/src/client_thread.cc +++ b/src/net/src/client_thread.cc @@ -47,6 +47,8 @@ int ClientThread::StartThread() { if (res) { return res; } + set_thread_name("ClientThread"); + return Thread::StartThread(); } diff --git a/src/net/src/holy_thread.cc b/src/net/src/holy_thread.cc index cb12906880..ee42c47070 100644 --- a/src/net/src/holy_thread.cc +++ b/src/net/src/holy_thread.cc @@ -75,6 +75,7 @@ int HolyThread::StartThread() { if (ret) { return ret; } + set_thread_name("HolyThread"); return ServerThread::StartThread(); } diff --git a/src/net/src/holy_thread.h b/src/net/src/holy_thread.h index 0b4f0d700b..312de4c84f 100644 --- a/src/net/src/holy_thread.h +++ b/src/net/src/holy_thread.h @@ -35,6 +35,8 @@ class HolyThread : public ServerThread { int StopThread() override; + void set_thread_name(const std::string& name) override { Thread::set_thread_name(name); } + void set_keepalive_timeout(int timeout) override { keepalive_timeout_ = timeout; } int conn_num() const override; diff --git a/src/net/src/net_thread.cc b/src/net/src/net_thread.cc index f193fd7ddc..a6a7b08994 100644 --- a/src/net/src/net_thread.cc +++ b/src/net/src/net_thread.cc @@ -17,7 +17,7 @@ Thread::~Thread() = default; void* Thread::RunThread(void* arg) { auto thread = reinterpret_cast(arg); if (!(thread->thread_name().empty())) { - SetThreadName(pthread_self(), "pika"); + SetThreadName(pthread_self(), thread->thread_name()); } thread->ThreadMain(); return nullptr; diff --git a/src/net/src/net_thread_name.h b/src/net/src/net_thread_name.h index e85cd1a6df..435550682f 100644 --- a/src/net/src/net_thread_name.h +++ b/src/net/src/net_thread_name.h @@ -26,7 +26,7 @@ inline bool SetThreadName(pthread_t id, const std::string& name) { #else inline bool SetThreadName(pthread_t id, const std::string& name) { // printf ("no pthread_setname\n"); - return false; + pthread_setname_np(name.c_str()); } #endif } // namespace net diff --git a/src/net/src/net_util.cc b/src/net/src/net_util.cc index 6f1f4692d0..7efbb0f6cd 100644 --- a/src/net/src/net_util.cc +++ b/src/net/src/net_util.cc @@ -126,6 +126,7 @@ int TimerTaskThread::StartThread() { // if there is no timer task registered, no need of start the thread return -1; } + set_thread_name("TimerTask"); LOG(INFO) << "TimerTaskThread Starting..."; return Thread::StartThread(); } diff --git a/src/net/src/net_util.h b/src/net/src/net_util.h index a6fcbdc932..fe96e0a950 100644 --- a/src/net/src/net_util.h +++ b/src/net/src/net_util.h @@ -80,6 +80,7 @@ class TimerTaskThread : public Thread { ~TimerTaskThread() override; int StartThread() override; int StopThread() override; + void set_thread_name(const std::string& name) override { Thread::set_thread_name(name); } uint32_t AddTimerTask(const std::string& task_name, int interval_ms, bool repeat_exec, const std::function &task){ return timer_task_manager_.AddTimerTask(task_name, interval_ms, repeat_exec, task); diff --git a/src/net/src/thread_pool.cc b/src/net/src/thread_pool.cc index 4ea4b82125..8e20694244 100644 --- a/src/net/src/thread_pool.cc +++ b/src/net/src/thread_pool.cc @@ -8,6 +8,7 @@ #include +#include #include namespace net { @@ -24,7 +25,8 @@ int ThreadPool::Worker::start() { return -1; } else { start_.store(true); - SetThreadName(thread_id_, thread_pool_->thread_pool_name() + "Worker"); + std::string thread_id_str = std::to_string(reinterpret_cast(thread_id_)); + SetThreadName(thread_id_, thread_pool_->thread_pool_name() + "_Worker_" + thread_id_str); } } return 0; diff --git a/src/pika_repl_client.cc b/src/pika_repl_client.cc index 352fbdf7e5..8cf7ebc912 100644 --- a/src/pika_repl_client.cc +++ b/src/pika_repl_client.cc @@ -41,6 +41,7 @@ PikaReplClient::~PikaReplClient() { } int PikaReplClient::Start() { + client_thread_->set_thread_name("PikaReplClient"); int res = client_thread_->StartThread(); if (res != net::kSuccess) { LOG(FATAL) << "Start ReplClient ClientThread Error: " << res diff --git a/src/pika_repl_server.cc b/src/pika_repl_server.cc index a99fc18047..b92d239b18 100644 --- a/src/pika_repl_server.cc +++ b/src/pika_repl_server.cc @@ -17,7 +17,7 @@ extern PikaServer* g_pika_server; extern std::unique_ptr g_pika_rm; PikaReplServer::PikaReplServer(const std::set& ips, int port, int cron_interval) { - server_tp_ = std::make_unique(PIKA_REPL_SERVER_TP_SIZE, 100000); + server_tp_ = std::make_unique(PIKA_REPL_SERVER_TP_SIZE, 100000, "PikaReplServer"); pika_repl_server_thread_ = std::make_unique(ips, port, cron_interval); pika_repl_server_thread_->set_thread_name("PikaReplServer"); } @@ -27,6 +27,7 @@ PikaReplServer::~PikaReplServer() { } int PikaReplServer::Start() { + pika_repl_server_thread_->set_thread_name("PikaReplServer"); int res = pika_repl_server_thread_->StartThread(); if (res != net::kSuccess) { LOG(FATAL) << "Start Pika Repl Server Thread Error: " << res diff --git a/src/pika_server.cc b/src/pika_server.cc index 811a85b1d5..ca9e297e0c 100644 --- a/src/pika_server.cc +++ b/src/pika_server.cc @@ -759,11 +759,13 @@ size_t PikaServer::SlowCmdThreadPoolMaxQueueSize() { } void PikaServer::BGSaveTaskSchedule(net::TaskFunc func, void* arg) { + bgsave_thread_.set_thread_name("BGSaveTask"); bgsave_thread_.StartThread(); bgsave_thread_.Schedule(func, arg); } void PikaServer::PurgelogsTaskSchedule(net::TaskFunc func, void* arg) { + purge_thread_.set_thread_name("PurgelogsTask"); purge_thread_.StartThread(); purge_thread_.Schedule(func, arg); } @@ -774,6 +776,7 @@ void PikaServer::PurgeDir(const std::string& path) { } void PikaServer::PurgeDirTaskSchedule(void (*function)(void*), void* arg) { + purge_thread_.set_thread_name("PurgeDirTask"); purge_thread_.StartThread(); purge_thread_.Schedule(function, arg); } @@ -824,6 +827,7 @@ void PikaServer::TryDBSync(const std::string& ip, int port, const std::string& d } void PikaServer::KeyScanTaskSchedule(net::TaskFunc func, void* arg) { + key_scan_thread_.set_thread_name("KeyScanTask"); key_scan_thread_.StartThread(); key_scan_thread_.Schedule(func, arg); } @@ -1463,6 +1467,7 @@ void PikaServer::Bgslotsreload(const std::shared_ptr& db) { LOG(INFO) << "Start slot reloading"; // Start new thread if needed + bgsave_thread_.set_thread_name("SlotsReload"); bgsave_thread_.StartThread(); bgsave_thread_.Schedule(&DoBgslotsreload, static_cast(this)); } @@ -1530,6 +1535,7 @@ void PikaServer::Bgslotscleanup(std::vector cleanupSlots, const std::shared LOG(INFO) << "Start slot cleanup, slots: " << slotsStr << std::endl; // Start new thread if needed + bgslots_cleanup_thread_.set_thread_name("SlotsCleanup"); bgslots_cleanup_thread_.StartThread(); bgslots_cleanup_thread_.Schedule(&DoBgslotscleanup, static_cast(this)); } @@ -1634,7 +1640,7 @@ void DoBgslotscleanup(void* arg) { void PikaServer::ResetCacheAsync(uint32_t cache_num, std::shared_ptr db, cache::CacheConfig *cache_cfg) { if (PIKA_CACHE_STATUS_OK == db->cache()->CacheStatus() || PIKA_CACHE_STATUS_NONE == db->cache()->CacheStatus()) { - + common_bg_thread_.set_thread_name("CacheBGTask"); common_bg_thread_.StartThread(); BGCacheTaskArg *arg = new BGCacheTaskArg(); arg->db = db; diff --git a/src/rsync_client.cc b/src/rsync_client.cc index 0cf683ba75..3a184c72c3 100644 --- a/src/rsync_client.cc +++ b/src/rsync_client.cc @@ -61,6 +61,7 @@ bool RsyncClient::Init() { master_ip_ = g_pika_server->master_ip(); master_port_ = g_pika_server->master_port() + kPortShiftRsync2; file_set_.clear(); + client_thread_->set_thread_name("RsyncClientThread"); client_thread_->StartThread(); bool ret = ComparisonUpdate(); if (!ret) { diff --git a/src/rsync_server.cc b/src/rsync_server.cc index 30acf1586b..5696719980 100644 --- a/src/rsync_server.cc +++ b/src/rsync_server.cc @@ -31,9 +31,8 @@ void RsyncWriteResp(RsyncService::RsyncResponse& response, std::shared_ptr& ips, const int port) { - work_thread_ = std::make_unique(2, 100000); + work_thread_ = std::make_unique(2, 100000, "RsyncServerWork"); rsync_server_thread_ = std::make_unique(ips, port, 1 * 1000, this); - rsync_server_thread_->set_thread_name("RsyncServer"); } RsyncServer::~RsyncServer() { @@ -47,6 +46,7 @@ void RsyncServer::Schedule(net::TaskFunc func, void* arg) { int RsyncServer::Start() { LOG(INFO) << "start RsyncServer ..."; + rsync_server_thread_->set_thread_name("RsyncServerThread"); int res = rsync_server_thread_->StartThread(); if (res != net::kSuccess) { LOG(FATAL) << "Start rsync Server Thread Error. ret_code: " << res << " message: "