]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
librbd: new ParentImageSpec type to support parent namespaces
authorJason Dillaman <dillaman@redhat.com>
Thu, 26 Jul 2018 16:20:46 +0000 (12:20 -0400)
committerJason Dillaman <dillaman@redhat.com>
Wed, 19 Sep 2018 12:04:12 +0000 (08:04 -0400)
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/cls/rbd/cls_rbd_types.cc
src/cls/rbd/cls_rbd_types.h
src/tools/ceph-dencoder/types.h

index a4613c2d1ee08e1b55f08b66f3fc2cb6ac0c3740..24d63d72d8d89edfd70a6659b4e61a793f115b6a 100644 (file)
@@ -212,6 +212,37 @@ std::ostream& operator<<(std::ostream& os, const MirrorImageStatus& status) {
   return os;
 }
 
+void ParentImageSpec::encode(bufferlist& bl) const {
+  ENCODE_START(1, 1, bl);
+  encode(pool_id, bl);
+  encode(pool_namespace, bl);
+  encode(image_id, bl);
+  encode(snap_id, bl);
+  ENCODE_FINISH(bl);
+}
+
+void ParentImageSpec::decode(bufferlist::const_iterator& bl) {
+  DECODE_START(1, bl);
+  decode(pool_id, bl);
+  decode(pool_namespace, bl);
+  decode(image_id, bl);
+  decode(snap_id, bl);
+  DECODE_FINISH(bl);
+}
+
+void ParentImageSpec::dump(Formatter *f) const {
+  f->dump_int("pool_id", pool_id);
+  f->dump_string("pool_namespace", pool_namespace);
+  f->dump_string("image_id", image_id);
+  f->dump_unsigned("snap_id", snap_id);
+}
+
+void ParentImageSpec::generate_test_instances(std::list<ParentImageSpec*>& o) {
+  o.push_back(new ParentImageSpec{});
+  o.push_back(new ParentImageSpec{1, "", "foo", 3});
+  o.push_back(new ParentImageSpec{1, "ns", "foo", 3});
+}
+
 void ChildImageSpec::encode(bufferlist &bl) const {
   ENCODE_START(1, 1, bl);
   encode(pool_id, bl);
index cd8b01038bfa94980b065295f22794d94c710e37..03fe4750f0f3a078ea5fb5a2dc28e42559c7aa9e 100644 (file)
@@ -181,6 +181,44 @@ std::ostream& operator<<(std::ostream& os, const MirrorImageStatusState& state);
 
 WRITE_CLASS_ENCODER(MirrorImageStatus);
 
+struct ParentImageSpec {
+  int64_t pool_id = -1;
+  std::string pool_namespace;
+  std::string image_id;
+  snapid_t snap_id = CEPH_NOSNAP;
+
+  ParentImageSpec() {
+  }
+  ParentImageSpec(int64_t pool_id, const std::string& pool_namespace,
+                  const std::string& image_id, snapid_t snap_id)
+    : pool_id(pool_id), pool_namespace(pool_namespace), image_id(image_id),
+      snap_id(snap_id) {
+  }
+
+  bool exists() const {
+    return (pool_id >= 0 && !image_id.empty() && snap_id != CEPH_NOSNAP);
+  }
+
+  bool operator==(const ParentImageSpec& rhs) const {
+    return ((pool_id == rhs.pool_id) &&
+            (pool_namespace == rhs.pool_namespace) &&
+            (image_id == rhs.image_id) &&
+            (snap_id == rhs.snap_id));
+  }
+
+  bool operator!=(const ParentImageSpec& rhs) const {
+    return !(*this == rhs);
+  }
+
+  void encode(bufferlist &bl) const;
+  void decode(bufferlist::const_iterator &it);
+  void dump(Formatter *f) const;
+
+  static void generate_test_instances(std::list<ParentImageSpec*> &o);
+};
+
+WRITE_CLASS_ENCODER(ParentImageSpec);
+
 struct ChildImageSpec {
   int64_t pool_id = -1;
   std::string image_id;
index 28e72d7da1b52fa1132c1a7c29113aa7884f5e27..d8a5dd00d3c2c5fc7cbcdae74123a7c5139115b7 100644 (file)
@@ -465,6 +465,7 @@ TYPE(cls_rbd_parent)
 TYPE(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)