]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: MonOpRequest: send_reply() belongs in the Monitor class
authorJoao Eduardo Luis <joao@suse.de>
Wed, 24 Jun 2015 16:51:56 +0000 (17:51 +0100)
committerJoao Eduardo Luis <joao@suse.de>
Thu, 16 Jul 2015 17:31:22 +0000 (18:31 +0100)
Op Requests should have no business replying to messages. Besides,
given the Monitor is currently the place to do this, because it is the
one with access to all things that may be required to validate state
(e.g., quorum features), permanently moving this code to the Monitor
class also avoid having duplicate/very similar code in two distinct
places.

Signed-off-by: Joao Eduardo Luis <joao@suse.de>
src/mon/Makefile.am
src/mon/MonOpRequest.cc [deleted file]
src/mon/MonOpRequest.h
src/mon/Monitor.cc

index 476acef7797263ba57c3f9202bec27ae564d2bf1..ee6542d42d51ef0171de01544d488ad577778563 100644 (file)
@@ -18,8 +18,7 @@ libmon_la_SOURCES = \
        mon/Elector.cc \
        mon/HealthMonitor.cc \
        mon/DataHealthService.cc \
-       mon/ConfigKeyService.cc \
-       mon/MonOpRequest.cc
+       mon/ConfigKeyService.cc
 libmon_la_LIBADD = $(LIBAUTH) $(LIBCOMMON) $(LIBOS) $(LIBMON_TYPES)
 noinst_LTLIBRARIES += libmon.la
 
diff --git a/src/mon/MonOpRequest.cc b/src/mon/MonOpRequest.cc
deleted file mode 100644 (file)
index 90c41ac..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-#include <sstream>
-#include "msg/Messenger.h"
-#include "msg/Message.h"
-#include "messages/MRoute.h"
-
-#include "mon/MonOpRequest.h"
-#include "mon/Session.h"
-
-#define dout_subsys ceph_subsys_mon
-#undef dout_prefix
-#define dout_prefix _prefix(_dout, this)
-static ostream& _prefix(std::ostream *_dout, const MonOpRequest *op) {
-  *_dout << "optracker foo ";
-  return *_dout;
-}
-
-void MonOpRequest::send_reply(Message *reply)
-{
-  if (!session) {
-    dout(2) << "send_reply no session, dropping reply " << *reply
-           << " to " << request << " " << *request << dendl;
-    reply->put();
-    mark_event("reply: no session");
-    return;
-  }
-
-  if (!session->con && !session->proxy_con) {
-    dout(2) << "send_reply no connection, dropping reply " << *reply
-           << " to " << request << " " << *request << dendl;
-    reply->put();
-    mark_event("reply: no connection");
-    return;
-  }
-
-  if (session->proxy_con) {
-    dout(15) << "send_reply routing reply to " << con->get_peer_addr()
-            << " via " << session->proxy_con->get_peer_addr()
-            << " for request " << *request << dendl;
-    session->proxy_con->send_message(new MRoute(session->proxy_tid, reply));
-    mark_event("reply: send routed request");
-  } else {
-    session->con->send_message(reply);
-    mark_event("reply: send");
-  }
-}
index 0c59909ca7c16c1c9c249bd0c7eed79d36c356f0..329607c53c436105ed1e92bdcbef7d5106aa02c9 100644 (file)
@@ -142,8 +142,6 @@ public:
 
   typedef ceph::shared_ptr<MonOpRequest> Ref;
 
-  void send_reply(Message *reply);
-
   void _dump(utime_t now, Formatter *f) const {
     {
       f->open_array_section("events");
index 2899564d196393aaa9be8ac2ce2902963afe659f..4796f1c39d43bd76440c343c8ab93bf864321180 100644 (file)
@@ -3178,8 +3178,49 @@ void Monitor::try_send_message(Message *m, const entity_inst_t& to)
 
 void Monitor::send_reply(MonOpRequestRef op, Message *reply)
 {
+  op->mark_event(__func__);
+
+  MonSession *session = op->get_session();
+  Message *req = op->get_req();
+  ConnectionRef con = op->get_connection();
+
   dout(2) << __func__ << " " << op << " " << *reply << dendl;
-  op->send_reply(reply);
+
+  if (!con) {
+    dout(2) << "send_reply no connection, dropping reply " << *reply
+           << " to " << req << " " << *req << dendl;
+    reply->put();
+    op->mark_event("reply: no connection");
+    return;
+  }
+
+  if (!session) {
+    dout(2) << "send_reply no session, dropping reply " << *reply
+           << " to " << req << " " << *req << dendl;
+    reply->put();
+    op->mark_event("reply: no session");
+    return;
+  }
+
+  if (!session->con && !session->proxy_con) {
+    dout(2) << "send_reply no connection, dropping reply " << *reply
+           << " to " << req << " " << *req << dendl;
+    reply->put();
+    op->mark_event("reply: no connection");
+    return;
+  }
+
+  if (session->proxy_con) {
+    dout(15) << "send_reply routing reply to " << con->get_peer_addr()
+            << " via " << session->proxy_con->get_peer_addr()
+            << " for request " << *req << dendl;
+    session->proxy_con->send_message(new MRoute(session->proxy_tid, reply));
+    op->mark_event("reply: send routed request");
+  } else {
+    session->con->send_message(reply);
+    op->mark_event("reply: send");
+  }
+  session->put();
 }