]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: Monitor: have op-related no_reply()
authorJoao Eduardo Luis <joao@suse.de>
Wed, 24 Jun 2015 16:54:05 +0000 (17:54 +0100)
committerJoao Eduardo Luis <joao@suse.de>
Thu, 16 Jul 2015 17:31:22 +0000 (18:31 +0100)
Signed-off-by: Joao Eduardo Luis <joao@suse.de>
src/mon/Monitor.cc
src/mon/Monitor.h

index 4796f1c39d43bd76440c343c8ab93bf864321180..774793f93c5b5bd067925586ee97c4b78aa56981 100644 (file)
@@ -3251,6 +3251,39 @@ void Monitor::send_reply(PaxosServiceMessage *req, Message *reply)
   session->put();
 }
 
+void Monitor::no_reply(MonOpRequestRef op)
+{
+  MonSession *session = op->get_session();
+  Message *req = op->get_req();
+
+  if (!session) {
+    dout(2) << "no_reply no session, dropping non-reply to "
+            << *req << dendl;
+    op->mark_event("no_reply: no session");
+    return;
+  }
+  if (session->proxy_con) {
+    if (get_quorum_features() & CEPH_FEATURE_MON_NULLROUTE) {
+      dout(10) << "no_reply to " << req->get_source_inst()
+              << " via " << session->proxy_con->get_peer_addr()
+              << " for request " << *req << dendl;
+      session->proxy_con->send_message(new MRoute(session->proxy_tid, NULL));
+      op->mark_event("no_reply: send routed request");
+    } else {
+      dout(10) << "no_reply no quorum nullroute feature for "
+               << req->get_source_inst()
+              << " via " << session->proxy_con->get_peer_addr()
+              << " for request " << *req << dendl;
+      op->mark_event("no_reply: no quorum support");
+    }
+  } else {
+    dout(10) << "no_reply to " << req->get_source_inst()
+             << " " << *req << dendl;
+    op->mark_event("no_reply");
+  }
+  session->put();
+}
+
 void Monitor::no_reply(PaxosServiceMessage *req)
 {
   MonSession *session = static_cast<MonSession*>(req->get_connection()->get_priv());
index 88703f988cb9247d035712ea5c90f048aff7a7cf..48becbb5ef1b2c1d0cdd69af2f6d1c2bf442231d 100644 (file)
@@ -806,6 +806,7 @@ public:
   void send_reply(PaxosServiceMessage *req, Message *reply);
   void send_reply(MonOpRequestRef op, Message *reply);
   void no_reply(PaxosServiceMessage *req);
+  void no_reply(MonOpRequestRef op);
   void resend_routed_requests();
   void remove_session(MonSession *s);
   void remove_all_sessions();