]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/messages/MDentryUnlink.h
import ceph quincy 17.2.6
[ceph.git] / ceph / src / messages / MDentryUnlink.h
index 210fa033c5219219616129d053795862df0b5768..fc52284416659ae4075084d18edeb24b26e16835 100644 (file)
 
 class MDentryUnlink final : public MMDSOp {
 private:
-  static constexpr int HEAD_VERSION = 1;
+  static constexpr int HEAD_VERSION = 2;
   static constexpr int COMPAT_VERSION = 1;
-  
+
   dirfrag_t dirfrag;
   std::string dn;
+  bool unlinking = false;
 
  public:
   dirfrag_t get_dirfrag() const { return dirfrag; }
   const std::string& get_dn() const { return dn; }
+  bool is_unlinking() const { return unlinking; }
 
   ceph::buffer::list straybl;
   ceph::buffer::list snapbl;
@@ -38,10 +40,9 @@ private:
 protected:
   MDentryUnlink() :
     MMDSOp(MSG_MDS_DENTRYUNLINK, HEAD_VERSION, COMPAT_VERSION) { }
-  MDentryUnlink(dirfrag_t df, std::string_view n) :
+  MDentryUnlink(dirfrag_t df, std::string_view n, bool u=false) :
     MMDSOp(MSG_MDS_DENTRYUNLINK, HEAD_VERSION, COMPAT_VERSION),
-    dirfrag(df),
-    dn(n) {}
+    dirfrag(df), dn(n), unlinking(u) {}
   ~MDentryUnlink() final {}
 
 public:
@@ -49,19 +50,66 @@ public:
   void print(std::ostream& o) const override {
     o << "dentry_unlink(" << dirfrag << " " << dn << ")";
   }
-  
+
   void decode_payload() override {
     using ceph::decode;
     auto p = payload.cbegin();
     decode(dirfrag, p);
     decode(dn, p);
     decode(straybl, p);
+    if (header.version >= 2)
+      decode(unlinking, p);
   }
   void encode_payload(uint64_t features) override {
     using ceph::encode;
     encode(dirfrag, payload);
     encode(dn, payload);
     encode(straybl, payload);
+    encode(unlinking, payload);
+  }
+private:
+  template<class T, typename... Args>
+  friend boost::intrusive_ptr<T> ceph::make_message(Args&&... args);
+  template<class T, typename... Args>
+  friend MURef<T> crimson::make_message(Args&&... args);
+};
+
+class MDentryUnlinkAck final : public MMDSOp {
+private:
+  static constexpr int HEAD_VERSION = 1;
+  static constexpr int COMPAT_VERSION = 1;
+
+  dirfrag_t dirfrag;
+  std::string dn;
+
+ public:
+  dirfrag_t get_dirfrag() const { return dirfrag; }
+  const std::string& get_dn() const { return dn; }
+
+protected:
+  MDentryUnlinkAck() :
+    MMDSOp(MSG_MDS_DENTRYUNLINK_ACK, HEAD_VERSION, COMPAT_VERSION) { }
+  MDentryUnlinkAck(dirfrag_t df, std::string_view n) :
+    MMDSOp(MSG_MDS_DENTRYUNLINK_ACK, HEAD_VERSION, COMPAT_VERSION),
+    dirfrag(df), dn(n) {}
+  ~MDentryUnlinkAck() final {}
+
+public:
+  std::string_view get_type_name() const override { return "dentry_unlink_ack";}
+  void print(std::ostream& o) const override {
+    o << "dentry_unlink_ack(" << dirfrag << " " << dn << ")";
+  }
+
+  void decode_payload() override {
+    using ceph::decode;
+    auto p = payload.cbegin();
+    decode(dirfrag, p);
+    decode(dn, p);
+  }
+  void encode_payload(uint64_t features) override {
+    using ceph::encode;
+    encode(dirfrag, payload);
+    encode(dn, payload);
   }
 private:
   template<class T, typename... Args>