]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
src/cls: store mirror image mode in migration spec
authorMykola Golub <mgolub@suse.com>
Thu, 12 Dec 2019 14:29:04 +0000 (14:29 +0000)
committerMykola Golub <mgolub@suse.com>
Thu, 12 Dec 2019 14:58:02 +0000 (14:58 +0000)
Signed-off-by: Mykola Golub <mgolub@suse.com>
src/cls/rbd/cls_rbd_types.cc
src/cls/rbd/cls_rbd_types.h
src/test/cls_rbd/test_cls_rbd.cc

index 85402cf1587fea909b4eb6eb38e4edf2ea9159d1..f83f3162d56edf6fa96e86a007b377e55ff5cd6f 100644 (file)
@@ -1175,7 +1175,7 @@ std::ostream& operator<<(std::ostream& os,
 }
 
 void MigrationSpec::encode(bufferlist& bl) const {
-  ENCODE_START(1, 1, bl);
+  ENCODE_START(2, 1, bl);
   encode(header_type, bl);
   encode(pool_id, bl);
   encode(pool_namespace, bl);
@@ -1187,11 +1187,12 @@ void MigrationSpec::encode(bufferlist& bl) const {
   encode(mirroring, bl);
   encode(state, bl);
   encode(state_description, bl);
+  encode(static_cast<uint8_t>(mirror_image_mode), bl);
   ENCODE_FINISH(bl);
 }
 
 void MigrationSpec::decode(bufferlist::const_iterator& bl) {
-  DECODE_START(1, bl);
+  DECODE_START(2, bl);
   decode(header_type, bl);
   decode(pool_id, bl);
   decode(pool_namespace, bl);
@@ -1203,7 +1204,12 @@ void MigrationSpec::decode(bufferlist::const_iterator& bl) {
   decode(mirroring, bl);
   decode(state, bl);
   decode(state_description, bl);
-  DECODE_FINISH(bl);
+  if (struct_v >= 2) {
+    uint8_t int_mode;
+    decode(int_mode, bl);
+    mirror_image_mode = static_cast<MirrorImageMode>(int_mode);
+  }
+ DECODE_FINISH(bl);
 }
 
 std::ostream& operator<<(std::ostream& os,
@@ -1227,13 +1233,15 @@ void MigrationSpec::dump(Formatter *f) const {
   f->dump_stream("snap_seqs") << snap_seqs;
   f->dump_unsigned("overlap", overlap);
   f->dump_bool("mirroring", mirroring);
+  f->dump_stream("mirror_image_mode") << mirror_image_mode;
 }
 
 void MigrationSpec::generate_test_instances(std::list<MigrationSpec*> &o) {
   o.push_back(new MigrationSpec());
   o.push_back(new MigrationSpec(MIGRATION_HEADER_TYPE_SRC, 1, "ns",
                                 "image_name", "image_id", {{1, 2}}, 123, true,
-                                true, MIGRATION_STATE_PREPARED, "description"));
+                                MIRROR_IMAGE_MODE_SNAPSHOT, true,
+                                MIGRATION_STATE_PREPARED, "description"));
 }
 
 std::ostream& operator<<(std::ostream& os,
@@ -1248,6 +1256,7 @@ std::ostream& operator<<(std::ostream& os,
      << "overlap=" << migration_spec.overlap << ", "
      << "flatten=" << migration_spec.flatten << ", "
      << "mirroring=" << migration_spec.mirroring << ", "
+     << "mirror_image_mode=" << migration_spec.mirror_image_mode << ", "
      << "state=" << migration_spec.state << ", "
      << "state_description=" << migration_spec.state_description << "]";
   return os;
index eede25c9b916944611ac6ba6d036d1545e7a5744..6b5dd0c68835a4f51a8f75e50d8552d2f56d87ff 100644 (file)
@@ -907,6 +907,7 @@ struct MigrationSpec {
   uint64_t overlap = 0;
   bool flatten = false;
   bool mirroring = false;
+  MirrorImageMode mirror_image_mode = MIRROR_IMAGE_MODE_JOURNAL;
   MigrationState state = MIGRATION_STATE_ERROR;
   std::string state_description;
 
@@ -916,12 +917,13 @@ struct MigrationSpec {
                 const std::string& pool_namespace,
                 const std::string &image_name, const std::string &image_id,
                 const std::map<uint64_t, uint64_t> &snap_seqs, uint64_t overlap,
-                bool mirroring, bool flatten, MigrationState state,
-                const std::string &state_description)
+                bool mirroring, MirrorImageMode mirror_image_mode, bool flatten,
+                MigrationState state, const std::string &state_description)
     : header_type(header_type), pool_id(pool_id),
       pool_namespace(pool_namespace), image_name(image_name),
       image_id(image_id), snap_seqs(snap_seqs), overlap(overlap),
-      flatten(flatten), mirroring(mirroring), state(state),
+      flatten(flatten), mirroring(mirroring),
+      mirror_image_mode(mirror_image_mode), state(state),
       state_description(state_description) {
   }
 
@@ -936,8 +938,8 @@ struct MigrationSpec {
       pool_namespace == ms.pool_namespace && image_name == ms.image_name &&
       image_id == ms.image_id && snap_seqs == ms.snap_seqs &&
       overlap == ms.overlap && flatten == ms.flatten &&
-      mirroring == ms.mirroring && state == ms.state &&
-      state_description == ms.state_description;
+      mirroring == ms.mirroring && mirror_image_mode == ms.mirror_image_mode &&
+      state == ms.state && state_description == ms.state_description;
   }
 };
 
index 8be5b828e649306780cb424f90052a1026e6072e..54bfc116029b9fb46459f8af6c47ec0911161ae3 100644 (file)
@@ -3117,6 +3117,7 @@ TEST_F(TestClsRbd, migration)
 
   cls::rbd::MigrationSpec migration_spec(cls::rbd::MIGRATION_HEADER_TYPE_DST, 1,
                                          "name", "ns", "id", {}, 0, false,
+                                         cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
                                          false,
                                          cls::rbd::MIGRATION_STATE_PREPARING,
                                          "123");
@@ -3187,6 +3188,7 @@ TEST_F(TestClsRbd, migration_v1)
 
   cls::rbd::MigrationSpec migration_spec(cls::rbd::MIGRATION_HEADER_TYPE_DST, 1,
                                          "name", "ns", "id", {}, 0, false,
+                                         cls::rbd::MIRROR_IMAGE_MODE_JOURNAL,
                                          false,
                                          cls::rbd::MIGRATION_STATE_PREPARING,
                                          "123");