From c3ae0089941c5f4b07f140ad8d014f9187cddc50 Mon Sep 17 00:00:00 2001 From: Venky Shankar Date: Tue, 28 Nov 2017 23:03:37 -0500 Subject: [PATCH] rbd-mirror: include map timestamp in image map Signed-off-by: Venky Shankar --- src/cls/rbd/cls_rbd_types.cc | 17 +++++++++++------ src/cls/rbd/cls_rbd_types.h | 4 +++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/cls/rbd/cls_rbd_types.cc b/src/cls/rbd/cls_rbd_types.cc index e02582da13d04..8c1767c4edf8e 100644 --- a/src/cls/rbd/cls_rbd_types.cc +++ b/src/cls/rbd/cls_rbd_types.cc @@ -482,6 +482,7 @@ void TrashImageSpec::dump(Formatter *f) const { void MirrorImageMap::encode(bufferlist &bl) const { ENCODE_START(1, 1, bl); ::encode(instance_id, bl); + ::encode(mapped_time, bl); ::encode(data, bl); ENCODE_FINISH(bl); } @@ -489,12 +490,14 @@ void MirrorImageMap::encode(bufferlist &bl) const { void MirrorImageMap::decode(bufferlist::iterator &it) { DECODE_START(1, it); ::decode(instance_id, it); + ::decode(mapped_time, it); ::decode(data, it); DECODE_FINISH(it); } void MirrorImageMap::dump(Formatter *f) const { f->dump_string("instance_id", instance_id); + f->dump_stream("mapped_time") << mapped_time; std::stringstream data_ss; data.hexdump(data_ss); @@ -506,22 +509,24 @@ void MirrorImageMap::generate_test_instances( bufferlist data; data.append(std::string(128, '1')); - o.push_back(new MirrorImageMap("uuid-123", data)); - o.push_back(new MirrorImageMap("uuid-abc", data)); + o.push_back(new MirrorImageMap("uuid-123", utime_t(), data)); + o.push_back(new MirrorImageMap("uuid-abc", utime_t(), data)); } bool MirrorImageMap::operator==(const MirrorImageMap &rhs) const { - return instance_id == rhs.instance_id && data.contents_equal(data); + return instance_id == rhs.instance_id && mapped_time == rhs.mapped_time && + data.contents_equal(rhs.data); } bool MirrorImageMap::operator<(const MirrorImageMap &rhs) const { - return instance_id < rhs.instance_id; + return instance_id < rhs.instance_id || + (instance_id == rhs.instance_id && mapped_time < rhs.mapped_time); } std::ostream& operator<<(std::ostream& os, const MirrorImageMap &image_map) { - return os << "[" - << "instance_id=" << image_map.instance_id << "]"; + return os << "[" << "instance_id=" << image_map.instance_id << ", mapped_time=" + << image_map.mapped_time << "]"; } } // namespace rbd diff --git a/src/cls/rbd/cls_rbd_types.h b/src/cls/rbd/cls_rbd_types.h index d0f73f14d3352..87c0a397d7605 100644 --- a/src/cls/rbd/cls_rbd_types.h +++ b/src/cls/rbd/cls_rbd_types.h @@ -368,13 +368,15 @@ struct MirrorImageMap { MirrorImageMap() { } - MirrorImageMap(const std::string &instance_id, + MirrorImageMap(const std::string &instance_id, utime_t mapped_time, const bufferlist &data) : instance_id(instance_id), + mapped_time(mapped_time), data(data) { } std::string instance_id; + utime_t mapped_time; bufferlist data; void encode(bufferlist &bl) const; -- 2.39.5