]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
AsyncMessenger: l_msgr_active_connections numerical anomaly
authorMohit Agrawal <moagrawa@redhat.com>
Mon, 10 Jun 2024 05:29:54 +0000 (10:59 +0530)
committerMohit Agrawal <moagrawa@redhat.com>
Wed, 23 Oct 2024 09:58:16 +0000 (15:28 +0530)
The counter (msgr_active_connections) can be an anomaly in case
if the counter is decrese before increase and initial value is 0. It can be
happen while the server daemon is blocked on accept_conn and client sends
a disconnect request.To avoid the situation increase the counter at first
step in add_accept during accepting a request so that the counter would not
be 0 during the decrease operation.

Fixes: https://tracker.ceph.com/issues/66231
Signed-off-by: Mohit Agrawal <moagrawa@redhat.com>
(cherry picked from commit b931251b2594eec601d39771b731c14119995181)

src/msg/async/AsyncMessenger.cc

index d002d60897ca5a4df8d752319ee6fc8bdf39cfbf..2e38bd434a836ec46f18e5c60772a95cbb295dad 100644 (file)
@@ -611,6 +611,7 @@ void AsyncMessenger::add_accept(Worker *w, ConnectedSocket cli_socket,
                                                listen_addr.is_msgr2(), false);
   conn->accept(std::move(cli_socket), listen_addr, peer_addr);
   accepting_conns.insert(conn);
+  w->get_perf_counter()->inc(l_msgr_active_connections);
 }
 
 AsyncConnectionRef AsyncMessenger::create_connect(
@@ -865,7 +866,6 @@ int AsyncMessenger::accept_conn(const AsyncConnectionRef& conn)
       conn->policy.lossy &&
       !conn->policy.register_lossy_clients) {
     anon_conns.insert(conn);
-    conn->get_perf_counter()->inc(l_msgr_active_connections);
     return 0;
   }
   auto it = conns.find(*conn->peer_addrs);
@@ -884,7 +884,6 @@ int AsyncMessenger::accept_conn(const AsyncConnectionRef& conn)
   }
   ldout(cct, 10) << __func__ << " " << conn << " " << *conn->peer_addrs << dendl;
   conns[*conn->peer_addrs] = conn;
-  conn->get_perf_counter()->inc(l_msgr_active_connections);
   accepting_conns.erase(conn);
   return 0;
 }