From: Jason Dillaman Date: Thu, 10 Mar 2016 20:48:18 +0000 (-0500) Subject: librbd: track starting point snapshot for mirror sync point X-Git-Tag: v10.1.0~104^2~14 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=a4b92434b1b994ad53d82a1ac4404cd05450933d;p=ceph.git librbd: track starting point snapshot for mirror sync point Signed-off-by: Jason Dillaman --- diff --git a/src/librbd/journal/Types.cc b/src/librbd/journal/Types.cc index db29392dd4e75..b79785ddd6d59 100644 --- a/src/librbd/journal/Types.cc +++ b/src/librbd/journal/Types.cc @@ -4,6 +4,7 @@ #include "librbd/journal/Types.h" #include "include/assert.h" #include "include/stringify.h" +#include "include/types.h" #include "common/Formatter.h" namespace librbd { @@ -335,16 +336,19 @@ void ImageClientMeta::dump(Formatter *f) const { void MirrorPeerSyncPoint::encode(bufferlist& bl) const { ::encode(snap_name, bl); + ::encode(from_snap_name, bl); ::encode(object_number, bl); } void MirrorPeerSyncPoint::decode(__u8 version, bufferlist::iterator& it) { ::decode(snap_name, it); + ::decode(from_snap_name, it); ::decode(object_number, it); } void MirrorPeerSyncPoint::dump(Formatter *f) const { f->dump_string("snap_name", snap_name); + f->dump_string("from_snap_name", from_snap_name); if (object_number) { f->dump_unsigned("object_number", *object_number); } @@ -454,7 +458,8 @@ void ClientData::generate_test_instances(std::list &o) { o.push_back(new ClientData(ImageClientMeta())); o.push_back(new ClientData(ImageClientMeta(123))); o.push_back(new ClientData(MirrorPeerClientMeta())); - o.push_back(new ClientData(MirrorPeerClientMeta("image_id", {{"snap 1", 123}}, + o.push_back(new ClientData(MirrorPeerClientMeta("image_id", + {{"snap 2", "snap 1", 123}}, {{1, 2}, {3, 4}}))); o.push_back(new ClientData(CliClientMeta())); } @@ -567,6 +572,36 @@ std::ostream &operator<<(std::ostream &out, const ImageClientMeta &meta) { return out; } +std::ostream &operator<<(std::ostream &out, const MirrorPeerSyncPoint &sync) { + out << "[snap_name=" << sync.snap_name << ", " + << "from_snap_name=" << sync.from_snap_name; + if (sync.object_number) { + out << ", " << *sync.object_number; + } + out << "]"; + return out; +} + +std::ostream &operator<<(std::ostream &out, const MirrorPeerClientMeta &meta) { + out << "[image_id=" << meta.image_id << ", " + << "sync_points=["; + std::string delimiter; + for (auto &sync_point : meta.sync_points) { + out << delimiter << "[" << sync_point << "]"; + delimiter = ", "; + } + out << "], snap_seqs=["; + delimiter = ""; + for (auto &pair : meta.snap_seqs) { + out << delimiter << "[" + << "local_snap_seq=" << pair.first << ", " + << "peer_snap_seq" << pair.second << "]"; + delimiter = ", "; + } + out << "]"; + return out; +} + std::ostream &operator<<(std::ostream &out, const TagData &tag_data) { out << "[" << "mirror_uuid=" << tag_data.mirror_uuid << ", " diff --git a/src/librbd/journal/Types.h b/src/librbd/journal/Types.h index 0eb28ac2392a1..441e29d053c9b 100644 --- a/src/librbd/journal/Types.h +++ b/src/librbd/journal/Types.h @@ -323,13 +323,20 @@ struct MirrorPeerSyncPoint { typedef boost::optional ObjectNumber; std::string snap_name; + std::string from_snap_name; ObjectNumber object_number; - MirrorPeerSyncPoint() : object_number(boost::none) { + MirrorPeerSyncPoint() : MirrorPeerSyncPoint("", "", boost::none) { } MirrorPeerSyncPoint(const std::string &snap_name, const ObjectNumber &object_number) - : snap_name(snap_name), object_number(object_number) { + : MirrorPeerSyncPoint(snap_name, "", object_number) { + } + MirrorPeerSyncPoint(const std::string &snap_name, + const std::string &from_snap_name, + const ObjectNumber &object_number) + : snap_name(snap_name), from_snap_name(from_snap_name), + object_number(object_number) { } void encode(bufferlist& bl) const; @@ -435,6 +442,8 @@ struct TagData { std::ostream &operator<<(std::ostream &out, const EventType &type); std::ostream &operator<<(std::ostream &out, const ClientMetaType &type); std::ostream &operator<<(std::ostream &out, const ImageClientMeta &meta); +std::ostream &operator<<(std::ostream &out, const MirrorPeerSyncPoint &sync); +std::ostream &operator<<(std::ostream &out, const MirrorPeerClientMeta &meta); std::ostream &operator<<(std::ostream &out, const TagData &tag_data); } // namespace journal