From: John Spray Date: Wed, 17 Feb 2016 14:51:07 +0000 (+0000) Subject: messages: add MFSMap X-Git-Tag: v10.1.0~144^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ccbd266523218994319a5f1e2e9c03dd7c24247d;p=ceph.git messages: add MFSMap For mon clients that subscribe to 'fsmap'. Signed-off-by: John Spray --- diff --git a/src/include/ceph_fs.h b/src/include/ceph_fs.h index 202664d80e3..47e6a0bc138 100644 --- a/src/include/ceph_fs.h +++ b/src/include/ceph_fs.h @@ -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 index 00000000000..dd886b521e7 --- /dev/null +++ b/src/messages/MFSMap.h @@ -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 + * + * 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 diff --git a/src/messages/Makefile.am b/src/messages/Makefile.am index b6ad12fcaf0..0a19dad4cee 100644 --- a/src/messages/Makefile.am +++ b/src/messages/Makefile.am @@ -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 \ diff --git a/src/msg/Message.cc b/src/msg/Message.cc index a8ecafcb6d0..f84004bd7b1 100644 --- a/src/msg/Message.cc +++ b/src/msg/Message.cc @@ -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;