]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/Monitor: early return if routed request is not found
authorKefu Chai <kchai@redhat.com>
Thu, 11 Mar 2021 09:09:57 +0000 (17:09 +0800)
committerNeha Ojha <nojha@redhat.com>
Thu, 29 Apr 2021 17:40:50 +0000 (17:40 +0000)
* 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 <kchai@redhat.com>
(cherry picked from commit 164ff62aa5ac205783410c42161881837694f9c9)

src/mon/Monitor.cc

index 11677b562e033c82837427184594c07c463c7fa8..04cbedc7000ca65fbd652831b66d7c2c242ae2f6 100644 (file)
@@ -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<RoutedRequest> 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()