From cddf16504e7bd446ee4bb1aa46d11ee5e22e3bc1 Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Thu, 11 Mar 2021 17:09:57 +0800 Subject: [PATCH] mon/Monitor: early return if routed request is not found * early return if routed request is not found in routed_requests. reduce the indent level, for better readability. * do not look up the request twice. for better performance. * use unique_ptr<> for holding the request, for better readability Signed-off-by: Kefu Chai (cherry picked from commit 164ff62aa5ac205783410c42161881837694f9c9) --- src/mon/Monitor.cc | 45 ++++++++++++++++++++++----------------------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index 11677b562e033..04cbedc7000ca 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -4180,31 +4180,30 @@ void Monitor::handle_route(MonOpRequestRef op) dout(10) << "handle_route tid " << m->session_mon_tid << " null" << dendl; // look it up - if (m->session_mon_tid) { - if (routed_requests.count(m->session_mon_tid)) { - RoutedRequest *rr = routed_requests[m->session_mon_tid]; - - // reset payload, in case encoding is dependent on target features - if (m->msg) { - m->msg->clear_payload(); - rr->con->send_message(m->msg); - m->msg = NULL; - } - if (m->send_osdmap_first) { - dout(10) << " sending osdmaps from " << m->send_osdmap_first << dendl; - osdmon()->send_incremental(m->send_osdmap_first, rr->session, - true, MonOpRequestRef()); - } - ceph_assert(rr->tid == m->session_mon_tid && rr->session->routed_request_tids.count(m->session_mon_tid)); - routed_requests.erase(m->session_mon_tid); - rr->session->routed_request_tids.erase(m->session_mon_tid); - delete rr; - } else { - dout(10) << " don't have routed request tid " << m->session_mon_tid << dendl; - } - } else { + if (!m->session_mon_tid) { dout(10) << " not a routed request, ignoring" << dendl; + return; + } + auto found = routed_requests.find(m->session_mon_tid); + if (found == routed_requests.end()) { + dout(10) << " don't have routed request tid " << m->session_mon_tid << dendl; + return; } + std::unique_ptr rr{found->second}; + // reset payload, in case encoding is dependent on target features + if (m->msg) { + m->msg->clear_payload(); + rr->con->send_message(m->msg); + m->msg = NULL; + } + if (m->send_osdmap_first) { + dout(10) << " sending osdmaps from " << m->send_osdmap_first << dendl; + osdmon()->send_incremental(m->send_osdmap_first, rr->session, + true, MonOpRequestRef()); + } + ceph_assert(rr->tid == m->session_mon_tid && rr->session->routed_request_tids.count(m->session_mon_tid)); + routed_requests.erase(found); + rr->session->routed_request_tids.erase(m->session_mon_tid); } void Monitor::resend_routed_requests() -- 2.39.5