}
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);
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);
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,
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,
<< "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;
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;
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) {
}
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;
}
};
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");
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");