From 5158ffd03fd49b3e3b08069c7fda4694d61982f0 Mon Sep 17 00:00:00 2001 From: Mykola Golub Date: Thu, 12 Dec 2019 14:29:04 +0000 Subject: [PATCH] src/cls: store mirror image mode in migration spec Signed-off-by: Mykola Golub --- src/cls/rbd/cls_rbd_types.cc | 17 +++++++++++++---- src/cls/rbd/cls_rbd_types.h | 12 +++++++----- src/test/cls_rbd/test_cls_rbd.cc | 2 ++ 3 files changed, 22 insertions(+), 9 deletions(-) diff --git a/src/cls/rbd/cls_rbd_types.cc b/src/cls/rbd/cls_rbd_types.cc index 85402cf1587fe..f83f3162d56ed 100644 --- a/src/cls/rbd/cls_rbd_types.cc +++ b/src/cls/rbd/cls_rbd_types.cc @@ -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(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(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 &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; diff --git a/src/cls/rbd/cls_rbd_types.h b/src/cls/rbd/cls_rbd_types.h index eede25c9b9169..6b5dd0c68835a 100644 --- a/src/cls/rbd/cls_rbd_types.h +++ b/src/cls/rbd/cls_rbd_types.h @@ -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 &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; } }; diff --git a/src/test/cls_rbd/test_cls_rbd.cc b/src/test/cls_rbd/test_cls_rbd.cc index 8be5b828e6493..54bfc116029b9 100644 --- a/src/test/cls_rbd/test_cls_rbd.cc +++ b/src/test/cls_rbd/test_cls_rbd.cc @@ -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"); -- 2.39.5