]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: PaxosServiceMessages now routed through paxos_dispatch and get caps set
authorGreg Farnum <gregf@hq.newdream.net>
Mon, 15 Mar 2010 23:53:33 +0000 (16:53 -0700)
committerGreg Farnum <gregf@hq.newdream.net>
Tue, 16 Mar 2010 00:03:38 +0000 (17:03 -0700)
src/messages/PaxosServiceMessage.h
src/mon/Monitor.cc
src/mon/Monitor.h

index 4afa5e1505b2f4c4a57f879e8de9e93046ee7e86..d7acd7767cefa04b621f91c792f913a72812c5e5 100644 (file)
@@ -3,6 +3,8 @@
 
 #include "msg/Message.h"
 
+class MonCaps;
+
 class PaxosServiceMessage : public Message {
  public:
   version_t version;
index e20048749e4d80fdce02f2ea6120157244f1edf3..ac8e9ccef1b3c004ac10b7d2183b8c9089ccb04b 100644 (file)
@@ -608,26 +608,26 @@ do { \
     case MSG_OSD_PGTEMP:
       ALLOW_MESSAGES_FROM(CEPH_ENTITY_TYPE_OSD);
       ALLOW_CAPS(PAXOS_OSDMAP, MON_CAP_R);
-      paxos_service[PAXOS_OSDMAP]->dispatch((PaxosServiceMessage*)m);
+      paxos_dispatch(paxos_service[PAXOS_OSDMAP], m);
       break;
 
     case MSG_REMOVE_SNAPS:
       ALLOW_CAPS(PAXOS_OSDMAP, MON_CAP_RW);
-      paxos_service[PAXOS_OSDMAP]->dispatch((PaxosServiceMessage*)m);
+      paxos_dispatch(paxos_service[PAXOS_OSDMAP], m);
       break;
 
       // MDSs
     case MSG_MDS_BEACON:
     case MSG_MDS_OFFLOAD_TARGETS:
       ALLOW_CAPS(PAXOS_MDSMAP, MON_CAP_RW);
-      paxos_service[PAXOS_MDSMAP]->dispatch((PaxosServiceMessage*)m);
+      paxos_dispatch(paxos_service[PAXOS_MDSMAP], m);
       break;
 
       // auth
     case MSG_MON_GLOBAL_ID:
     case CEPH_MSG_AUTH:
       /* no need to check caps here */
-      paxos_service[PAXOS_AUTH]->dispatch((PaxosServiceMessage*)m);
+      paxos_dispatch(paxos_service[PAXOS_AUTH], m);
       break;
 
       // pg
@@ -635,18 +635,18 @@ do { \
     case MSG_PGSTATS:
     case MSG_GETPOOLSTATS:
       ALLOW_CAPS(PAXOS_PGMAP, MON_CAP_R);
-      paxos_service[PAXOS_PGMAP]->dispatch((PaxosServiceMessage*)m);
+      paxos_dispatch(paxos_service[PAXOS_PGMAP], m);
       break;
 
     case MSG_POOLOP:
       ALLOW_CAPS(PAXOS_OSDMAP, MON_CAP_RX);
-      paxos_service[PAXOS_OSDMAP]->dispatch((PaxosServiceMessage*)m);
+      paxos_dispatch(paxos_service[PAXOS_OSDMAP], m);
       break;
 
       // log
     case MSG_LOG:
       ALLOW_CAPS(PAXOS_LOG, MON_CAP_RW);
-      paxos_service[PAXOS_LOG]->dispatch((PaxosServiceMessage*)m);
+      paxos_dispatch(paxos_service[PAXOS_LOG], m);
       break;
 
       // paxos
@@ -706,6 +706,16 @@ out:
   return ret;
 }
 
+void Monitor::paxos_dispatch(PaxosService *p, Message *message)
+{
+ PaxosServiceMessage *m = (PaxosServiceMessage*)message;
+  if (!m->caps) {
+    Session *s = (Session *) m->get_connection()->get_priv();
+    m->caps = &s->caps;
+  }
+  p->dispatch(m);
+}
+
 void Monitor::handle_subscribe(MMonSubscribe *m)
 {
   dout(10) << "handle_subscribe " << *m << dendl;
index d1201f769ff535b889d61c2b1ef69970ff467f7b..baaea734c1d155144a9593435bbcfdaceab708ff 100644 (file)
@@ -212,6 +212,7 @@ public:
                            bool& isvalid);
   bool ms_handle_reset(Connection *con);
   void ms_handle_remote_reset(Connection *con) {}
+  void paxos_dispatch(PaxosService *p, Message *m);
 
  public:
   Monitor(int w, MonitorStore *s, Messenger *m, MonMap *map);