From d151ece3afcea272c7d47e8c893bc65e0f4de384 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 19 Dec 2018 10:39:55 -0600 Subject: [PATCH] msg/async: better debug around conn map lookups and updates Signed-off-by: Sage Weil --- src/msg/async/AsyncMessenger.cc | 27 +++++++++++++++++++++++++++ src/msg/async/AsyncMessenger.h | 23 +---------------------- src/msg/async/ProtocolV2.cc | 3 ++- 3 files changed, 30 insertions(+), 23 deletions(-) diff --git a/src/msg/async/AsyncMessenger.cc b/src/msg/async/AsyncMessenger.cc index 765833308ad0e..d310e0cd7cca2 100644 --- a/src/msg/async/AsyncMessenger.cc +++ b/src/msg/async/AsyncMessenger.cc @@ -593,6 +593,8 @@ AsyncConnectionRef AsyncMessenger::create_connect( target.is_msgr2(), false); conn->connect(addrs, type, target); ceph_assert(!conns.count(addrs)); + ldout(cct, 10) << __func__ << " " << conn << " " << addrs << " " + << conn->peer_addrs << dendl; conns[addrs] = conn; w->get_perf_counter()->inc(l_msgr_active_connections); @@ -811,6 +813,31 @@ int AsyncMessenger::get_proto_version(int peer_type, bool connect) const return 0; } +int AsyncMessenger::accept_conn(AsyncConnectionRef conn) +{ + Mutex::Locker l(lock); + auto it = conns.find(conn->peer_addrs); + if (it != conns.end()) { + AsyncConnectionRef existing = it->second; + + // lazy delete, see "deleted_conns" + // If conn already in, we will return 0 + Mutex::Locker l(deleted_lock); + if (deleted_conns.erase(existing)) { + existing->get_perf_counter()->dec(l_msgr_active_connections); + conns.erase(it); + } else if (conn != existing) { + return -1; + } + } + 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; +} + + bool AsyncMessenger::learned_addr(const entity_addr_t &peer_addr_for_me) { // be careful here: multiple threads may block here, and readers of diff --git a/src/msg/async/AsyncMessenger.h b/src/msg/async/AsyncMessenger.h index 0de46a3c9f88f..b12dce625fdab 100644 --- a/src/msg/async/AsyncMessenger.h +++ b/src/msg/async/AsyncMessenger.h @@ -350,28 +350,7 @@ public: return _lookup_conn(k); } - int accept_conn(AsyncConnectionRef conn) { - Mutex::Locker l(lock); - auto it = conns.find(conn->peer_addrs); - if (it != conns.end()) { - AsyncConnectionRef existing = it->second; - - // lazy delete, see "deleted_conns" - // If conn already in, we will return 0 - Mutex::Locker l(deleted_lock); - if (deleted_conns.erase(existing)) { - existing->get_perf_counter()->dec(l_msgr_active_connections); - conns.erase(it); - } else if (conn != existing) { - return -1; - } - } - conns[conn->peer_addrs] = conn; - conn->get_perf_counter()->inc(l_msgr_active_connections); - accepting_conns.erase(conn); - return 0; - } - + int accept_conn(AsyncConnectionRef conn); bool learned_addr(const entity_addr_t &peer_addr_for_me); void add_accept(Worker *w, ConnectedSocket cli_socket, const entity_addr_t &listen_addr, diff --git a/src/msg/async/ProtocolV2.cc b/src/msg/async/ProtocolV2.cc index 9bbe10aed2dcd..dc6c21e04aa3c 100644 --- a/src/msg/async/ProtocolV2.cc +++ b/src/msg/async/ProtocolV2.cc @@ -1990,7 +1990,8 @@ CtPtr ProtocolV2::handle_connect_message_2() { // existing? AsyncConnectionRef existing = messenger->lookup_conn(connection->peer_addrs); - + ldout(cct, 10) << __func__ << " existing " << existing + << " on " << connection->peer_addrs << dendl; connection->inject_delay(); connection->lock.lock(); -- 2.39.5