]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
tools/ceph-dencoder: split types.h into smaller pieces 28359/head
authorKefu Chai <kchai@redhat.com>
Fri, 31 May 2019 18:35:16 +0000 (02:35 +0800)
committerKefu Chai <kchai@redhat.com>
Sat, 1 Jun 2019 15:12:16 +0000 (23:12 +0800)
instead of putting all types in a single compilation unit, split them
into smaller groups, in hope to reduce the memory footprint of compiler
when compiling ceph_dencoder.cc.

sometimes, GCC just fails to compile this source file.

Fixes: http://tracker.ceph.com/issues/39595
Signed-off-by: Kefu Chai <kchai@redhat.com>
15 files changed:
src/tools/ceph-dencoder/CMakeLists.txt
src/tools/ceph-dencoder/ceph_dencoder.cc
src/tools/ceph-dencoder/common_types.cc [new file with mode: 0644]
src/tools/ceph-dencoder/common_types.h [new file with mode: 0644]
src/tools/ceph-dencoder/denc_registry.cc [new file with mode: 0644]
src/tools/ceph-dencoder/denc_registry.h [new file with mode: 0644]
src/tools/ceph-dencoder/mds_types.cc [new file with mode: 0644]
src/tools/ceph-dencoder/mds_types.h [new file with mode: 0644]
src/tools/ceph-dencoder/osd_types.cc [new file with mode: 0644]
src/tools/ceph-dencoder/osd_types.h [new file with mode: 0644]
src/tools/ceph-dencoder/rbd_types.cc [new file with mode: 0644]
src/tools/ceph-dencoder/rbd_types.h [new file with mode: 0644]
src/tools/ceph-dencoder/rgw_types.cc [new file with mode: 0644]
src/tools/ceph-dencoder/rgw_types.h [new file with mode: 0644]
src/tools/ceph-dencoder/types.h [deleted file]

index 887d7cca8c37f1dd80052a86cf506cc9eaeb815d..4de963ea262e86e504f752f33aa722eba8399bc1 100644 (file)
@@ -9,7 +9,13 @@ if(HAS_VTA)
 endif()
 
 set(dencoder_srcs
+  denc_registry.cc
   ceph_dencoder.cc
+  common_types.cc
+  mds_types.cc
+  osd_types.cc
+  rbd_types.cc
+  rgw_types.cc
   ../../include/uuid.cc
   ../../include/utime.cc
   $<TARGET_OBJECTS:common_texttable_obj>)
index 2a17eef1b7a2fa7c70a3425aa737f0ab110959bb..53cf4c33696673cc3717495cda8b3c9927059775 100644 (file)
 
 
 #include <errno.h>
-#include "include/types.h"
 #include "ceph_ver.h"
-#include "include/encoding.h"
-#include "include/ceph_features.h"
-#include "common/ceph_argparse.h"
+#include "include/types.h"
 #include "common/Formatter.h"
+#include "common/ceph_argparse.h"
 #include "common/errno.h"
-#include "msg/Message.h"
-#include "include/ceph_assert.h"
-
-#define TYPE(t)
-#define TYPE_STRAYDATA(t)
-#define TYPE_NONDETERMINISTIC(t)
-#define TYPE_FEATUREFUL(t)
-#define TYPE_FEATUREFUL_STRAYDATA(t)
-#define TYPE_FEATUREFUL_NONDETERMINISTIC(t)
-#define TYPE_FEATUREFUL_NOCOPY(t)
-#define TYPE_NOCOPY(t)
-#define MESSAGE(t)
-#include "tools/ceph-dencoder/types.h"
-#undef TYPE
-#undef TYPE_STRAYDATA
-#undef TYPE_NONDETERMINISTIC
-#undef TYPE_NOCOPY
-#undef TYPE_FEATUREFUL
-#undef TYPE_FEATUREFUL_STRAYDATA
-#undef TYPE_FEATUREFUL_NONDETERMINISTIC
-#undef TYPE_FEATUREFUL_NOCOPY
-#undef MESSAGE
+#include "denc_registry.h"
 
 #define MB(m) ((m) * 1024 * 1024)
 
@@ -73,240 +50,16 @@ void usage(ostream &out)
   out << "  select_test <n>     select generated test object as in-memory object\n";
   out << "  is_deterministic    exit w/ success if type encodes deterministically\n";
 }
-struct Dencoder {
-  virtual ~Dencoder() {}
-  virtual string decode(bufferlist bl, uint64_t seek) = 0;
-  virtual void encode(bufferlist& out, uint64_t features) = 0;
-  virtual void dump(ceph::Formatter *f) = 0;
-  virtual void copy() {
-    cerr << "copy operator= not supported" << std::endl;
-  }
-  virtual void copy_ctor() {
-    cerr << "copy ctor not supported" << std::endl;
-  }
-  virtual void generate() = 0;
-  virtual int num_generated() = 0;
-  virtual string select_generated(unsigned n) = 0;
-  virtual bool is_deterministic() = 0;
-  //virtual void print(ostream& out) = 0;
-};
-
-template<class T>
-class DencoderBase : public Dencoder {
-protected:
-  T* m_object;
-  list<T*> m_list;
-  bool stray_okay;
-  bool nondeterministic;
-
-public:
-  DencoderBase(bool stray_okay, bool nondeterministic)
-    : m_object(new T),
-      stray_okay(stray_okay),
-      nondeterministic(nondeterministic) {}
-  ~DencoderBase() override {
-    delete m_object;
-  }
-
-  string decode(bufferlist bl, uint64_t seek) override {
-    auto p = bl.cbegin();
-    p.seek(seek);
-    try {
-      using ceph::decode;
-      decode(*m_object, p);
-    }
-    catch (buffer::error& e) {
-      return e.what();
-    }
-    if (!stray_okay && !p.end()) {
-      ostringstream ss;
-      ss << "stray data at end of buffer, offset " << p.get_off();
-      return ss.str();
-    }
-    return string();
-  }
-
-  void encode(bufferlist& out, uint64_t features) override = 0;
-
-  void dump(ceph::Formatter *f) override {
-    m_object->dump(f);
-  }
-  void generate() override {
-    T::generate_test_instances(m_list);
-  }
-  int num_generated() override {
-    return m_list.size();
-  }
-  string select_generated(unsigned i) override {
-    // allow 0- or 1-based (by wrapping)
-    if (i == 0)
-      i = m_list.size();
-    if ((i == 0) || (i > m_list.size()))
-      return "invalid id for generated object";
-    m_object = *(std::next(m_list.begin(), i-1));
-    return string();
-  }
-
-  bool is_deterministic() override {
-    return !nondeterministic;
-  }
-};
-
-template<class T>
-class DencoderImplNoFeatureNoCopy : public DencoderBase<T> {
-public:
-  DencoderImplNoFeatureNoCopy(bool stray_ok, bool nondeterministic)
-    : DencoderBase<T>(stray_ok, nondeterministic) {}
-  void encode(bufferlist& out, uint64_t features) override {
-    out.clear();
-    using ceph::encode;
-    encode(*this->m_object, out);
-  }
-};
-
-template<class T>
-class DencoderImplNoFeature : public DencoderImplNoFeatureNoCopy<T> {
-public:
-  DencoderImplNoFeature(bool stray_ok, bool nondeterministic)
-    : DencoderImplNoFeatureNoCopy<T>(stray_ok, nondeterministic) {}
-  void copy() override {
-    T *n = new T;
-    *n = *this->m_object;
-    delete this->m_object;
-    this->m_object = n;
-  }
-  void copy_ctor() override {
-    T *n = new T(*this->m_object);
-    delete this->m_object;
-    this->m_object = n;
-  }
-};
-
-template<class T>
-class DencoderImplFeaturefulNoCopy : public DencoderBase<T> {
-public:
-  DencoderImplFeaturefulNoCopy(bool stray_ok, bool nondeterministic)
-    : DencoderBase<T>(stray_ok, nondeterministic) {}
-  void encode(bufferlist& out, uint64_t features) override {
-    out.clear();
-    using ceph::encode;
-    encode(*(this->m_object), out, features);
-  }
-};
-
-template<class T>
-class DencoderImplFeatureful : public DencoderImplFeaturefulNoCopy<T> {
-public:
-  DencoderImplFeatureful(bool stray_ok, bool nondeterministic)
-    : DencoderImplFeaturefulNoCopy<T>(stray_ok, nondeterministic) {}
-  void copy() override {
-    T *n = new T;
-    *n = *this->m_object;
-    delete this->m_object;
-    this->m_object = n;
-  }
-  void copy_ctor() override {
-    T *n = new T(*this->m_object);
-    delete this->m_object;
-    this->m_object = n;
-  }
-};
-
-template<class T>
-class MessageDencoderImpl : public Dencoder {
-  ref_t<T> m_object;
-  list<ref_t<T>> m_list;
-
-public:
-  MessageDencoderImpl() : m_object{make_message<T>()} {}
-  ~MessageDencoderImpl() override {}
-
-  string decode(bufferlist bl, uint64_t seek) override {
-    auto p = bl.cbegin();
-    p.seek(seek);
-    try {
-      ref_t<Message> n(decode_message(g_ceph_context, 0, p), false);
-      if (!n)
-       throw std::runtime_error("failed to decode");
-      if (n->get_type() != m_object->get_type()) {
-       stringstream ss;
-       ss << "decoded type " << n->get_type() << " instead of expected " << m_object->get_type();
-       throw std::runtime_error(ss.str());
-      }
-      m_object = ref_cast<T>(n);
-    }
-    catch (buffer::error& e) {
-      return e.what();
-    }
-    if (!p.end()) {
-      ostringstream ss;
-      ss << "stray data at end of buffer, offset " << p.get_off();
-      return ss.str();
-    }
-    return string();
-  }
-
-  void encode(bufferlist& out, uint64_t features) override {
-    out.clear();
-    encode_message(m_object.get(), features, out);
-  }
-
-  void dump(ceph::Formatter *f) override {
-    m_object->dump(f);
-  }
-  void generate() override {
-    //T::generate_test_instances(m_list);
-  }
-  int num_generated() override {
-    return m_list.size();
-  }
-  string select_generated(unsigned i) override {
-    // allow 0- or 1-based (by wrapping)
-    if (i == 0)
-      i = m_list.size();
-    if ((i == 0) || (i > m_list.size()))
-      return "invalid id for generated object";
-    m_object = *(std::next(m_list.begin(), i-1));
-    return string();
-  }
-  bool is_deterministic() override {
-    return true;
-  }
-
-  //void print(ostream& out) {
-  //out << m_object << std::endl;
-  //}
-};
-
   
