This is an automated email from the ASF dual-hosted git repository.

serverglen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brpc.git


The following commit(s) were added to refs/heads/master by this push:
     new 72036f14 Fast show socket map in vars (#2376)
72036f14 is described below

commit 72036f14cc4f25843fcc324599c6041d2cd30d38
Author: Bright Chen <[email protected]>
AuthorDate: Wed Oct 11 09:43:56 2023 +0800

    Fast show socket map in vars (#2376)
---
 src/brpc/socket_map.cpp | 36 ++++++++++++++----------------------
 src/brpc/socket_map.h   |  3 ++-
 2 files changed, 16 insertions(+), 23 deletions(-)

diff --git a/src/brpc/socket_map.cpp b/src/brpc/socket_map.cpp
index a451c1a6..50b3d36a 100644
--- a/src/brpc/socket_map.cpp
+++ b/src/brpc/socket_map.cpp
@@ -210,9 +210,21 @@ void SocketMap::PrintSocketMap(std::ostream& os, void* 
arg) {
     static_cast<SocketMap*>(arg)->Print(os);
 }
 
+void SocketMap::ShowSocketMapInBvarIfNeed() {
+    if (FLAGS_show_socketmap_in_vars &&
+        !_exposed_in_bvar.exchange(true, butil::memory_order_release)) {
+        char namebuf[32];
+        int len = snprintf(namebuf, sizeof(namebuf), "rpc_socketmap_%p", this);
+        _this_map_bvar = new bvar::PassiveStatus<std::string>(
+            butil::StringPiece(namebuf, len), PrintSocketMap, this);
+    }
+}
+
 int SocketMap::Insert(const SocketMapKey& key, SocketId* id,
                       const std::shared_ptr<SocketSSLContext>& ssl_ctx,
                       bool use_rdma) {
+    ShowSocketMapInBvarIfNeed();
+
     std::unique_lock<butil::Mutex> mu(_mutex);
     SingleConnection* sc = _map.seek(key);
     if (sc) {
@@ -251,18 +263,7 @@ int SocketMap::Insert(const SocketMapKey& key, SocketId* 
id,
     SingleConnection new_sc = { 1, ptr.release(), 0 };
     _map[key] = new_sc;
     *id = tmp_id;
-    bool need_to_create_bvar = false;
-    if (FLAGS_show_socketmap_in_vars && !_exposed_in_bvar) {
-        _exposed_in_bvar = true;
-        need_to_create_bvar = true;
-    }
     mu.unlock();
-    if (need_to_create_bvar) {
-        char namebuf[32];
-        int len = snprintf(namebuf, sizeof(namebuf), "rpc_socketmap_%p", this);
-        _this_map_bvar = new bvar::PassiveStatus<std::string>(
-            butil::StringPiece(namebuf, len), PrintSocketMap, this);
-    }
     return 0;
 }
 
@@ -273,6 +274,8 @@ void SocketMap::Remove(const SocketMapKey& key, SocketId 
expected_id) {
 void SocketMap::RemoveInternal(const SocketMapKey& key,
                                SocketId expected_id,
                                bool remove_orphan) {
+    ShowSocketMapInBvarIfNeed();
+
     std::unique_lock<butil::Mutex> mu(_mutex);
     SingleConnection* sc = _map.seek(key);
     if (!sc) {
@@ -293,18 +296,7 @@ void SocketMap::RemoveInternal(const SocketMapKey& key,
         } else {
             Socket* const s = sc->socket;
             _map.erase(key);
-            bool need_to_create_bvar = false;
-            if (FLAGS_show_socketmap_in_vars && !_exposed_in_bvar) {
-                _exposed_in_bvar = true;
-                need_to_create_bvar = true;
-            }
             mu.unlock();
-            if (need_to_create_bvar) {
-                char namebuf[32];
-                int len = snprintf(namebuf, sizeof(namebuf), 
"rpc_socketmap_%p", this);
-                _this_map_bvar = new bvar::PassiveStatus<std::string>(
-                    butil::StringPiece(namebuf, len), PrintSocketMap, this);
-            }
             s->ReleaseAdditionalReference(); // release extra ref
             s->SetHCRelatedRefReleased(); // set released status to cancel 
health checking
             SocketUniquePtr ptr(s);  // Dereference
diff --git a/src/brpc/socket_map.h b/src/brpc/socket_map.h
index 89323946..f1e920f9 100644
--- a/src/brpc/socket_map.h
+++ b/src/brpc/socket_map.h
@@ -175,6 +175,7 @@ private:
     static void* RunWatchConnections(void*);
     void Print(std::ostream& os);
     static void PrintSocketMap(std::ostream& os, void* arg);
+    void ShowSocketMapInBvarIfNeed();
 
 private:
     struct SingleConnection {
@@ -190,7 +191,7 @@ private:
     SocketMapOptions _options;
     butil::Mutex _mutex;
     Map _map;
-    bool _exposed_in_bvar;
+    butil::atomic<bool> _exposed_in_bvar;
     bvar::PassiveStatus<std::string>* _this_map_bvar;
     bool _has_close_idle_thread;
     bthread_t _close_idle_thread;


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to