]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: track original Connection* for forwarded requests
authorSage Weil <sage@inktank.com>
Tue, 23 Apr 2013 20:40:27 +0000 (13:40 -0700)
committerSage Weil <sage@inktank.com>
Tue, 23 Apr 2013 20:40:27 +0000 (13:40 -0700)
Keep a reference to the source Connection* for forwarded requests.  This
makes the reply path slightly cleaner, and will help us later.

Signed-off-by: Sage Weil <sage@inktank.com>
src/mon/Monitor.cc
src/mon/Monitor.h

index 1e39e9ca3048aff8c989384e5ead1786a7dbeee4..fc01219cd6913756444950f13052b192f292241f 100644 (file)
@@ -2775,7 +2775,9 @@ void Monitor::forward_request_leader(PaxosServiceMessage *req)
   } else if (session && !session->closed) {
     RoutedRequest *rr = new RoutedRequest;
     rr->tid = ++routed_request_tid;
-    rr->client = req->get_source_inst();
+    rr->client_inst = req->get_source_inst();
+    rr->con = req->get_connection();
+    rr->con->get();
     encode_message(req, CEPH_FEATURES_ALL, rr->request_bl);   // for my use only; use all features
     rr->session = static_cast<MonSession *>(session->get());
     routed_requests[rr->tid] = rr;
@@ -2920,7 +2922,7 @@ void Monitor::handle_route(MRoute *m)
       // reset payload, in case encoding is dependent on target features
       if (m->msg) {
        m->msg->clear_payload();
-       messenger->send_message(m->msg, rr->session->inst);
+       messenger->send_message(m->msg, rr->con);
        m->msg = NULL;
       }
       routed_requests.erase(m->session_mon_tid);
@@ -2955,7 +2957,7 @@ void Monitor::resend_routed_requests()
 
     dout(10) << " resend to mon." << mon << " tid " << rr->tid << " " << *req << dendl;
     MForward *forward = new MForward(rr->tid, req, rr->session->caps);
-    forward->client = rr->client;
+    forward->client = rr->client_inst;
     forward->set_priority(req->get_priority());
     messenger->send_message(forward, monmap->get_inst(mon));
   }  
index c08942d4a5097fafcedd7beed2ff26fb0f6bc94b..fa283232f5065c0f4aaf698719a59a733f984a9f 100644 (file)
@@ -1309,13 +1309,16 @@ public:
   // request routing
   struct RoutedRequest {
     uint64_t tid;
-    entity_inst_t client;
     bufferlist request_bl;
     MonSession *session;
+    Connection *con;
+    entity_inst_t client_inst;
 
     ~RoutedRequest() {
       if (session)
        session->put();
+      if (con)
+       con->put();
     }
   };
   uint64_t routed_request_tid;