]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
messages: add MFSMap
authorJohn Spray <john.spray@redhat.com>
Wed, 17 Feb 2016 14:51:07 +0000 (14:51 +0000)
committerJohn Spray <john.spray@redhat.com>
Thu, 10 Mar 2016 11:18:29 +0000 (11:18 +0000)
For mon clients that subscribe to 'fsmap'.

Signed-off-by: John Spray <john.spray@redhat.com>
src/include/ceph_fs.h
src/messages/MFSMap.h [new file with mode: 0644]
src/messages/Makefile.am
src/msg/Message.cc

index 202664d80e3caff89b2aae89cecb2a8076b5a358..47e6a0bc138b9c97e96e7f243114346b9911d95c 100644 (file)
@@ -131,6 +131,9 @@ struct ceph_dir_layout {
 #define CEPH_MSG_OSD_OPREPLY            43
 #define CEPH_MSG_WATCH_NOTIFY           44
 
+/* FSMap subscribers (see all MDS clusters at once) */
+#define CEPH_MSG_FS_MAP                 45
+
 
 /* watch-notify operations */
 enum {
diff --git a/src/messages/MFSMap.h b/src/messages/MFSMap.h
new file mode 100644 (file)
index 0000000..dd886b5
--- /dev/null
@@ -0,0 +1,59 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*- 
+// vim: ts=8 sw=2 smarttab
+/*
+ * Ceph - scalable distributed file system
+ *
+ * Copyright (C) 2004-2006 Sage Weil <sage@newdream.net>
+ *
+ * This is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software 
+ * Foundation.  See file COPYING.
+ * 
+ */
+
+
+#ifndef CEPH_MFSMAP_H
+#define CEPH_MFSMAP_H
+
+#include "msg/Message.h"
+#include "mds/FSMap.h"
+#include "include/ceph_features.h"
+
+class MFSMap : public Message {
+ public:
+  epoch_t epoch;
+  bufferlist encoded;
+
+  version_t get_epoch() const { return epoch; }
+  bufferlist& get_encoded() { return encoded; }
+
+  MFSMap() : 
+    Message(CEPH_MSG_FS_MAP), epoch(0) {}
+  MFSMap(const uuid_d &f, FSMap *fsmap) :
+    Message(CEPH_MSG_FS_MAP), epoch(fsmap->get_epoch())
+  {
+    fsmap->encode(encoded, -1);
+  }
+private:
+  ~MFSMap() {}
+
+public:
+  const char *get_type_name() const { return "mdsmap"; }
+  void print(ostream& out) const {
+    out << "fsmap(e " << epoch << ")";
+  }
+
+  // marshalling
+  void decode_payload() {
+    bufferlist::iterator p = payload.begin();
+    ::decode(epoch, p);
+    ::decode(encoded, p);
+  }
+  void encode_payload(uint64_t features) {
+    ::encode(epoch, payload);
+    ::encode(encoded, payload);
+  }
+};
+
+#endif
index b6ad12fcaf062b9404019a6932a522950f92e224..0a19dad4cee4b66879f7eb41bce62ce55602c0b4 100644 (file)
@@ -48,6 +48,7 @@ noinst_HEADERS += \
        messages/MMDSFindInoReply.h \
        messages/MMDSFragmentNotify.h \
        messages/MMDSMap.h \
+       messages/MFSMap.h \
        messages/MMDSOpenIno.h \
        messages/MMDSOpenInoReply.h \
        messages/MMDSResolve.h \
index a8ecafcb6d009eb226e9587bb6c7d96eca34725f..f84004bd7b177447156eb18cf1604d09ac2a9535 100644 (file)
@@ -111,6 +111,7 @@ using namespace std;
 #include "messages/MMDSSlaveRequest.h"
 
 #include "messages/MMDSMap.h"
+#include "messages/MFSMap.h"
 #include "messages/MMDSBeacon.h"
 #include "messages/MMDSLoadTargets.h"
 #include "messages/MMDSResolve.h"
@@ -574,6 +575,9 @@ Message *decode_message(CephContext *cct, int crcflags,
   case CEPH_MSG_MDS_MAP:
     m = new MMDSMap;
     break;
+  case CEPH_MSG_FS_MAP:
+    m = new MFSMap;
+    break;
   case MSG_MDS_BEACON:
     m = new MMDSBeacon;
     break;