]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/messages/MDiscoverReply.h
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / messages / MDiscoverReply.h
index b9007b7c2a32d8273fdd1cd87cdef104cb7e5889..bd4f34754428413c487fcaf71b7048ffd1925ab8 100644 (file)
  * 
  */
 
-class MDiscoverReply : public Message {
-
-  static const int HEAD_VERSION = 2;
+class MDiscoverReply : public MessageInstance<MDiscoverReply> {
+public:
+  friend factory;
+private:
+  static constexpr int HEAD_VERSION = 2;
 
   // info about original request
   inodeno_t base_ino;
   frag_t base_dir_frag;  
-  bool wanted_base_dir;
-  bool wanted_xlocked;
+  bool wanted_base_dir = false;
+  bool wanted_xlocked = false;
   snapid_t wanted_snapid;
 
   // and the response
-  bool flag_error_dn;
-  bool flag_error_dir;
+  bool flag_error_dn = false;
+  bool flag_error_dir = false;
   std::string error_dentry;   // dentry that was not found (to trigger waiters on asker)
-  bool unsolicited;
+  bool unsolicited = false;
 
-  mds_rank_t dir_auth_hint;
+  mds_rank_t dir_auth_hint = 0;
 
  public:
-  __u8 starts_with;
+  __u8 starts_with = 0;
   bufferlist trace;
 
   enum { DIR, DENTRY, INODE };
 
   // accessors
-  inodeno_t get_base_ino() { return base_ino; }
-  frag_t get_base_dir_frag() { return base_dir_frag; }
-  bool get_wanted_base_dir() { return wanted_base_dir; }
-  bool get_wanted_xlocked() { return wanted_xlocked; }
-  snapid_t get_wanted_snapid() { return wanted_snapid; }
+  inodeno_t get_base_ino() const { return base_ino; }
+  frag_t get_base_dir_frag() const { return base_dir_frag; }
+  bool get_wanted_base_dir() const { return wanted_base_dir; }
+  bool get_wanted_xlocked() const { return wanted_xlocked; }
+  snapid_t get_wanted_snapid() const { return wanted_snapid; }
 
-  bool is_flag_error_dn() { return flag_error_dn; }
-  bool is_flag_error_dir() { return flag_error_dir; }
-  const std::string& get_error_dentry() { return error_dentry; }
+  bool is_flag_error_dn() const { return flag_error_dn; }
+  bool is_flag_error_dir() const { return flag_error_dir; }
+  const std::string& get_error_dentry() const { return error_dentry; }
 
-  int get_starts_with() { return starts_with; }
+  int get_starts_with() const { return starts_with; }
 
   mds_rank_t get_dir_auth_hint() const { return dir_auth_hint; }
 
-  bool is_unsolicited() { return unsolicited; }
+  bool is_unsolicited() const { return unsolicited; }
   void mark_unsolicited() { unsolicited = true; }
 
   void set_base_dir_frag(frag_t df) { base_dir_frag = df; }
 
-  // cons
-  MDiscoverReply() : Message(MSG_MDS_DISCOVERREPLY, HEAD_VERSION) { }
-  MDiscoverReply(MDiscover *dis) :
-    Message(MSG_MDS_DISCOVERREPLY, HEAD_VERSION),
-    base_ino(dis->get_base_ino()),
-    base_dir_frag(dis->get_base_dir_frag()),
-    wanted_base_dir(dis->wants_base_dir()),
-    wanted_xlocked(dis->wants_xlocked()),
-    wanted_snapid(dis->get_snapid()),
+protected:
+  MDiscoverReply() : MessageInstance(MSG_MDS_DISCOVERREPLY, HEAD_VERSION) { }
+  MDiscoverReply(const MDiscover &dis) :
+    MessageInstance(MSG_MDS_DISCOVERREPLY, HEAD_VERSION),
+    base_ino(dis.get_base_ino()),
+    base_dir_frag(dis.get_base_dir_frag()),
+    wanted_base_dir(dis.wants_base_dir()),
+    wanted_xlocked(dis.wants_xlocked()),
+    wanted_snapid(dis.get_snapid()),
     flag_error_dn(false),
     flag_error_dir(false),
     unsolicited(false),
     dir_auth_hint(CDIR_AUTH_UNKNOWN),
     starts_with(DIR)
   {
-    header.tid = dis->get_tid();
+    header.tid = dis.get_tid();
   }
   MDiscoverReply(dirfrag_t df) :
-    Message(MSG_MDS_DISCOVERREPLY, HEAD_VERSION),
+    MessageInstance(MSG_MDS_DISCOVERREPLY, HEAD_VERSION),
     base_ino(df.ino),
     base_dir_frag(df.frag),
     wanted_base_dir(false),
@@ -140,17 +142,16 @@ class MDiscoverReply : public Message {
   {
     header.tid = 0;
   }
-private:
   ~MDiscoverReply() override {}
 
 public:
-  const char *get_type_name() const override { return "discover_reply"; }
+  std::string_view get_type_name() const override { return "discover_reply"; }
   void print(ostream& out) const override {
     out << "discover_reply(" << header.tid << " " << base_ino << ")";
   }
   
   // builders
-  bool is_empty() {
+  bool is_empty() const {
     return trace.length() == 0 &&
       !flag_error_dn &&
       !flag_error_dir &&
@@ -158,9 +159,9 @@ public:
   }
 
   //  void set_flag_forward() { flag_forward = true; }
-  void set_flag_error_dn(boost::string_view dn) { 
+  void set_flag_error_dn(std::string_view dn) { 
     flag_error_dn = true; 
-    error_dentry = std::string(dn)
+    error_dentry = dn
   }
   void set_flag_error_dir() { 
     flag_error_dir = true; 
@@ -168,42 +169,43 @@ public:
   void set_dir_auth_hint(int a) {
     dir_auth_hint = a;
   }
-  void set_error_dentry(boost::string_view dn) {
-    error_dentry = std::string(dn);
+  void set_error_dentry(std::string_view dn) {
+    error_dentry = dn;
   }
 
 
   // ...
   void decode_payload() override {
-    bufferlist::iterator p = payload.begin();
-    ::decode(base_ino, p);
-    ::decode(base_dir_frag, p);
-    ::decode(wanted_base_dir, p);
-    ::decode(wanted_xlocked, p);
-    ::decode(wanted_snapid, p);
-    ::decode(flag_error_dn, p);
-    ::decode(flag_error_dir, p);
-    ::decode(error_dentry, p);
-    ::decode(dir_auth_hint, p);
-    ::decode(unsolicited, p);
-
-    ::decode(starts_with, p);
-    ::decode(trace, p);
+    auto p = payload.cbegin();
+    decode(base_ino, p);
+    decode(base_dir_frag, p);
+    decode(wanted_base_dir, p);
+    decode(wanted_xlocked, p);
+    decode(wanted_snapid, p);
+    decode(flag_error_dn, p);
+    decode(flag_error_dir, p);
+    decode(error_dentry, p);
+    decode(dir_auth_hint, p);
+    decode(unsolicited, p);
+
+    decode(starts_with, p);
+    decode(trace, p);
   }
   void encode_payload(uint64_t features) override {
-    ::encode(base_ino, payload);
-    ::encode(base_dir_frag, payload);
-    ::encode(wanted_base_dir, payload);
-    ::encode(wanted_xlocked, payload);
-    ::encode(wanted_snapid, payload);
-    ::encode(flag_error_dn, payload);
-    ::encode(flag_error_dir, payload);
-    ::encode(error_dentry, payload);
-    ::encode(dir_auth_hint, payload);
-    ::encode(unsolicited, payload);
-
-    ::encode(starts_with, payload);
-    ::encode(trace, payload);
+    using ceph::encode;
+    encode(base_ino, payload);
+    encode(base_dir_frag, payload);
+    encode(wanted_base_dir, payload);
+    encode(wanted_xlocked, payload);
+    encode(wanted_snapid, payload);
+    encode(flag_error_dn, payload);
+    encode(flag_error_dir, payload);
+    encode(error_dentry, payload);
+    encode(dir_auth_hint, payload);
+    encode(unsolicited, payload);
+
+    encode(starts_with, payload);
+    encode(trace, payload);
   }
 };