]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: track starting point snapshot for mirror sync point
authorJason Dillaman <dillaman@redhat.com>
Thu, 10 Mar 2016 20:48:18 +0000 (15:48 -0500)
committerJason Dillaman <dillaman@redhat.com>
Sun, 13 Mar 2016 03:40:16 +0000 (22:40 -0500)
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/librbd/journal/Types.cc
src/librbd/journal/Types.h

index db29392dd4e75ce4b99694879e9f88e04ed5760a..b79785ddd6d59fe85b0c0b6f3594389e07d804da 100644 (file)
@@ -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<ClientData *> &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 << ", "
index 0eb28ac2392a1ecb60a07ee750dcabd5c45ef1f5..441e29d053c9b97601efbc016f46a8157fb69386 100644 (file)
@@ -323,13 +323,20 @@ struct MirrorPeerSyncPoint {
   typedef boost::optional<uint64_t> 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