]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: allow Objecter to dispatch its own messages
authorSage Weil <sage@redhat.com>
Mon, 21 Jul 2014 14:13:09 +0000 (07:13 -0700)
committerJohn Spray <john.spray@redhat.com>
Mon, 25 Aug 2014 00:34:02 +0000 (01:34 +0100)
Signed-off-by: Sage Weil <sage@redhat.com>
src/mds/MDS.cc

index ea2062812500b01e4d2d27c8dbb90314eaf8bb39..b2ff94f0d6071ac415e88dd059c6d469908c81bd 100644 (file)
@@ -57,8 +57,6 @@
 
 #include "messages/MGenericMessage.h"
 
-#include "messages/MOSDMap.h"
-
 #include "messages/MClientRequest.h"
 #include "messages/MClientRequestForward.h"
 
@@ -593,6 +591,7 @@ int MDS::init(MDSMap::DaemonState wanted_state)
 
   objecter->init();
 
+  messenger->add_dispatcher_tail(objecter);
   messenger->add_dispatcher_tail(this);
 
   // get monmap
@@ -1970,13 +1969,8 @@ bool MDS::handle_core_message(Message *m)
     break;    
 
     // OSD
-  case CEPH_MSG_OSD_OPREPLY:
-    ALLOW_MESSAGES_FROM(CEPH_ENTITY_TYPE_OSD);
-    objecter->handle_osd_op_reply((class MOSDOpReply*)m);
-    break;
   case CEPH_MSG_OSD_MAP:
     ALLOW_MESSAGES_FROM(CEPH_ENTITY_TYPE_MON | CEPH_ENTITY_TYPE_OSD);
-    objecter->handle_osd_map((MOSDMap*)m);
     if (is_active() && snapserver)
       snapserver->check_osd_map(true);
     break;
@@ -2274,35 +2268,29 @@ bool MDS::_dispatch(Message *m)
 
 void MDS::ms_handle_connect(Connection *con) 
 {
-  Mutex::Locker l(mds_lock);
-  dout(5) << "ms_handle_connect on " << con->get_peer_addr() << dendl;
-  if (want_state == CEPH_MDS_STATE_DNE)
-    return;
-  objecter->ms_handle_connect(con);
 }
 
 bool MDS::ms_handle_reset(Connection *con) 
 {
+  if (con->get_peer_type() != CEPH_ENTITY_TYPE_CLIENT)
+    return false;
+
   Mutex::Locker l(mds_lock);
   dout(5) << "ms_handle_reset on " << con->get_peer_addr() << dendl;
   if (want_state == CEPH_MDS_STATE_DNE)
     return false;
 
-  if (con->get_peer_type() == CEPH_ENTITY_TYPE_OSD) {
-    objecter->ms_handle_reset(con);
-  } else if (con->get_peer_type() == CEPH_ENTITY_TYPE_CLIENT) {
-    Session *session = static_cast<Session *>(con->get_priv());
-    if (session) {
-      if (session->is_closed()) {
-       dout(3) << "ms_handle_reset closing connection for session " << session->info.inst << dendl;
-       con->mark_down();
-       con->set_priv(NULL);
-       sessionmap.remove_session(session);
-      }
-      session->put();
-    } else {
+  Session *session = static_cast<Session *>(con->get_priv());
+  if (session) {
+    if (session->is_closed()) {
+      dout(3) << "ms_handle_reset closing connection for session " << session->info.inst << dendl;
       con->mark_down();
+      con->set_priv(NULL);
+      sessionmap.remove_session(session);
     }
+    session->put();
+  } else {
+    con->mark_down();
   }
   return false;
 }
@@ -2310,27 +2298,23 @@ bool MDS::ms_handle_reset(Connection *con)
 
 void MDS::ms_handle_remote_reset(Connection *con) 
 {
+  if (con->get_peer_type() != CEPH_ENTITY_TYPE_CLIENT)
+    return;
+
   Mutex::Locker l(mds_lock);
   dout(5) << "ms_handle_remote_reset on " << con->get_peer_addr() << dendl;
   if (want_state == CEPH_MDS_STATE_DNE)
     return;
-  switch (con->get_peer_type()) {
-  case CEPH_ENTITY_TYPE_OSD:
-    objecter->ms_handle_remote_reset(con);
-    break;
 
-  case CEPH_ENTITY_TYPE_CLIENT:
-    Session *session = static_cast<Session *>(con->get_priv());
-    if (session) {
-      if (session->is_closed()) {
-       dout(3) << "ms_handle_remote_reset closing connection for session " << session->info.inst << dendl;
-       con->mark_down();
-       con->set_priv(NULL);
-       sessionmap.remove_session(session);
-      }
-      session->put();
+  Session *session = static_cast<Session *>(con->get_priv());
+  if (session) {
+    if (session->is_closed()) {
+      dout(3) << "ms_handle_remote_reset closing connection for session " << session->info.inst << dendl;
+      con->mark_down();
+      con->set_priv(NULL);
+      sessionmap.remove_session(session);
     }
-    break;
+    session->put();
   }
 }