-
 int main(int argc, const char **argv)
 {
-  // dencoders
-  map<string,Dencoder*> dencoders;
+  register_common_dencoders();
+  register_mds_dencoders();
+  register_osd_dencoders();
+  register_rbd_dencoders();
+  register_rgw_dencoders();
 
-#define T_STR(x) #x
-#define T_STRINGIFY(x) T_STR(x)
-#define TYPE(t) dencoders[T_STRINGIFY(t)] = new DencoderImplNoFeature<t>(false, false);
-#define TYPE_STRAYDATA(t) dencoders[T_STRINGIFY(t)] = new DencoderImplNoFeature<t>(true, false);
-#define TYPE_NONDETERMINISTIC(t) dencoders[T_STRINGIFY(t)] = new DencoderImplNoFeature<t>(false, true);
-#define TYPE_FEATUREFUL(t) dencoders[T_STRINGIFY(t)] = new DencoderImplFeatureful<t>(false, false);
-#define TYPE_FEATUREFUL_STRAYDATA(t) dencoders[T_STRINGIFY(t)] = new DencoderImplFeatureful<t>(true, false);
-#define TYPE_FEATUREFUL_NONDETERMINISTIC(t) dencoders[T_STRINGIFY(t)] = new DencoderImplFeatureful<t>(false, true);
-#define TYPE_FEATUREFUL_NOCOPY(t) dencoders[T_STRINGIFY(t)] = new DencoderImplFeaturefulNoCopy<t>(false, false);
-#define TYPE_NOCOPY(t) dencoders[T_STRINGIFY(t)] = new DencoderImplNoFeatureNoCopy<t>(false, false);
-#define MESSAGE(t) dencoders[T_STRINGIFY(t)] = new MessageDencoderImpl<t>;
-#include "tools/ceph-dencoder/types.h"
-#undef TYPE
-#undef TYPE_STRAYDATA
-#undef TYPE_NONDETERMINISTIC
-#undef TYPE_NOCOPY
-#undef TYPE_FEATUREFUL
-#undef TYPE_FEATUREFUL_STRAYDATA
-#undef TYPE_FEATUREFUL_NONDETERMINISTIC
-#undef TYPE_FEATUREFUL_NOCOPY
-#undef T_STR
-#undef T_STRINGIFY
+  auto& dencoders = DencoderRegistry::instance().get();
 
   vector<const char*> args;
   argv_to_vec(argc, argv, args);
@@ -330,10 +83,8 @@ int main(int argc, const char **argv)
     } else if (*i == string("version")) {
       cout << CEPH_GIT_NICE_VER << std::endl;
     } else if (*i == string("list_types")) {
-      for (map<string,Dencoder*>::iterator p = dencoders.begin();
-          p != dencoders.end();
-          ++p)
-       cout << p->first << std::endl;
+      for (auto& dencoder : dencoders)
+       cout << dencoder.first << std::endl;
       exit(0);
     } else if (*i == string("type")) {
       ++i;
@@ -346,7 +97,7 @@ int main(int argc, const char **argv)
        cerr << "class '" << cname << "' unknown" << std::endl;
        exit(1);
       }
-      den = dencoders[cname];
+      den = dencoders[cname].get();
       den->generate();
     } else if (*i == string("skip")) {
       ++i;
diff --git a/src/tools/ceph-dencoder/common_types.cc b/src/tools/ceph-dencoder/common_types.cc
new file mode 100644 (file)
index 0000000..889a9e9
--- /dev/null
@@ -0,0 +1,31 @@
+#include "acconfig.h"
+#include <cstdint>
+using namespace std;
+#include "include/ceph_features.h"
+
+#define TYPE(t)
+#define TYPE_STRAYDATA(t)
+#define TYPE_NONDETERMINISTIC(t)
+#define TYPE_FEATUREFUL(t)
+#define TYPE_FEATUREFUL_STRAYDATA(t)
+#define TYPE_FEATUREFUL_NONDETERMINISTIC(t)
+#define TYPE_FEATUREFUL_NOCOPY(t)
+#define TYPE_NOCOPY(t)
+#define MESSAGE(t)
+#include "common_types.h"
+#undef TYPE
+#undef TYPE_STRAYDATA
+#undef TYPE_NONDETERMINISTIC
+#undef TYPE_NOCOPY
+#undef TYPE_FEATUREFUL
+#undef TYPE_FEATUREFUL_STRAYDATA
+#undef TYPE_FEATUREFUL_NONDETERMINISTIC
+#undef TYPE_FEATUREFUL_NOCOPY
+#undef MESSAGE
+
+#include "denc_registry.h"
+
+void register_common_dencoders()
+{
+#include "common_types.h"
+}
diff --git a/src/tools/ceph-dencoder/common_types.h b/src/tools/ceph-dencoder/common_types.h
new file mode 100644 (file)
index 0000000..402943a
--- /dev/null
@@ -0,0 +1,446 @@
+#include "ceph_time.h"
+TYPE(real_time_wrapper)
+TYPE(coarse_real_time_wrapper)
+TYPE(timespan_wrapper)
+
+#include "include/utime.h"
+TYPE(utime_t)
+
+#include "include/uuid.h"
+TYPE(uuid_d)
+
+#include "sstring.h"
+TYPE(sstring_wrapper)
+
+#include "include/CompatSet.h"
+TYPE(CompatSet)
+
+#include "include/filepath.h"
+TYPE(filepath)
+
+#include "include/fs_types.h"
+TYPE_FEATUREFUL(file_layout_t)
+
+#include "include/util.h"
+TYPE(ceph_data_stats)
+
+#include "common/bit_vector.hpp"
+TYPE(BitVector<2>)
+
+#include "common/bloom_filter.hpp"
+TYPE(bloom_filter)
+TYPE(compressible_bloom_filter)
+
+#include "common/DecayCounter.h"
+TYPE(DecayCounter)
+
+#include "common/histogram.h"
+TYPE(pow2_hist_t)
+
+#include "common/hobject.h"
+TYPE(hobject_t)
+TYPE(ghobject_t)
+
+#include "common/LogEntry.h"
+TYPE_FEATUREFUL(LogEntry)
+TYPE_FEATUREFUL(LogSummary)
+
+#include "common/SloppyCRCMap.h"
+TYPE(SloppyCRCMap)
+
+#include "common/snap_types.h"
+TYPE(SnapContext)
+TYPE(SnapRealmInfo)
+
+#include "msg/msg_types.h"
+TYPE(entity_name_t)
+TYPE_FEATUREFUL(entity_addr_t)
+TYPE_FEATUREFUL(entity_addrvec_t)
+TYPE_FEATUREFUL(entity_inst_t)
+
+#include "crush/CrushWrapper.h"
+TYPE_FEATUREFUL_NOCOPY(CrushWrapper)
+
+#include "cls/lock/cls_lock_types.h"
+TYPE(rados::cls::lock::locker_id_t)
+TYPE_FEATUREFUL(rados::cls::lock::locker_info_t)
+TYPE_FEATUREFUL(rados::cls::lock::lock_info_t)
+
+#include "cls/lock/cls_lock_ops.h"
+TYPE(cls_lock_lock_op)
+TYPE(cls_lock_unlock_op)
+TYPE(cls_lock_break_op)
+TYPE(cls_lock_get_info_op)
+TYPE_FEATUREFUL(cls_lock_get_info_reply)
+TYPE(cls_lock_list_locks_reply)
+TYPE(cls_lock_assert_op)
+TYPE(cls_lock_set_cookie_op)
+
+#include "cls/refcount/cls_refcount_ops.h"
+TYPE(cls_refcount_get_op)
+TYPE(cls_refcount_put_op)
+TYPE(cls_refcount_set_op)
+TYPE(cls_refcount_read_op)
+TYPE(cls_refcount_read_ret)
+TYPE(obj_refcount)
+
+#include "journal/Entry.h"
+TYPE(journal::Entry)
+
+// --- messages ---
+#include "messages/MAuth.h"
+MESSAGE(MAuth)
+
+#include "messages/MAuthReply.h"
+MESSAGE(MAuthReply)
+
+#include "messages/MCacheExpire.h"
+MESSAGE(MCacheExpire)
+
+#include "messages/MClientCapRelease.h"
+MESSAGE(MClientCapRelease)
+
+#include "messages/MClientCaps.h"
+MESSAGE(MClientCaps)
+
+#include "messages/MClientLease.h"
+MESSAGE(MClientLease)
+
+#include "messages/MClientReconnect.h"
+MESSAGE(MClientReconnect)
+
+#include "messages/MClientReply.h"
+MESSAGE(MClientReply)
+
+#include "messages/MClientRequest.h"
+MESSAGE(MClientRequest)
+
+#include "messages/MClientRequestForward.h"
+MESSAGE(MClientRequestForward)
+
+#include "messages/MClientQuota.h"
+MESSAGE(MClientQuota)
+
+#include "messages/MClientSession.h"
+MESSAGE(MClientSession)
+
+#include "messages/MClientSnap.h"
+MESSAGE(MClientSnap)
+
+#include "messages/MCommand.h"
+MESSAGE(MCommand)
+
+#include "messages/MCommandReply.h"
+MESSAGE(MCommandReply)
+
+#include "messages/MConfig.h"
+MESSAGE(MConfig)
+
+#include "messages/MDentryLink.h"
+MESSAGE(MDentryLink)
+
+#include "messages/MDentryUnlink.h"
+MESSAGE(MDentryUnlink)
+
+#include "messages/MDirUpdate.h"
+MESSAGE(MDirUpdate)
+
+#include "messages/MDiscover.h"
+MESSAGE(MDiscover)
+
+#include "messages/MDiscoverReply.h"
+MESSAGE(MDiscoverReply)
+
+#include "messages/MExportCaps.h"
+MESSAGE(MExportCaps)
+
+#include "messages/MExportCapsAck.h"
+MESSAGE(MExportCapsAck)
+
+#include "messages/MExportDir.h"
+MESSAGE(MExportDir)
+
+#include "messages/MExportDirAck.h"
+MESSAGE(MExportDirAck)
+
+#include "messages/MExportDirCancel.h"
+MESSAGE(MExportDirCancel)
+
+#include "messages/MExportDirDiscover.h"
+MESSAGE(MExportDirDiscover)
+
+#include "messages/MExportDirDiscoverAck.h"
+MESSAGE(MExportDirDiscoverAck)
+
+#include "messages/MExportDirFinish.h"
+MESSAGE(MExportDirFinish)
+
+#include "messages/MExportDirNotify.h"
+MESSAGE(MExportDirNotify)
+
+#include "messages/MExportDirNotifyAck.h"
+MESSAGE(MExportDirNotifyAck)
+
+#include "messages/MExportDirPrep.h"
+MESSAGE(MExportDirPrep)
+
+#include "messages/MExportDirPrepAck.h"
+MESSAGE(MExportDirPrepAck)
+
+#include "messages/MForward.h"
+MESSAGE(MForward)
+
+#include "messages/MFSMap.h"
+MESSAGE(MFSMap)
+
+#include "messages/MFSMapUser.h"
+MESSAGE(MFSMapUser)
+
+#include "messages/MGatherCaps.h"
+MESSAGE(MGatherCaps)
+
+#include "messages/MGenericMessage.h"
+MESSAGE(MGenericMessage)
+
+#include "messages/MGetConfig.h"
+MESSAGE(MGetConfig)
+
+#include "messages/MGetPoolStats.h"
+MESSAGE(MGetPoolStats)
+
+#include "messages/MGetPoolStatsReply.h"
+MESSAGE(MGetPoolStatsReply)
+
+#include "messages/MHeartbeat.h"
+MESSAGE(MHeartbeat)
+
+#include "messages/MInodeFileCaps.h"
+MESSAGE(MInodeFileCaps)
+
+#include "messages/MLock.h"
+MESSAGE(MLock)
+
+#include "messages/MLog.h"
+MESSAGE(MLog)
+
+#include "messages/MLogAck.h"
+MESSAGE(MLogAck)
+
+#include "messages/MMDSOpenIno.h"
+MESSAGE(MMDSOpenIno)
+
+#include "messages/MMDSOpenInoReply.h"
+MESSAGE(MMDSOpenInoReply)
+
+#include "messages/MMDSBeacon.h"
+MESSAGE(MMDSBeacon)
+
+#include "messages/MMDSCacheRejoin.h"
+MESSAGE(MMDSCacheRejoin)
+
+#include "messages/MMDSFindIno.h"
+MESSAGE(MMDSFindIno)
+
+#include "messages/MMDSFindInoReply.h"
+MESSAGE(MMDSFindInoReply)
+
+#include "messages/MMDSFragmentNotify.h"
+MESSAGE(MMDSFragmentNotify)
+
+#include "messages/MMDSLoadTargets.h"
+MESSAGE(MMDSLoadTargets)
+
+#include "messages/MMDSMap.h"
+MESSAGE(MMDSMap)
+
+#include "messages/MMgrReport.h"
+MESSAGE(MMgrReport)
+
+#include "messages/MMDSResolve.h"
+MESSAGE(MMDSResolve)
+
+#include "messages/MMDSResolveAck.h"
+MESSAGE(MMDSResolveAck)
+
+#include "messages/MMDSSlaveRequest.h"
+MESSAGE(MMDSSlaveRequest)
+
+#include "messages/MMDSSnapUpdate.h"
+MESSAGE(MMDSSnapUpdate)
+
+#include "messages/MMDSTableRequest.h"
+MESSAGE(MMDSTableRequest)
+
+#include "messages/MMgrClose.h"
+MESSAGE(MMgrClose)
+
+#include "messages/MMgrConfigure.h"
+MESSAGE(MMgrConfigure)
+
+#include "messages/MMgrDigest.h"
+MESSAGE(MMgrDigest)
+
+#include "messages/MMgrMap.h"
+MESSAGE(MMgrMap)
+
+#include "messages/MMgrOpen.h"
+MESSAGE(MMgrOpen)
+
+#include "messages/MMonCommand.h"
+MESSAGE(MMonCommand)
+
+#include "messages/MMonCommandAck.h"
+MESSAGE(MMonCommandAck)
+
+#include "messages/MMonElection.h"
+MESSAGE(MMonElection)
+
+#include "messages/MMonGetMap.h"
+MESSAGE(MMonGetMap)
+
+#include "messages/MMonGetVersion.h"
+MESSAGE(MMonGetVersion)
+
+#include "messages/MMonGetVersionReply.h"
+MESSAGE(MMonGetVersionReply)
+
+#include "messages/MMonGlobalID.h"
+MESSAGE(MMonGlobalID)
+
+#include "messages/MMonJoin.h"
+MESSAGE(MMonJoin)
+
+#include "messages/MMonMap.h"
+MESSAGE(MMonMap)
+
+#include "messages/MMonMetadata.h"
+MESSAGE(MMonMetadata)
+
+#include "messages/MMonPaxos.h"
+MESSAGE(MMonPaxos)
+
+#include "messages/MMonProbe.h"
+MESSAGE(MMonProbe)
+
+#include "messages/MMonScrub.h"
+MESSAGE(MMonScrub)
+
+#include "messages/MMonSync.h"
+MESSAGE(MMonSync)
+
+#include "messages/MMonSubscribe.h"
+MESSAGE(MMonSubscribe)
+
+#include "messages/MMonSubscribeAck.h"
+MESSAGE(MMonSubscribeAck)
+
+#include "messages/MOSDAlive.h"
+MESSAGE(MOSDAlive)
+
+#include "messages/MOSDBoot.h"
+MESSAGE(MOSDBoot)
+
+#include "messages/MOSDFailure.h"
+MESSAGE(MOSDFailure)
+
+#include "messages/MOSDMap.h"
+MESSAGE(MOSDMap)
+
+#include "messages/MOSDOp.h"
+MESSAGE(MOSDOp)
+
+#include "messages/MOSDOpReply.h"
+MESSAGE(MOSDOpReply)
+
+#include "messages/MOSDPGBackfill.h"
+MESSAGE(MOSDPGBackfill)
+
+#include "messages/MOSDPGCreate.h"
+MESSAGE(MOSDPGCreate)
+
+#include "messages/MOSDPGCreate2.h"
+MESSAGE(MOSDPGCreate2)
+
+#include "messages/MOSDPGInfo.h"
+MESSAGE(MOSDPGInfo)
+
+#include "messages/MOSDPGLog.h"
+MESSAGE(MOSDPGLog)
+
+#include "messages/MOSDPGNotify.h"
+MESSAGE(MOSDPGNotify)
+
+#include "messages/MOSDPGQuery.h"
+MESSAGE(MOSDPGQuery)
+
+#include "messages/MOSDPGRemove.h"
+MESSAGE(MOSDPGRemove)
+
+#include "messages/MOSDPGRecoveryDelete.h"
+MESSAGE(MOSDPGRecoveryDelete)
+
+#include "messages/MOSDPGRecoveryDeleteReply.h"
+MESSAGE(MOSDPGRecoveryDeleteReply)
+
+#include "messages/MOSDPGScan.h"
+MESSAGE(MOSDPGScan)
+
+#include "messages/MOSDPGTemp.h"
+MESSAGE(MOSDPGTemp)
+
+#include "messages/MOSDPGTrim.h"
+MESSAGE(MOSDPGTrim)
+
+#include "messages/MOSDPing.h"
+MESSAGE(MOSDPing)
+
+#include "messages/MOSDRepScrub.h"
+MESSAGE(MOSDRepScrub)
+
+#include "messages/MOSDScrub.h"
+MESSAGE(MOSDScrub)
+
+#include "messages/MOSDScrub2.h"
+MESSAGE(MOSDScrub2)
+
+#include "messages/MOSDForceRecovery.h"
+MESSAGE(MOSDForceRecovery)
+
+#include "messages/MPGStats.h"
+MESSAGE(MPGStats)
+
+#include "messages/MPGStatsAck.h"
+MESSAGE(MPGStatsAck)
+
+#include "messages/MPing.h"
+MESSAGE(MPing)
+
+#include "messages/MPoolOp.h"
+MESSAGE(MPoolOp)
+
+#include "messages/MPoolOpReply.h"
+MESSAGE(MPoolOpReply)
+
+#include "messages/MRemoveSnaps.h"
+MESSAGE(MRemoveSnaps)
+
+#include "messages/MRoute.h"
+MESSAGE(MRoute)
+
+#include "messages/MServiceMap.h"
+MESSAGE(MServiceMap)
+
+#include "messages/MStatfs.h"
+MESSAGE(MStatfs)
+
+#include "messages/MStatfsReply.h"
+MESSAGE(MStatfsReply)
+
+#include "messages/MTimeCheck.h"
+MESSAGE(MTimeCheck)
+
+#include "messages/MTimeCheck2.h"
+MESSAGE(MTimeCheck2)
+
+#include "messages/MWatchNotify.h"
+MESSAGE(MWatchNotify)
diff --git a/src/tools/ceph-dencoder/denc_registry.cc b/src/tools/ceph-dencoder/denc_registry.cc
new file mode 100644 (file)
index 0000000..0db83af
--- /dev/null
@@ -0,0 +1,12 @@
+#include "denc_registry.h"
+
+void DencoderRegistry::add(const char* name, std::unique_ptr<Dencoder>&& denc)
+{
+  dencoders.emplace(name, std::move(denc));
+};
+
+DencoderRegistry& DencoderRegistry::instance()
+{
+  static DencoderRegistry registry;
+  return registry;
+}
diff --git a/src/tools/ceph-dencoder/denc_registry.h b/src/tools/ceph-dencoder/denc_registry.h
new file mode 100644 (file)
index 0000000..d98c231
--- /dev/null
@@ -0,0 +1,254 @@
+// -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
+// vim: ts=8 sw=2 smarttab
+
+#pragma once
+
+#include <iostream>
+#include <string>
+#include "include/buffer_fwd.h"
+#include "msg/Message.h"
+
+namespace ceph {
+  class Formatter;
+}
+
+struct Dencoder {
+  virtual ~Dencoder() {}
+  virtual std::string decode(bufferlist bl, uint64_t seek) = 0;
+  virtual void encode(bufferlist& out, uint64_t features) = 0;
+  virtual void dump(ceph::Formatter *f) = 0;
+  virtual void copy() {
+    std::cerr << "copy operator= not supported" << std::endl;
+  }
+  virtual void copy_ctor() {
+    std::cerr << "copy ctor not supported" << std::endl;
+  }
+  virtual void generate() = 0;
+  virtual int num_generated() = 0;
+  virtual std::string select_generated(unsigned n) = 0;
+  virtual bool is_deterministic() = 0;
+  //virtual void print(ostream& out) = 0;
+};
+
+template<class T>
+class DencoderBase : public Dencoder {
+protected:
+  T* m_object;
+  list<T*> m_list;
+  bool stray_okay;
+  bool nondeterministic;
+
+public:
+  DencoderBase(bool stray_okay, bool nondeterministic)
+    : m_object(new T),
+      stray_okay(stray_okay),
+      nondeterministic(nondeterministic) {}
+  ~DencoderBase() override {
+    delete m_object;
+  }
+
+  std::string decode(bufferlist bl, uint64_t seek) override {
+    auto p = bl.cbegin();
+    p.seek(seek);
+    try {
+      using ceph::decode;
+      decode(*m_object, p);
+    }
+    catch (buffer::error& e) {
+      return e.what();
+    }
+    if (!stray_okay && !p.end()) {
+      ostringstream ss;
+      ss << "stray data at end of buffer, offset " << p.get_off();
+      return ss.str();
+    }
+    return {};
+  }
+
+  void encode(bufferlist& out, uint64_t features) override = 0;
+
+  void dump(ceph::Formatter *f) override {
+    m_object->dump(f);
+  }
+  void generate() override {
+    T::generate_test_instances(m_list);
+  }
+  int num_generated() override {
+    return m_list.size();
+  }
+  string select_generated(unsigned i) override {
+    // allow 0- or 1-based (by wrapping)
+    if (i == 0)
+      i = m_list.size();
+    if ((i == 0) || (i > m_list.size()))
+      return "invalid id for generated object";
+    m_object = *(std::next(m_list.begin(), i-1));
+    return string();
+  }
+
+  bool is_deterministic() override {
+    return !nondeterministic;
+  }
+};
+
+template<class T>
+class DencoderImplNoFeatureNoCopy : public DencoderBase<T> {
+public:
+  DencoderImplNoFeatureNoCopy(bool stray_ok, bool nondeterministic)
+    : DencoderBase<T>(stray_ok, nondeterministic) {}
+  void encode(bufferlist& out, uint64_t features) override {
+    out.clear();
+    using ceph::encode;
+    encode(*this->m_object, out);
+  }
+};
+
+template<class T>
+class DencoderImplNoFeature : public DencoderImplNoFeatureNoCopy<T> {
+public:
+  DencoderImplNoFeature(bool stray_ok, bool nondeterministic)
+    : DencoderImplNoFeatureNoCopy<T>(stray_ok, nondeterministic) {}
+  void copy() override {
+    T *n = new T;
+    *n = *this->m_object;
+    delete this->m_object;
+    this->m_object = n;
+  }
+  void copy_ctor() override {
+    T *n = new T(*this->m_object);
+    delete this->m_object;
+    this->m_object = n;
+  }
+};
+
+template<class T>
+class DencoderImplFeaturefulNoCopy : public DencoderBase<T> {
+public:
+  DencoderImplFeaturefulNoCopy(bool stray_ok, bool nondeterministic)
+    : DencoderBase<T>(stray_ok, nondeterministic) {}
+  void encode(bufferlist& out, uint64_t features) override {
+    out.clear();
+    using ceph::encode;
+    encode(*(this->m_object), out, features);
+  }
+};
+
+template<class T>
+class DencoderImplFeatureful : public DencoderImplFeaturefulNoCopy<T> {
+public:
+  DencoderImplFeatureful(bool stray_ok, bool nondeterministic)
+    : DencoderImplFeaturefulNoCopy<T>(stray_ok, nondeterministic) {}
+  void copy() override {
+    T *n = new T;
+    *n = *this->m_object;
+    delete this->m_object;
+    this->m_object = n;
+  }
+  void copy_ctor() override {
+    T *n = new T(*this->m_object);
+    delete this->m_object;
+    this->m_object = n;
+  }
+};
+
+template<class T>
+class MessageDencoderImpl : public Dencoder {
+  ref_t<T> m_object;
+  list<ref_t<T>> m_list;
+
+public:
+  MessageDencoderImpl() : m_object{make_message<T>()} {}
+  ~MessageDencoderImpl() override {}
+
+  string decode(bufferlist bl, uint64_t seek) override {
+    auto p = bl.cbegin();
+    p.seek(seek);
+    try {
+      ref_t<Message> n(decode_message(g_ceph_context, 0, p), false);
+      if (!n)
+       throw std::runtime_error("failed to decode");
+      if (n->get_type() != m_object->get_type()) {
+       stringstream ss;
+       ss << "decoded type " << n->get_type() << " instead of expected " << m_object->get_type();
+       throw std::runtime_error(ss.str());
+      }
+      m_object = ref_cast<T>(n);
+    }
+    catch (buffer::error& e) {
+      return e.what();
+    }
+    if (!p.end()) {
+      ostringstream ss;
+      ss << "stray data at end of buffer, offset " << p.get_off();
+      return ss.str();
+    }
+    return string();
+  }
+
+  void encode(bufferlist& out, uint64_t features) override {
+    out.clear();
+    encode_message(m_object.get(), features, out);
+  }
+
+  void dump(ceph::Formatter *f) override {
+    m_object->dump(f);
+  }
+  void generate() override {
+    //T::generate_test_instances(m_list);
+  }
+  int num_generated() override {
+    return m_list.size();
+  }
+  string select_generated(unsigned i) override {
+    // allow 0- or 1-based (by wrapping)
+    if (i == 0)
+      i = m_list.size();
+    if ((i == 0) || (i > m_list.size()))
+      return "invalid id for generated object";
+    m_object = *(std::next(m_list.begin(), i-1));
+    return string();
+  }
+  bool is_deterministic() override {
+    return true;
+  }
+
+  //void print(ostream& out) {
+  //out << m_object << std::endl;
+  //}
+};
+
+class DencoderRegistry
+{
+  using dencoders_t = std::map<std::string, std::unique_ptr<Dencoder>>;
+public:
+  void add(const char* name, std::unique_ptr<Dencoder>&& denc);
+  dencoders_t& get() {
+    return dencoders;
+  }
+  static DencoderRegistry& instance();
+private:
+  dencoders_t dencoders;
+};
+
+template<typename DencoderT, typename...Args>
+void make_and_register_dencoder(const char* name, Args&&...args)
+{
+  auto dencoder = std::make_unique<DencoderT>(std::forward<Args>(args)...);
+  DencoderRegistry::instance().add(name, std::move(dencoder));
+}
+
+#define TYPE(t) make_and_register_dencoder<DencoderImplNoFeature<t>>(#t, false, false);
+#define TYPE_STRAYDATA(t) make_and_register_dencoder<DencoderImplNoFeature<t>>(#t, true, false);
+#define TYPE_NONDETERMINISTIC(t) make_and_register_dencoder<DencoderImplNoFeature<t>>(#t, false, true);
+#define TYPE_FEATUREFUL(t) make_and_register_dencoder<DencoderImplFeatureful<t>>(#t, false, false);
+#define TYPE_FEATUREFUL_STRAYDATA(t) make_and_register_dencoder<DencoderImplFeatureful<t>>(#t, true, false);
+#define TYPE_FEATUREFUL_NONDETERMINISTIC(t) make_and_register_dencoder<DencoderImplFeatureful<t>>(#t, false, true);
+#define TYPE_FEATUREFUL_NOCOPY(t) make_and_register_dencoder<DencoderImplFeaturefulNoCopy<t>>(#t, false, false);
+#define TYPE_NOCOPY(t) make_and_register_dencoder<DencoderImplNoFeatureNoCopy<t>>(#t, false, false);
+#define MESSAGE(t) make_and_register_dencoder<MessageDencoderImpl<t>>(#t);
+
+void register_common_dencoders();
+void register_mds_dencoders();
+void register_osd_dencoders();
+void register_rbd_dencoders();
+void register_rgw_dencoders();
diff --git a/src/tools/ceph-dencoder/mds_types.cc b/src/tools/ceph-dencoder/mds_types.cc
new file mode 100644 (file)
index 0000000..5bec4bb
--- /dev/null
@@ -0,0 +1,31 @@
+#include "acconfig.h"
+#include <cstdint>
+using namespace std;
+#include "include/ceph_features.h"
+
+#define TYPE(t)
+#define TYPE_STRAYDATA(t)
+#define TYPE_NONDETERMINISTIC(t)
+#define TYPE_FEATUREFUL(t)
+#define TYPE_FEATUREFUL_STRAYDATA(t)
+#define TYPE_FEATUREFUL_NONDETERMINISTIC(t)
+#define TYPE_FEATUREFUL_NOCOPY(t)
+#define TYPE_NOCOPY(t)
+#define MESSAGE(t)
+#include "mds_types.h"
+#undef TYPE
+#undef TYPE_STRAYDATA
+#undef TYPE_NONDETERMINISTIC
+#undef TYPE_NOCOPY
+#undef TYPE_FEATUREFUL
+#undef TYPE_FEATUREFUL_STRAYDATA
+#undef TYPE_FEATUREFUL_NONDETERMINISTIC
+#undef TYPE_FEATUREFUL_NOCOPY
+#undef MESSAGE
+
+#include "denc_registry.h"
+
+void register_mds_dencoders()
+{
+#include "mds_types.h"
+}
diff --git a/src/tools/ceph-dencoder/mds_types.h b/src/tools/ceph-dencoder/mds_types.h
new file mode 100644 (file)
index 0000000..583d5fc
--- /dev/null
@@ -0,0 +1,111 @@
+#ifdef WITH_CEPHFS
+#include "mds/JournalPointer.h"
+TYPE(JournalPointer)
+
+#include "osdc/Journaler.h"
+TYPE(Journaler::Header)
+
+#include "mds/snap.h"
+TYPE(SnapInfo)
+TYPE(snaplink_t)
+TYPE(sr_t)
+
+#include "mds/mdstypes.h"
+TYPE(frag_info_t)
+TYPE(nest_info_t)
+TYPE(quota_info_t)
+TYPE(client_writeable_range_t)
+TYPE_FEATUREFUL(inode_t<std::allocator>)
+TYPE_FEATUREFUL(old_inode_t<std::allocator>)
+TYPE(fnode_t)
+TYPE(old_rstat_t)
+TYPE_FEATUREFUL(session_info_t)
+TYPE(string_snap_t)
+TYPE(MDSCacheObjectInfo)
+TYPE(mds_table_pending_t)
+TYPE(cap_reconnect_t)
+TYPE(inode_load_vec_t)
+TYPE(dirfrag_load_vec_t)
+TYPE(mds_load_t)
+TYPE(MDSCacheObjectInfo)
+TYPE(inode_backtrace_t)
+TYPE(inode_backpointer_t)
+
+#include "mds/CInode.h"
+TYPE_FEATUREFUL(InodeStore)
+TYPE_FEATUREFUL(InodeStoreBare)
+
+#include "mds/MDSMap.h"
+TYPE_FEATUREFUL(MDSMap)
+TYPE_FEATUREFUL(MDSMap::mds_info_t)
+
+#include "mds/FSMap.h"
+//TYPE_FEATUREFUL(Filesystem)
+TYPE_FEATUREFUL(FSMap)
+
+#include "mds/Capability.h"
+TYPE_NOCOPY(Capability)
+
+#include "mds/inode_backtrace.h"
+TYPE(inode_backpointer_t)
+TYPE(inode_backtrace_t)
+
+#include "mds/InoTable.h"
+TYPE(InoTable)
+
+#include "mds/SnapServer.h"
+TYPE_STRAYDATA(SnapServer)
+
+#include "mds/events/ECommitted.h"
+TYPE_FEATUREFUL_NOCOPY(ECommitted)
+
+#include "mds/events/EExport.h"
+TYPE_FEATUREFUL_NOCOPY(EExport)
+
+#include "mds/events/EFragment.h"
+TYPE_FEATUREFUL_NOCOPY(EFragment)
+
+#include "mds/events/EImportFinish.h"
+TYPE_FEATUREFUL_NOCOPY(EImportFinish)
+
+#include "mds/events/EImportStart.h"
+TYPE_FEATUREFUL_NOCOPY(EImportStart)
+
+#include "mds/events/EMetaBlob.h"
+TYPE_FEATUREFUL_NOCOPY(EMetaBlob::fullbit)
+TYPE(EMetaBlob::remotebit)
+TYPE(EMetaBlob::nullbit)
+TYPE_FEATUREFUL_NOCOPY(EMetaBlob::dirlump)
+TYPE_FEATUREFUL_NOCOPY(EMetaBlob)
+
+#include "mds/events/EOpen.h"
+TYPE_FEATUREFUL_NOCOPY(EOpen)
+
+#include "mds/events/EResetJournal.h"
+TYPE_FEATUREFUL_NOCOPY(EResetJournal)
+
+#include "mds/events/ESession.h"
+TYPE_FEATUREFUL_NOCOPY(ESession)
+
+#include "mds/events/ESessions.h"
+TYPE_FEATUREFUL_NOCOPY(ESessions)
+
+#include "mds/events/ESlaveUpdate.h"
+TYPE(link_rollback)
+TYPE(rmdir_rollback)
+TYPE(rename_rollback::drec)
+TYPE(rename_rollback)
+TYPE_FEATUREFUL_NOCOPY(ESlaveUpdate)
+
+#include "mds/events/ESubtreeMap.h"
+TYPE_FEATUREFUL_NOCOPY(ESubtreeMap)
+
+#include "mds/events/ETableClient.h"
+TYPE_FEATUREFUL_NOCOPY(ETableClient)
+
+#include "mds/events/ETableServer.h"
+TYPE_FEATUREFUL_NOCOPY(ETableServer)
+
+#include "mds/events/EUpdate.h"
+TYPE_FEATUREFUL_NOCOPY(EUpdate)
+#endif // WITH_CEPHFS
diff --git a/src/tools/ceph-dencoder/osd_types.cc b/src/tools/ceph-dencoder/osd_types.cc
new file mode 100644 (file)
index 0000000..c0b82d4
--- /dev/null
@@ -0,0 +1,34 @@
+#include "acconfig.h"
+#include <cstdint>
+using namespace std;
+#include "include/ceph_features.h"
+
+#define TYPE(t)
+#define TYPE_STRAYDATA(t)
+#define TYPE_NONDETERMINISTIC(t)
+#define TYPE_FEATUREFUL(t)
+#define TYPE_FEATUREFUL_STRAYDATA(t)
+#define TYPE_FEATUREFUL_NONDETERMINISTIC(t)
+#define TYPE_FEATUREFUL_NOCOPY(t)
+#define TYPE_NOCOPY(t)
+#define MESSAGE(t)
+#include "osd_types.h"
+#undef TYPE
+#undef TYPE_STRAYDATA
+#undef TYPE_NONDETERMINISTIC
+#undef TYPE_NOCOPY
+#undef TYPE_FEATUREFUL
+#undef TYPE_FEATUREFUL_STRAYDATA
+#undef TYPE_FEATUREFUL_NONDETERMINISTIC
+#undef TYPE_FEATUREFUL_NOCOPY
+#undef MESSAGE
+
+#include "denc_registry.h"
+
+// cannot initialize dencoders when initializing static variables, as some of
+// the types are allocated using mempool, and the mempools are initialized as
+// static variables.
+void register_osd_dencoders()
+{
+#include "osd_types.h"
+}
diff --git a/src/tools/ceph-dencoder/osd_types.h b/src/tools/ceph-dencoder/osd_types.h
new file mode 100644 (file)
index 0000000..211663d
--- /dev/null
@@ -0,0 +1,149 @@
+#include "osd/OSDMap.h"
+TYPE(osd_info_t)
+TYPE(osd_xinfo_t)
+TYPE_FEATUREFUL_NOCOPY(OSDMap)
+TYPE_FEATUREFUL_STRAYDATA(OSDMap::Incremental)
+
+#include "osd/osd_types.h"
+TYPE(osd_reqid_t)
+TYPE(object_locator_t)
+TYPE(request_redirect_t)
+TYPE(pg_t)
+TYPE(coll_t)
+TYPE_FEATUREFUL(objectstore_perf_stat_t)
+TYPE_FEATUREFUL(osd_stat_t)
+TYPE(OSDSuperblock)
+TYPE_FEATUREFUL(pool_snap_info_t)
+TYPE_FEATUREFUL(pg_pool_t)
+TYPE(object_stat_sum_t)
+TYPE(object_stat_collection_t)
+TYPE(pg_stat_t)
+TYPE_FEATUREFUL(pool_stat_t)
+TYPE(pg_hit_set_info_t)
+TYPE(pg_hit_set_history_t)
+TYPE(pg_history_t)
+TYPE(pg_info_t)
+TYPE(PastIntervals)
+TYPE_FEATUREFUL(pg_query_t)
+TYPE(ObjectModDesc)
+TYPE(pg_log_entry_t)
+TYPE(pg_log_dup_t)
+TYPE(pg_log_t)
+TYPE_FEATUREFUL(pg_missing_item)
+TYPE_FEATUREFUL(pg_missing_t)
+TYPE(pg_nls_response_t)
+TYPE(pg_ls_response_t)
+TYPE(object_copy_cursor_t)
+TYPE_FEATUREFUL(object_copy_data_t)
+TYPE(pg_create_t)
+TYPE(OSDSuperblock)
+TYPE(SnapSet)
+TYPE_FEATUREFUL(watch_info_t)
+TYPE_FEATUREFUL(watch_item_t)
+TYPE(object_manifest_t)
+TYPE_FEATUREFUL(object_info_t)
+TYPE(SnapSet)
+TYPE_FEATUREFUL(ObjectRecoveryInfo)
+TYPE(ObjectRecoveryProgress)
+TYPE(PushReplyOp)
+TYPE_FEATUREFUL(PullOp)
+TYPE_FEATUREFUL(PushOp)
+TYPE(ScrubMap::object)
+TYPE(ScrubMap)
+TYPE_FEATUREFUL(obj_list_watch_response_t)
+TYPE(clone_info)
+TYPE(obj_list_snap_response_t)
+TYPE(pool_pg_num_history_t)
+
+#include "osd/ECUtil.h"
+// TYPE(stripe_info_t) non-standard encoding/decoding functions
+TYPE(ECUtil::HashInfo)
+
+#include "osd/ECMsgTypes.h"
+TYPE_NOCOPY(ECSubWrite)
+TYPE(ECSubWriteReply)
+TYPE_FEATUREFUL(ECSubRead)
+TYPE(ECSubReadReply)
+
+#include "osd/HitSet.h"
+TYPE_NONDETERMINISTIC(ExplicitHashHitSet)
+TYPE_NONDETERMINISTIC(ExplicitObjectHitSet)
+TYPE(BloomHitSet)
+TYPE_NONDETERMINISTIC(HitSet)   // because some subclasses are
+TYPE(HitSet::Params)
+
+#include "os/ObjectStore.h"
+TYPE(ObjectStore::Transaction)
+
+#include "os/filestore/SequencerPosition.h"
+TYPE(SequencerPosition)
+
+#ifdef WITH_BLUESTORE
+#include "os/bluestore/bluestore_types.h"
+TYPE(bluestore_bdev_label_t)
+TYPE(bluestore_cnode_t)
+TYPE(bluestore_compression_header_t)
+TYPE(bluestore_extent_ref_map_t)
+TYPE(bluestore_pextent_t)
+TYPE(bluestore_blob_use_tracker_t)
+// TODO: bluestore_blob_t repurposes the "feature" param of encode() for its
+// struct_v. at a higher level, BlueStore::ExtentMap encodes the extends using
+// a different interface than the normal ones. see
+// BlueStore::ExtentMap::encode_some(). maybe we can test it using another
+// approach.
+// TYPE_FEATUREFUL(bluestore_blob_t)
+// TYPE(bluestore_shared_blob_t) there is no encode here
+TYPE(bluestore_onode_t)
+TYPE(bluestore_deferred_op_t)
+TYPE(bluestore_deferred_transaction_t)
+// TYPE(bluestore_compression_header_t) there is no encode here
+
+#include "os/bluestore/bluefs_types.h"
+TYPE(bluefs_extent_t)
+TYPE(bluefs_fnode_t)
+TYPE(bluefs_super_t)
+TYPE(bluefs_transaction_t)
+#endif
+
+#include "mon/AuthMonitor.h"
+TYPE_FEATUREFUL(AuthMonitor::Incremental)
+
+#include "mon/PGMap.h"
+TYPE_FEATUREFUL_NONDETERMINISTIC(PGMapDigest)
+TYPE_FEATUREFUL_NONDETERMINISTIC(PGMap)
+
+#include "mon/MonitorDBStore.h"
+TYPE(MonitorDBStore::Transaction)
+TYPE(MonitorDBStore::Op)
+
+#include "mon/MonMap.h"
+TYPE_FEATUREFUL(MonMap)
+
+#include "mon/MonCap.h"
+TYPE(MonCap)
+
+#include "mon/MgrMap.h"
+TYPE_FEATUREFUL(MgrMap)
+
+#include "mon/mon_types.h"
+TYPE(LevelDBStoreStats)
+TYPE(ScrubResult)
+
+#include "mon/CreatingPGs.h"
+TYPE_FEATUREFUL(creating_pgs_t)
+
+#include "mgr/ServiceMap.h"
+TYPE_FEATUREFUL(ServiceMap)
+TYPE_FEATUREFUL(ServiceMap::Service)
+TYPE_FEATUREFUL(ServiceMap::Daemon)
+
+#include "os/filestore/DBObjectMap.h"
+TYPE(DBObjectMap::_Header)
+TYPE(DBObjectMap::State)
+
+#include "os/filestore/FileStore.h"
+TYPE(FSSuperblock)
+
+#include "os/kstore/kstore_types.h"
+TYPE(kstore_cnode_t)
+TYPE(kstore_onode_t)
diff --git a/src/tools/ceph-dencoder/rbd_types.cc b/src/tools/ceph-dencoder/rbd_types.cc
new file mode 100644 (file)
index 0000000..6327d19
--- /dev/null
@@ -0,0 +1,31 @@
+#include "acconfig.h"
+#include <cstdint>
+using namespace std;
+#include "include/ceph_features.h"
+
+#define TYPE(t)
+#define TYPE_STRAYDATA(t)
+#define TYPE_NONDETERMINISTIC(t)
+#define TYPE_FEATUREFUL(t)
+#define TYPE_FEATUREFUL_STRAYDATA(t)
+#define TYPE_FEATUREFUL_NONDETERMINISTIC(t)
+#define TYPE_FEATUREFUL_NOCOPY(t)
+#define TYPE_NOCOPY(t)
+#define MESSAGE(t)
+#include "rbd_types.h"
+#undef TYPE
+#undef TYPE_STRAYDATA
+#undef TYPE_NONDETERMINISTIC
+#undef TYPE_NOCOPY
+#undef TYPE_FEATUREFUL
+#undef TYPE_FEATUREFUL_STRAYDATA
+#undef TYPE_FEATUREFUL_NONDETERMINISTIC
+#undef TYPE_FEATUREFUL_NOCOPY
+#undef MESSAGE
+
+#include "denc_registry.h"
+
+void register_rbd_dencoders()
+{
+#include "rbd_types.h"
+}
diff --git a/src/tools/ceph-dencoder/rbd_types.h b/src/tools/ceph-dencoder/rbd_types.h
new file mode 100644 (file)
index 0000000..9df5fcc
--- /dev/null
@@ -0,0 +1,42 @@
+#ifdef WITH_RBD
+#include "librbd/journal/Types.h"
+TYPE(librbd::journal::EventEntry)
+TYPE(librbd::journal::ClientData)
+TYPE(librbd::journal::TagData)
+#include "librbd/mirroring_watcher/Types.h"
+TYPE(librbd::mirroring_watcher::NotifyMessage)
+#include "librbd/trash_watcher/Types.h"
+TYPE(librbd::mirroring_watcher::NotifyMessage)
+#include "librbd/WatchNotifyTypes.h"
+TYPE(librbd::watch_notify::NotifyMessage)
+TYPE(librbd::watch_notify::ResponseMessage)
+
+#include "rbd_replay/ActionTypes.h"
+TYPE(rbd_replay::action::Dependency)
+TYPE(rbd_replay::action::ActionEntry)
+
+#include "tools/rbd_mirror/image_map/Types.h"
+TYPE(rbd::mirror::image_map::PolicyData)
+#endif
+
+#ifdef WITH_RBD
+#include "cls/rbd/cls_rbd.h"
+TYPE_FEATUREFUL(cls_rbd_parent)
+TYPE_FEATUREFUL(cls_rbd_snap)
+
+#include "cls/rbd/cls_rbd_types.h"
+TYPE(cls::rbd::ParentImageSpec)
+TYPE(cls::rbd::ChildImageSpec)
+TYPE(cls::rbd::MigrationSpec)
+TYPE(cls::rbd::MirrorPeer)
+TYPE(cls::rbd::MirrorImage)
+TYPE(cls::rbd::MirrorImageMap)
+TYPE(cls::rbd::MirrorImageStatus)
+TYPE(cls::rbd::GroupImageSpec)
+TYPE(cls::rbd::GroupImageStatus)
+TYPE(cls::rbd::GroupSnapshot)
+TYPE(cls::rbd::GroupSpec)
+TYPE(cls::rbd::ImageSnapshotSpec)
+TYPE(cls::rbd::SnapshotInfo)
+TYPE(cls::rbd::SnapshotNamespace)
+#endif
diff --git a/src/tools/ceph-dencoder/rgw_types.cc b/src/tools/ceph-dencoder/rgw_types.cc
new file mode 100644 (file)
index 0000000..82dde00
--- /dev/null
@@ -0,0 +1,31 @@
+#include "acconfig.h"
+#include <cstdint>
+using namespace std;
+#include "include/ceph_features.h"
+
+#define TYPE(t)
+#define TYPE_STRAYDATA(t)
+#define TYPE_NONDETERMINISTIC(t)
+#define TYPE_FEATUREFUL(t)
+#define TYPE_FEATUREFUL_STRAYDATA(t)
+#define TYPE_FEATUREFUL_NONDETERMINISTIC(t)
+#define TYPE_FEATUREFUL_NOCOPY(t)
+#define TYPE_NOCOPY(t)
+#define MESSAGE(t)
+#include "rgw_types.h"
+#undef TYPE
+#undef TYPE_STRAYDATA
+#undef TYPE_NONDETERMINISTIC
+#undef TYPE_NOCOPY
+#undef TYPE_FEATUREFUL
+#undef TYPE_FEATUREFUL_STRAYDATA
+#undef TYPE_FEATUREFUL_NONDETERMINISTIC
+#undef TYPE_FEATUREFUL_NOCOPY
+#undef MESSAGE
+
+#include "denc_registry.h"
+
+void register_rgw_dencoders()
+{
+#include "rgw_types.h"
+}
diff --git a/src/tools/ceph-dencoder/rgw_types.h b/src/tools/ceph-dencoder/rgw_types.h
new file mode 100644 (file)
index 0000000..6d1b2b7
--- /dev/null
@@ -0,0 +1,127 @@
+#ifdef WITH_RADOSGW
+
+#include "rgw/rgw_rados.h"
+TYPE(RGWOLHInfo)
+TYPE(RGWObjManifestPart)
+TYPE(RGWObjManifest)
+
+#include "rgw/rgw_zone.h"
+TYPE(RGWZoneParams)
+TYPE(RGWZone)
+TYPE(RGWZoneGroup)
+TYPE(RGWRealm)
+TYPE(RGWPeriod)
+
+#include "rgw/rgw_acl.h"
+TYPE(ACLPermission)
+TYPE(ACLGranteeType)
+TYPE(ACLGrant)
+TYPE(RGWAccessControlList)
+TYPE(ACLOwner)
+TYPE(RGWAccessControlPolicy)
+
+#include "rgw/rgw_cache.h"
+TYPE(ObjectMetaInfo)
+TYPE(ObjectCacheInfo)
+TYPE(RGWCacheNotifyInfo)
+
+#include "rgw/rgw_lc.h"
+TYPE(RGWLifecycleConfiguration)
+
+#include "cls/rgw/cls_rgw_types.h"
+TYPE(rgw_bucket_pending_info)
+TYPE(rgw_bucket_dir_entry_meta)
+TYPE(rgw_bucket_entry_ver)
+TYPE(rgw_bucket_dir_entry)
+TYPE(rgw_bucket_category_stats)
+TYPE(rgw_bucket_dir_header)
+TYPE(rgw_bucket_dir)
+TYPE(rgw_bucket_entry_ver)
+TYPE(cls_rgw_obj_key)
+TYPE(rgw_bucket_olh_log_entry)
+TYPE(rgw_usage_log_entry)
+
+#include "cls/rgw/cls_rgw_ops.h"
+TYPE(rgw_cls_obj_prepare_op)
+TYPE(rgw_cls_obj_complete_op)
+TYPE(rgw_cls_list_op)
+TYPE(rgw_cls_list_ret)
+TYPE(cls_rgw_gc_defer_entry_op)
+TYPE(cls_rgw_gc_list_op)
+TYPE(cls_rgw_gc_list_ret)
+TYPE(cls_rgw_gc_obj_info)
+TYPE(cls_rgw_gc_remove_op)
+TYPE(cls_rgw_gc_set_entry_op)
+TYPE(cls_rgw_obj)
+TYPE(cls_rgw_obj_chain)
+TYPE(rgw_cls_tag_timeout_op)
+TYPE(cls_rgw_bi_log_list_op)
+TYPE(cls_rgw_bi_log_trim_op)
+TYPE(cls_rgw_bi_log_list_ret)
+TYPE(rgw_cls_link_olh_op)
+TYPE(rgw_cls_unlink_instance_op)
+TYPE(rgw_cls_read_olh_log_op)
+TYPE(rgw_cls_read_olh_log_ret)
+TYPE(rgw_cls_trim_olh_log_op)
+TYPE(rgw_cls_bucket_clear_olh_op)
+TYPE(rgw_cls_check_index_ret)
+TYPE(cls_rgw_reshard_add_op)
+TYPE(cls_rgw_reshard_list_op)
+TYPE(cls_rgw_reshard_list_ret)
+TYPE(cls_rgw_reshard_get_op)
+TYPE(cls_rgw_reshard_get_ret)
+TYPE(cls_rgw_reshard_remove_op)
+TYPE(cls_rgw_set_bucket_resharding_op)
+TYPE(cls_rgw_clear_bucket_resharding_op)
+TYPE(cls_rgw_lc_obj_head)
+
+#include "cls/rgw/cls_rgw_client.h"
+TYPE(rgw_bi_log_entry)
+TYPE(cls_rgw_reshard_entry)
+TYPE(cls_rgw_bucket_instance_entry)
+
+#include "cls/user/cls_user_types.h"
+TYPE(cls_user_bucket)
+TYPE(cls_user_bucket_entry)
+TYPE(cls_user_stats)
+TYPE(cls_user_header)
+
+#include "cls/user/cls_user_ops.h"
+TYPE(cls_user_set_buckets_op)
+TYPE(cls_user_remove_bucket_op)
+TYPE(cls_user_list_buckets_op)
+TYPE(cls_user_list_buckets_ret)
+TYPE(cls_user_get_header_op)
+TYPE(cls_user_get_header_ret)
+TYPE(cls_user_complete_stats_sync_op)
+
+#include "cls/journal/cls_journal_types.h"
+TYPE(cls::journal::ObjectPosition)
+TYPE(cls::journal::ObjectSetPosition)
+TYPE(cls::journal::Client)
+TYPE(cls::journal::Tag)
+
+#include "rgw/rgw_common.h"
+TYPE(RGWAccessKey)
+TYPE(RGWSubUser)
+TYPE(RGWUserInfo)
+TYPE(rgw_bucket)
+TYPE(RGWBucketInfo)
+TYPE(RGWBucketEnt)
+TYPE(RGWUploadPartInfo)
+TYPE(rgw_obj)
+
+#include "rgw/rgw_log.h"
+TYPE(rgw_log_entry)
+
+#include "rgw/rgw_meta_sync_status.h"
+TYPE(rgw_meta_sync_info)
+TYPE(rgw_meta_sync_marker)
+TYPE(rgw_meta_sync_status)
+
+#include "rgw/rgw_data_sync.h"
+TYPE(rgw_data_sync_info)
+TYPE(rgw_data_sync_marker)
+TYPE(rgw_data_sync_status)
+
+#endif
diff --git a/src/tools/ceph-dencoder/types.h b/src/tools/ceph-dencoder/types.h
deleted file mode 100644 (file)
index 6b595c5..0000000
+++ /dev/null
@@ -1,881 +0,0 @@
-#include "acconfig.h"
-
-#include "ceph_time.h"
-TYPE(real_time_wrapper)
-TYPE(coarse_real_time_wrapper)
-TYPE(timespan_wrapper)
-
-#include "include/utime.h"
-TYPE(utime_t)
-
-#include "include/uuid.h"
-TYPE(uuid_d)
-
-#include "sstring.h"
-TYPE(sstring_wrapper)
-
-#include "include/CompatSet.h"
-TYPE(CompatSet)
-
-#include "include/filepath.h"
-TYPE(filepath)
-
-#include "include/fs_types.h"
-TYPE_FEATUREFUL(file_layout_t)
-
-#include "include/util.h"
-TYPE(ceph_data_stats)
-
-#include "common/bit_vector.hpp"
-TYPE(BitVector<2>)
-
-#include "common/bloom_filter.hpp"
-TYPE(bloom_filter)
-TYPE(compressible_bloom_filter)
-
-#include "common/DecayCounter.h"
-TYPE(DecayCounter)
-
-#include "common/histogram.h"
-TYPE(pow2_hist_t)
-
-#include "common/hobject.h"
-TYPE(hobject_t)
-TYPE(ghobject_t)
-
-#include "common/LogEntry.h"
-TYPE_FEATUREFUL(LogEntry)
-TYPE_FEATUREFUL(LogSummary)
-
-#include "common/SloppyCRCMap.h"
-TYPE(SloppyCRCMap)
-
-#include "common/snap_types.h"
-TYPE(SnapContext)
-TYPE(SnapRealmInfo)
-
-#include "msg/msg_types.h"
-TYPE(entity_name_t)
-TYPE_FEATUREFUL(entity_addr_t)
-TYPE_FEATUREFUL(entity_addrvec_t)
-TYPE_FEATUREFUL(entity_inst_t)
-
-#include "crush/CrushWrapper.h"
-TYPE_FEATUREFUL_NOCOPY(CrushWrapper)
-
-#include "osd/OSDMap.h"
-TYPE(osd_info_t)
-TYPE(osd_xinfo_t)
-TYPE_FEATUREFUL_NOCOPY(OSDMap)
-TYPE_FEATUREFUL_STRAYDATA(OSDMap::Incremental)
-
-#include "osd/osd_types.h"
-TYPE(osd_reqid_t)
-TYPE(object_locator_t)
-TYPE(request_redirect_t)
-TYPE(pg_t)
-TYPE(coll_t)
-TYPE_FEATUREFUL(objectstore_perf_stat_t)
-TYPE_FEATUREFUL(osd_stat_t)
-TYPE(OSDSuperblock)
-TYPE_FEATUREFUL(pool_snap_info_t)
-TYPE_FEATUREFUL(pg_pool_t)
-TYPE(object_stat_sum_t)
-TYPE(object_stat_collection_t)
-TYPE(pg_stat_t)
-TYPE_FEATUREFUL(pool_stat_t)
-TYPE(pg_hit_set_info_t)
-TYPE(pg_hit_set_history_t)
-TYPE(pg_history_t)
-TYPE(pg_info_t)
-TYPE(PastIntervals)
-TYPE_FEATUREFUL(pg_query_t)
-TYPE(ObjectModDesc)
-TYPE(pg_log_entry_t)
-TYPE(pg_log_dup_t)
-TYPE(pg_log_t)
-TYPE_FEATUREFUL(pg_missing_item)
-TYPE_FEATUREFUL(pg_missing_t)
-TYPE(pg_nls_response_t)
-TYPE(pg_ls_response_t)
-TYPE(object_copy_cursor_t)
-TYPE_FEATUREFUL(object_copy_data_t)
-TYPE(pg_create_t)
-TYPE(OSDSuperblock)
-TYPE(SnapSet)
-TYPE_FEATUREFUL(watch_info_t)
-TYPE_FEATUREFUL(watch_item_t)
-TYPE(object_manifest_t)
-TYPE_FEATUREFUL(object_info_t)
-TYPE(SnapSet)
-TYPE_FEATUREFUL(ObjectRecoveryInfo)
-TYPE(ObjectRecoveryProgress)
-TYPE(PushReplyOp)
-TYPE_FEATUREFUL(PullOp)
-TYPE_FEATUREFUL(PushOp)
-TYPE(ScrubMap::object)
-TYPE(ScrubMap)
-TYPE_FEATUREFUL(obj_list_watch_response_t)
-TYPE(clone_info)
-TYPE(obj_list_snap_response_t)
-TYPE(pool_pg_num_history_t)
-
-#include "osd/ECUtil.h"
-// TYPE(stripe_info_t) non-standard encoding/decoding functions
-TYPE(ECUtil::HashInfo)
-
-#include "osd/ECMsgTypes.h"
-TYPE_NOCOPY(ECSubWrite)
-TYPE(ECSubWriteReply)
-TYPE_FEATUREFUL(ECSubRead)
-TYPE(ECSubReadReply)
-
-#include "osd/HitSet.h"
-TYPE_NONDETERMINISTIC(ExplicitHashHitSet)
-TYPE_NONDETERMINISTIC(ExplicitObjectHitSet)
-TYPE(BloomHitSet)
-TYPE_NONDETERMINISTIC(HitSet)   // because some subclasses are
-TYPE(HitSet::Params)
-
-#include "os/ObjectStore.h"
-TYPE(ObjectStore::Transaction)
-
-#include "os/filestore/SequencerPosition.h"
-TYPE(SequencerPosition)
-
-#ifdef WITH_BLUESTORE
-#include "os/bluestore/bluestore_types.h"
-TYPE(bluestore_bdev_label_t)
-TYPE(bluestore_cnode_t)
-TYPE(bluestore_compression_header_t)
-TYPE(bluestore_extent_ref_map_t)
-TYPE(bluestore_pextent_t)
-TYPE(bluestore_blob_use_tracker_t)
-// TODO: bluestore_blob_t repurposes the "feature" param of encode() for its
-// struct_v. at a higher level, BlueStore::ExtentMap encodes the extends using
-// a different interface than the normal ones. see
-// BlueStore::ExtentMap::encode_some(). maybe we can test it using another
-// approach.
-// TYPE_FEATUREFUL(bluestore_blob_t)
-// TYPE(bluestore_shared_blob_t) there is no encode here
-TYPE(bluestore_onode_t)
-TYPE(bluestore_deferred_op_t)
-TYPE(bluestore_deferred_transaction_t)
-// TYPE(bluestore_compression_header_t) there is no encode here
-
-#include "os/bluestore/bluefs_types.h"
-TYPE(bluefs_extent_t)
-TYPE(bluefs_fnode_t)
-TYPE(bluefs_super_t)
-TYPE(bluefs_transaction_t)
-#endif
-
-#include "mon/AuthMonitor.h"
-TYPE_FEATUREFUL(AuthMonitor::Incremental)
-
-#include "mon/PGMap.h"
-TYPE_FEATUREFUL_NONDETERMINISTIC(PGMapDigest)
-TYPE_FEATUREFUL_NONDETERMINISTIC(PGMap)
-
-#include "mon/MonitorDBStore.h"
-TYPE(MonitorDBStore::Transaction)
-TYPE(MonitorDBStore::Op)
-
-#include "mon/MonMap.h"
-TYPE_FEATUREFUL(MonMap)
-
-#include "mon/MonCap.h"
-TYPE(MonCap)
-
-#include "mon/MgrMap.h"
-TYPE_FEATUREFUL(MgrMap)
-
-#include "mon/mon_types.h"
-TYPE(LevelDBStoreStats)
-TYPE(ScrubResult)
-
-#include "mon/CreatingPGs.h"
-TYPE_FEATUREFUL(creating_pgs_t)
-
-#include "mgr/ServiceMap.h"
-TYPE_FEATUREFUL(ServiceMap)
-TYPE_FEATUREFUL(ServiceMap::Service)
-TYPE_FEATUREFUL(ServiceMap::Daemon)
-
-#include "os/filestore/DBObjectMap.h"
-TYPE(DBObjectMap::_Header)
-TYPE(DBObjectMap::State)
-
-#include "os/filestore/FileStore.h"
-TYPE(FSSuperblock)
-
-#include "os/kstore/kstore_types.h"
-TYPE(kstore_cnode_t)
-TYPE(kstore_onode_t)
-
-#ifdef WITH_CEPHFS
-#include "mds/JournalPointer.h"
-TYPE(JournalPointer)
-
-#include "osdc/Journaler.h"
-TYPE(Journaler::Header)
-
-#include "mds/snap.h"
-TYPE(SnapInfo)
-TYPE(snaplink_t)
-TYPE(sr_t)
-
-#include "mds/mdstypes.h"
-TYPE(frag_info_t)
-TYPE(nest_info_t)
-TYPE(quota_info_t)
-TYPE(client_writeable_range_t)
-TYPE_FEATUREFUL(inode_t<std::allocator>)
-TYPE_FEATUREFUL(old_inode_t<std::allocator>)
-TYPE(fnode_t)
-TYPE(old_rstat_t)
-TYPE_FEATUREFUL(session_info_t)
-TYPE(string_snap_t)
-TYPE(MDSCacheObjectInfo)
-TYPE(mds_table_pending_t)
-TYPE(cap_reconnect_t)
-TYPE(inode_load_vec_t)
-TYPE(dirfrag_load_vec_t)
-TYPE(mds_load_t)
-TYPE(MDSCacheObjectInfo)
-TYPE(inode_backtrace_t)
-TYPE(inode_backpointer_t)
-
-#include "mds/CInode.h"
-TYPE_FEATUREFUL(InodeStore)
-TYPE_FEATUREFUL(InodeStoreBare)
-
-#include "mds/MDSMap.h"
-TYPE_FEATUREFUL(MDSMap)
-TYPE_FEATUREFUL(MDSMap::mds_info_t)
-
-#include "mds/FSMap.h"
-//TYPE_FEATUREFUL(Filesystem)
-TYPE_FEATUREFUL(FSMap)
-
-#include "mds/Capability.h"
-TYPE_NOCOPY(Capability)
-
-#include "mds/inode_backtrace.h"
-TYPE(inode_backpointer_t)
-TYPE(inode_backtrace_t)
-
-#include "mds/InoTable.h"
-TYPE(InoTable)
-
-#include "mds/SnapServer.h"
-TYPE_STRAYDATA(SnapServer)
-
-#include "mds/events/ECommitted.h"
-TYPE_FEATUREFUL_NOCOPY(ECommitted)
-
-#include "mds/events/EExport.h"
-TYPE_FEATUREFUL_NOCOPY(EExport)
-
-#include "mds/events/EFragment.h"
-TYPE_FEATUREFUL_NOCOPY(EFragment)
-
-#include "mds/events/EImportFinish.h"
-TYPE_FEATUREFUL_NOCOPY(EImportFinish)
-
-#include "mds/events/EImportStart.h"
-TYPE_FEATUREFUL_NOCOPY(EImportStart)
-
-#include "mds/events/EMetaBlob.h"
-TYPE_FEATUREFUL_NOCOPY(EMetaBlob::fullbit)
-TYPE(EMetaBlob::remotebit)
-TYPE(EMetaBlob::nullbit)
-TYPE_FEATUREFUL_NOCOPY(EMetaBlob::dirlump)
-TYPE_FEATUREFUL_NOCOPY(EMetaBlob)
-
-#include "mds/events/EOpen.h"
-TYPE_FEATUREFUL_NOCOPY(EOpen)
-
-#include "mds/events/EResetJournal.h"
-TYPE_FEATUREFUL_NOCOPY(EResetJournal)
-
-#include "mds/events/ESession.h"
-TYPE_FEATUREFUL_NOCOPY(ESession)
-
-#include "mds/events/ESessions.h"
-TYPE_FEATUREFUL_NOCOPY(ESessions)
-
-#include "mds/events/ESlaveUpdate.h"
-TYPE(link_rollback)
-TYPE(rmdir_rollback)
-TYPE(rename_rollback::drec)
-TYPE(rename_rollback)
-TYPE_FEATUREFUL_NOCOPY(ESlaveUpdate)
-
-#include "mds/events/ESubtreeMap.h"
-TYPE_FEATUREFUL_NOCOPY(ESubtreeMap)
-
-#include "mds/events/ETableClient.h"
-TYPE_FEATUREFUL_NOCOPY(ETableClient)
-
-#include "mds/events/ETableServer.h"
-TYPE_FEATUREFUL_NOCOPY(ETableServer)
-
-#include "mds/events/EUpdate.h"
-TYPE_FEATUREFUL_NOCOPY(EUpdate)
-#endif // WITH_CEPHFS
-
-#ifdef WITH_RBD
-#include "librbd/journal/Types.h"
-TYPE(librbd::journal::EventEntry)
-TYPE(librbd::journal::ClientData)
-TYPE(librbd::journal::TagData)
-#include "librbd/mirroring_watcher/Types.h"
-TYPE(librbd::mirroring_watcher::NotifyMessage)
-#include "librbd/trash_watcher/Types.h"
-TYPE(librbd::mirroring_watcher::NotifyMessage)
-#include "librbd/WatchNotifyTypes.h"
-TYPE(librbd::watch_notify::NotifyMessage)
-TYPE(librbd::watch_notify::ResponseMessage)
-
-#include "rbd_replay/ActionTypes.h"
-TYPE(rbd_replay::action::Dependency)
-TYPE(rbd_replay::action::ActionEntry)
-
-#include "tools/rbd_mirror/image_map/Types.h"
-TYPE(rbd::mirror::image_map::PolicyData)
-#endif
-
-#ifdef WITH_RADOSGW
-
-#include "rgw/rgw_rados.h"
-TYPE(RGWOLHInfo)
-TYPE(RGWObjManifestPart)
-TYPE(RGWObjManifest)
-
-#include "rgw/rgw_zone.h"
-TYPE(RGWZoneParams)
-TYPE(RGWZone)
-TYPE(RGWZoneGroup)
-TYPE(RGWRealm)
-TYPE(RGWPeriod)
-
-#include "rgw/rgw_acl.h"
-TYPE(ACLPermission)
-TYPE(ACLGranteeType)
-TYPE(ACLGrant)
-TYPE(RGWAccessControlList)
-TYPE(ACLOwner)
-TYPE(RGWAccessControlPolicy)
-
-#include "rgw/rgw_cache.h"
-TYPE(ObjectMetaInfo)
-TYPE(ObjectCacheInfo)
-TYPE(RGWCacheNotifyInfo)
-
-#include "rgw/rgw_lc.h"
-TYPE(RGWLifecycleConfiguration)
-
-#include "cls/rgw/cls_rgw_types.h"
-TYPE(rgw_bucket_pending_info)
-TYPE(rgw_bucket_dir_entry_meta)
-TYPE(rgw_bucket_entry_ver)
-TYPE(rgw_bucket_dir_entry)
-TYPE(rgw_bucket_category_stats)
-TYPE(rgw_bucket_dir_header)
-TYPE(rgw_bucket_dir)
-TYPE(rgw_bucket_entry_ver)
-TYPE(cls_rgw_obj_key)
-TYPE(rgw_bucket_olh_log_entry)
-TYPE(rgw_usage_log_entry)
-
-#include "cls/rgw/cls_rgw_ops.h"
-TYPE(rgw_cls_obj_prepare_op)
-TYPE(rgw_cls_obj_complete_op)
-TYPE(rgw_cls_list_op)
-TYPE(rgw_cls_list_ret)
-TYPE(cls_rgw_gc_defer_entry_op)
-TYPE(cls_rgw_gc_list_op)
-TYPE(cls_rgw_gc_list_ret)
-TYPE(cls_rgw_gc_obj_info)
-TYPE(cls_rgw_gc_remove_op)
-TYPE(cls_rgw_gc_set_entry_op)
-TYPE(cls_rgw_obj)
-TYPE(cls_rgw_obj_chain)
-TYPE(rgw_cls_tag_timeout_op)
-TYPE(cls_rgw_bi_log_list_op)
-TYPE(cls_rgw_bi_log_trim_op)
-TYPE(cls_rgw_bi_log_list_ret)
-TYPE(rgw_cls_link_olh_op)
-TYPE(rgw_cls_unlink_instance_op)
-TYPE(rgw_cls_read_olh_log_op)
-TYPE(rgw_cls_read_olh_log_ret)
-TYPE(rgw_cls_trim_olh_log_op)
-TYPE(rgw_cls_bucket_clear_olh_op)
-TYPE(rgw_cls_check_index_ret)
-TYPE(cls_rgw_reshard_add_op)
-TYPE(cls_rgw_reshard_list_op)
-TYPE(cls_rgw_reshard_list_ret)
-TYPE(cls_rgw_reshard_get_op)
-TYPE(cls_rgw_reshard_get_ret)
-TYPE(cls_rgw_reshard_remove_op)
-TYPE(cls_rgw_set_bucket_resharding_op)
-TYPE(cls_rgw_clear_bucket_resharding_op)
-TYPE(cls_rgw_lc_obj_head)
-
-#include "cls/rgw/cls_rgw_client.h"
-TYPE(rgw_bi_log_entry)
-TYPE(cls_rgw_reshard_entry)
-TYPE(cls_rgw_bucket_instance_entry)
-
-#include "cls/user/cls_user_types.h"
-TYPE(cls_user_bucket)
-TYPE(cls_user_bucket_entry)
-TYPE(cls_user_stats)
-TYPE(cls_user_header)
-
-#include "cls/user/cls_user_ops.h"
-TYPE(cls_user_set_buckets_op)
-TYPE(cls_user_remove_bucket_op)
-TYPE(cls_user_list_buckets_op)
-TYPE(cls_user_list_buckets_ret)
-TYPE(cls_user_get_header_op)
-TYPE(cls_user_get_header_ret)
-TYPE(cls_user_complete_stats_sync_op)
-
-#include "cls/journal/cls_journal_types.h"
-TYPE(cls::journal::ObjectPosition)
-TYPE(cls::journal::ObjectSetPosition)
-TYPE(cls::journal::Client)
-TYPE(cls::journal::Tag)
-
-#include "rgw/rgw_common.h"
-TYPE(RGWAccessKey)
-TYPE(RGWSubUser)
-TYPE(RGWUserInfo)
-TYPE(rgw_bucket)
-TYPE(RGWBucketInfo)
-TYPE(RGWBucketEnt)
-TYPE(RGWUploadPartInfo)
-TYPE(rgw_obj)
-
-#include "rgw/rgw_log.h"
-TYPE(rgw_log_entry)
-
-#include "rgw/rgw_meta_sync_status.h"
-TYPE(rgw_meta_sync_info)
-TYPE(rgw_meta_sync_marker)
-TYPE(rgw_meta_sync_status)
-
-#include "rgw/rgw_data_sync.h"
-TYPE(rgw_data_sync_info)
-TYPE(rgw_data_sync_marker)
-TYPE(rgw_data_sync_status)
-
-#endif
-
-#ifdef WITH_RBD
-#include "cls/rbd/cls_rbd.h"
-TYPE_FEATUREFUL(cls_rbd_parent)
-TYPE_FEATUREFUL(cls_rbd_snap)
-
-#include "cls/rbd/cls_rbd_types.h"
-TYPE(cls::rbd::ParentImageSpec)
-TYPE(cls::rbd::ChildImageSpec)
-TYPE(cls::rbd::MigrationSpec)
-TYPE(cls::rbd::MirrorPeer)
-TYPE(cls::rbd::MirrorImage)
-TYPE(cls::rbd::MirrorImageMap)
-TYPE(cls::rbd::MirrorImageStatus)
-TYPE(cls::rbd::GroupImageSpec)
-TYPE(cls::rbd::GroupImageStatus)
-TYPE(cls::rbd::GroupSnapshot)
-TYPE(cls::rbd::GroupSpec)
-TYPE(cls::rbd::ImageSnapshotSpec)
-TYPE(cls::rbd::SnapshotInfo)
-TYPE(cls::rbd::SnapshotNamespace)
-#endif
-
-#include "cls/lock/cls_lock_types.h"
-TYPE(rados::cls::lock::locker_id_t)
-TYPE_FEATUREFUL(rados::cls::lock::locker_info_t)
-TYPE_FEATUREFUL(rados::cls::lock::lock_info_t)
-
-#include "cls/lock/cls_lock_ops.h"
-TYPE(cls_lock_lock_op)
-TYPE(cls_lock_unlock_op)
-TYPE(cls_lock_break_op)
-TYPE(cls_lock_get_info_op)
-TYPE_FEATUREFUL(cls_lock_get_info_reply)
-TYPE(cls_lock_list_locks_reply)
-TYPE(cls_lock_assert_op)
-TYPE(cls_lock_set_cookie_op)
-
-#include "cls/refcount/cls_refcount_ops.h"
-TYPE(cls_refcount_get_op)
-TYPE(cls_refcount_put_op)
-TYPE(cls_refcount_set_op)
-TYPE(cls_refcount_read_op)
-TYPE(cls_refcount_read_ret)
-TYPE(obj_refcount)
-
-#include "journal/Entry.h"
-TYPE(journal::Entry)
-
-// --- messages ---
-#include "messages/MAuth.h"
-MESSAGE(MAuth)
-
-#include "messages/MAuthReply.h"
-MESSAGE(MAuthReply)
-
-#include "messages/MCacheExpire.h"
-MESSAGE(MCacheExpire)
-
-#include "messages/MClientCapRelease.h"
-MESSAGE(MClientCapRelease)
-
-#include "messages/MClientCaps.h"
-MESSAGE(MClientCaps)
-
-#include "messages/MClientLease.h"
-MESSAGE(MClientLease)
-
-#include "messages/MClientReconnect.h"
-MESSAGE(MClientReconnect)
-
-#include "messages/MClientReply.h"
-MESSAGE(MClientReply)
-
-#include "messages/MClientRequest.h"
-MESSAGE(MClientRequest)
-
-#include "messages/MClientRequestForward.h"
-MESSAGE(MClientRequestForward)
-
-#include "messages/MClientQuota.h"
-MESSAGE(MClientQuota)
-
-#include "messages/MClientSession.h"
-MESSAGE(MClientSession)
-
-#include "messages/MClientSnap.h"
-MESSAGE(MClientSnap)
-
-#include "messages/MCommand.h"
-MESSAGE(MCommand)
-
-#include "messages/MCommandReply.h"
-MESSAGE(MCommandReply)
-
-#include "messages/MConfig.h"
-MESSAGE(MConfig)
-
-#include "messages/MDentryLink.h"
-MESSAGE(MDentryLink)
-
-#include "messages/MDentryUnlink.h"
-MESSAGE(MDentryUnlink)
-
-#include "messages/MDirUpdate.h"
-MESSAGE(MDirUpdate)
-
-#include "messages/MDiscover.h"
-MESSAGE(MDiscover)
-
-#include "messages/MDiscoverReply.h"
-MESSAGE(MDiscoverReply)
-
-#include "messages/MExportCaps.h"
-MESSAGE(MExportCaps)
-
-#include "messages/MExportCapsAck.h"
-MESSAGE(MExportCapsAck)
-
-#include "messages/MExportDir.h"
-MESSAGE(MExportDir)
-
-#include "messages/MExportDirAck.h"
-MESSAGE(MExportDirAck)
-
-#include "messages/MExportDirCancel.h"
-MESSAGE(MExportDirCancel)
-
-#include "messages/MExportDirDiscover.h"
-MESSAGE(MExportDirDiscover)
-
-#include "messages/MExportDirDiscoverAck.h"
-MESSAGE(MExportDirDiscoverAck)
-
-#include "messages/MExportDirFinish.h"
-MESSAGE(MExportDirFinish)
-
-#include "messages/MExportDirNotify.h"
-MESSAGE(MExportDirNotify)
-
-#include "messages/MExportDirNotifyAck.h"
-MESSAGE(MExportDirNotifyAck)
-
-#include "messages/MExportDirPrep.h"
-MESSAGE(MExportDirPrep)
-
-#include "messages/MExportDirPrepAck.h"
-MESSAGE(MExportDirPrepAck)
-
-#include "messages/MForward.h"
-MESSAGE(MForward)
-
-#include "messages/MFSMap.h"
-MESSAGE(MFSMap)
-
-#include "messages/MFSMapUser.h"
-MESSAGE(MFSMapUser)
-
-#include "messages/MGatherCaps.h"
-MESSAGE(MGatherCaps)
-
-#include "messages/MGenericMessage.h"
-MESSAGE(MGenericMessage)
-
-#include "messages/MGetConfig.h"
-MESSAGE(MGetConfig)
-
-#include "messages/MGetPoolStats.h"
-MESSAGE(MGetPoolStats)
-
-#include "messages/MGetPoolStatsReply.h"
-MESSAGE(MGetPoolStatsReply)
-
-#include "messages/MHeartbeat.h"
-MESSAGE(MHeartbeat)
-
-#include "messages/MInodeFileCaps.h"
-MESSAGE(MInodeFileCaps)
-
-#include "messages/MLock.h"
-MESSAGE(MLock)
-
-#include "messages/MLog.h"
-MESSAGE(MLog)
-
-#include "messages/MLogAck.h"
-MESSAGE(MLogAck)
-
-#include "messages/MMDSOpenIno.h"
-MESSAGE(MMDSOpenIno)
-
-#include "messages/MMDSOpenInoReply.h"
-MESSAGE(MMDSOpenInoReply)
-
-#include "messages/MMDSBeacon.h"
-MESSAGE(MMDSBeacon)
-
-#include "messages/MMDSCacheRejoin.h"
-MESSAGE(MMDSCacheRejoin)
-
-#include "messages/MMDSFindIno.h"
-MESSAGE(MMDSFindIno)
-
-#include "messages/MMDSFindInoReply.h"
-MESSAGE(MMDSFindInoReply)
-
-#include "messages/MMDSFragmentNotify.h"
-MESSAGE(MMDSFragmentNotify)
-
-#include "messages/MMDSLoadTargets.h"
-MESSAGE(MMDSLoadTargets)
-
-#include "messages/MMDSMap.h"
-MESSAGE(MMDSMap)
-
-#include "messages/MMgrReport.h"
-MESSAGE(MMgrReport)
-
-#include "messages/MMDSResolve.h"
-MESSAGE(MMDSResolve)
-
-#include "messages/MMDSResolveAck.h"
-MESSAGE(MMDSResolveAck)
-
-#include "messages/MMDSSlaveRequest.h"
-MESSAGE(MMDSSlaveRequest)
-
-#include "messages/MMDSSnapUpdate.h"
-MESSAGE(MMDSSnapUpdate)
-
-#include "messages/MMDSTableRequest.h"
-MESSAGE(MMDSTableRequest)
-
-#include "messages/MMgrClose.h"
-MESSAGE(MMgrClose)
-
-#include "messages/MMgrConfigure.h"
-MESSAGE(MMgrConfigure)
-
-#include "messages/MMgrDigest.h"
-MESSAGE(MMgrDigest)
-
-#include "messages/MMgrMap.h"
-MESSAGE(MMgrMap)
-
-#include "messages/MMgrOpen.h"
-MESSAGE(MMgrOpen)
-
-#include "messages/MMonCommand.h"
-MESSAGE(MMonCommand)
-
-#include "messages/MMonCommandAck.h"
-MESSAGE(MMonCommandAck)
-
-#include "messages/MMonElection.h"
-MESSAGE(MMonElection)
-
-#include "messages/MMonGetMap.h"
-MESSAGE(MMonGetMap)
-
-#include "messages/MMonGetVersion.h"
-MESSAGE(MMonGetVersion)
-
-#include "messages/MMonGetVersionReply.h"
-MESSAGE(MMonGetVersionReply)
-
-#include "messages/MMonGlobalID.h"
-MESSAGE(MMonGlobalID)
-
-#include "messages/MMonJoin.h"
-MESSAGE(MMonJoin)
-
-#include "messages/MMonMap.h"
-MESSAGE(MMonMap)
-
-#include "messages/MMonMetadata.h"
-MESSAGE(MMonMetadata)
-
-#include "messages/MMonPaxos.h"
-MESSAGE(MMonPaxos)
-
-#include "messages/MMonProbe.h"
-MESSAGE(MMonProbe)
-
-#include "messages/MMonScrub.h"
-MESSAGE(MMonScrub)
-
-#include "messages/MMonSync.h"
-MESSAGE(MMonSync)
-
-#include "messages/MMonSubscribe.h"
-MESSAGE(MMonSubscribe)
-
-#include "messages/MMonSubscribeAck.h"
-MESSAGE(MMonSubscribeAck)
-
-#include "messages/MOSDAlive.h"
-MESSAGE(MOSDAlive)
-
-#include "messages/MOSDBoot.h"
-MESSAGE(MOSDBoot)
-
-#include "messages/MOSDFailure.h"
-MESSAGE(MOSDFailure)
-
-#include "messages/MOSDMap.h"
-MESSAGE(MOSDMap)
-
-#include "messages/MOSDOp.h"
-MESSAGE(MOSDOp)
-
-#include "messages/MOSDOpReply.h"
-MESSAGE(MOSDOpReply)
-
-#include "messages/MOSDPGBackfill.h"
-MESSAGE(MOSDPGBackfill)
-
-#include "messages/MOSDPGCreate.h"
-MESSAGE(MOSDPGCreate)
-
-#include "messages/MOSDPGCreate2.h"
-MESSAGE(MOSDPGCreate2)
-
-#include "messages/MOSDPGInfo.h"
-MESSAGE(MOSDPGInfo)
-
-#include "messages/MOSDPGLog.h"
-MESSAGE(MOSDPGLog)
-
-#include "messages/MOSDPGNotify.h"
-MESSAGE(MOSDPGNotify)
-
-#include "messages/MOSDPGQuery.h"
-MESSAGE(MOSDPGQuery)
-
-#include "messages/MOSDPGRemove.h"
-MESSAGE(MOSDPGRemove)
-
-#include "messages/MOSDPGRecoveryDelete.h"
-MESSAGE(MOSDPGRecoveryDelete)
-
-#include "messages/MOSDPGRecoveryDeleteReply.h"
-MESSAGE(MOSDPGRecoveryDeleteReply)
-
-#include "messages/MOSDPGScan.h"
-MESSAGE(MOSDPGScan)
-
-#include "messages/MOSDPGTemp.h"
-MESSAGE(MOSDPGTemp)
-
-#include "messages/MOSDPGTrim.h"
-MESSAGE(MOSDPGTrim)
-
-#include "messages/MOSDPing.h"
-MESSAGE(MOSDPing)
-
-#include "messages/MOSDRepScrub.h"
-MESSAGE(MOSDRepScrub)
-
-#include "messages/MOSDScrub.h"
-MESSAGE(MOSDScrub)
-
-#include "messages/MOSDScrub2.h"
-MESSAGE(MOSDScrub2)
-
-#include "messages/MOSDForceRecovery.h"
-MESSAGE(MOSDForceRecovery)
-
-#include "messages/MPGStats.h"
-MESSAGE(MPGStats)
-
-#include "messages/MPGStatsAck.h"
-MESSAGE(MPGStatsAck)
-
-#include "messages/MPing.h"
-MESSAGE(MPing)
-
-#include "messages/MPoolOp.h"
-MESSAGE(MPoolOp)
-
-#include "messages/MPoolOpReply.h"
-MESSAGE(MPoolOpReply)
-
-#include "messages/MRemoveSnaps.h"
-MESSAGE(MRemoveSnaps)
-
-#include "messages/MRoute.h"
-MESSAGE(MRoute)
-
-#include "messages/MServiceMap.h"
-MESSAGE(MServiceMap)
-
-#include "messages/MStatfs.h"
-MESSAGE(MStatfs)
-
-#include "messages/MStatfsReply.h"
-MESSAGE(MStatfsReply)
-
-#include "messages/MTimeCheck.h"
-MESSAGE(MTimeCheck)
-
-#include "messages/MTimeCheck2.h"
-MESSAGE(MTimeCheck2)
-
-#include "messages/MWatchNotify.h"
-MESSAGE(MWatchNotify)