]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: record original snap name in snap rename journal event
authorJason Dillaman <dillaman@redhat.com>
Fri, 8 Jul 2016 13:14:58 +0000 (09:14 -0400)
committerJason Dillaman <dillaman@redhat.com>
Wed, 17 Aug 2016 17:22:04 +0000 (13:22 -0400)
Remote peers need a key to map snapshot ids between clusters.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>
(cherry picked from commit f70b90c48d9520bbb4bb29058375e8205cf63771)

src/librbd/journal/Types.cc
src/librbd/journal/Types.h
src/librbd/operation/SnapshotRenameRequest.cc
src/librbd/operation/SnapshotRenameRequest.h
src/test/librbd/journal/test_Replay.cc
src/test/librbd/journal/test_mock_Replay.cc

index 8f9f942733acf10622e8461ff8ea9a8467a35bbd..0b2a54d8684d8d369901c4b4038a9112f21414fd 100644 (file)
@@ -157,16 +157,21 @@ void SnapEventBase::dump(Formatter *f) const {
 void SnapRenameEvent::encode(bufferlist& bl) const {
   SnapEventBase::encode(bl);
   ::encode(snap_id, bl);
+  ::encode(src_snap_name, bl);
 }
 
 void SnapRenameEvent::decode(__u8 version, bufferlist::iterator& it) {
   SnapEventBase::decode(version, it);
   ::decode(snap_id, it);
+  if (version >= 2) {
+    ::decode(src_snap_name, it);
+  }
 }
 
 void SnapRenameEvent::dump(Formatter *f) const {
   SnapEventBase::dump(f);
   f->dump_unsigned("src_snap_id", snap_id);
+  f->dump_string("src_snap_name", src_snap_name);
   f->dump_string("dest_snap_name", snap_name);
 }
 
@@ -224,7 +229,7 @@ EventType EventEntry::get_event_type() const {
 }
 
 void EventEntry::encode(bufferlist& bl) const {
-  ENCODE_START(1, 1, bl);
+  ENCODE_START(2, 1, bl);
   boost::apply_visitor(EncodeVisitor(bl), event);
   ENCODE_FINISH(bl);
 }
@@ -312,7 +317,7 @@ void EventEntry::generate_test_instances(std::list<EventEntry *> &o) {
   o.push_back(new EventEntry(SnapRemoveEvent(345, "snap")));
 
   o.push_back(new EventEntry(SnapRenameEvent()));
-  o.push_back(new EventEntry(SnapRenameEvent(456, 1, "snap")));
+  o.push_back(new EventEntry(SnapRenameEvent(456, 1, "src snap", "dest snap")));
 
   o.push_back(new EventEntry(SnapProtectEvent()));
   o.push_back(new EventEntry(SnapProtectEvent(567, "snap")));
index 4748aeb2ebb938a20703a642c747ad6d7aefcad6..8584532247fffb0112b9e10e42d62769f6c7cdc3 100644 (file)
@@ -161,12 +161,15 @@ struct SnapRenameEvent : public SnapEventBase {
   static const EventType TYPE = EVENT_TYPE_SNAP_RENAME;
 
   uint64_t snap_id;
+  std::string src_snap_name;
 
   SnapRenameEvent() : snap_id(CEPH_NOSNAP) {
   }
   SnapRenameEvent(uint64_t op_tid, uint64_t src_snap_id,
+                  const std::string &src_snap_name,
                   const std::string &dest_snap_name)
-    : SnapEventBase(op_tid, dest_snap_name), snap_id(src_snap_id) {
+    : SnapEventBase(op_tid, dest_snap_name), snap_id(src_snap_id),
+      src_snap_name(src_snap_name) {
   }
 
   void encode(bufferlist& bl) const;
index ec7eb653c37dfcdfd619980c1b4b10390e888962..f825d8cf3747531778d6760f91fe647b528c8a59 100644 (file)
@@ -38,6 +38,21 @@ SnapshotRenameRequest<I>::SnapshotRenameRequest(I &image_ctx,
   : Request<I>(image_ctx, on_finish), m_snap_id(snap_id), m_snap_name(snap_name) {
 }
 
+template <typename I>
+journal::Event SnapshotRenameRequest<I>::create_event(uint64_t op_tid) const {
+  I &image_ctx = this->m_image_ctx;
+  assert(image_ctx.snap_lock.is_locked());
+
+  std::string src_snap_name;
+  auto snap_info_it = image_ctx.snap_info.find(m_snap_id);
+  if (snap_info_it != image_ctx.snap_info.end()) {
+    src_snap_name = snap_info_it->second.name;
+  }
+
+  return journal::SnapRenameEvent(op_tid, m_snap_id, src_snap_name,
+                                  m_snap_name);
+}
+
 template <typename I>
 void SnapshotRenameRequest<I>::send_op() {
   send_rename_snap();
index 503058d0b37adc066006a913e077759453ba0726..452862926801f2bb91757e2e90a0c04631ea747c 100644 (file)
@@ -42,9 +42,7 @@ public:
   SnapshotRenameRequest(ImageCtxT &image_ctx, Context *on_finish,
                         uint64_t snap_id, const std::string &snap_name);
 
-  virtual journal::Event create_event(uint64_t op_tid) const {
-    return journal::SnapRenameEvent(op_tid, m_snap_id, m_snap_name);
-  }
+  virtual journal::Event create_event(uint64_t op_tid) const;
 
 protected:
   virtual void send_op();
index cbde9ae72bdf66aa813e74347308ed6043a4dba5..037006e0027858760f446e66044fada8826fa0db 100644 (file)
@@ -452,7 +452,8 @@ TEST_F(TestJournalReplay, SnapRename) {
   get_journal_commit_position(ictx, &initial_tag, &initial_entry);
 
   // inject snapshot ops into journal
-  inject_into_journal(ictx, librbd::journal::SnapRenameEvent(1, snap_id, "snap2"));
+  inject_into_journal(ictx, librbd::journal::SnapRenameEvent(1, snap_id, "snap",
+                                                             "snap2"));
   inject_into_journal(ictx, librbd::journal::OpFinishEvent(1, 0));
   close_image(ictx);
 
index 0ab7c9dbb3261c18ba99c0860b663cf5f64a21ec..639ae5a306bfddcb336873a16f3c33b481658fd7 100644 (file)
@@ -829,7 +829,7 @@ TEST_F(TestMockJournalReplay, SnapRenameEvent) {
   C_SaferCond on_start_ready;
   C_SaferCond on_start_safe;
   when_process(mock_journal_replay,
-               EventEntry{SnapRenameEvent(123, 234, "snap")},
+               EventEntry{SnapRenameEvent(123, 234, "snap1", "snap")},
                &on_start_ready, &on_start_safe);
   ASSERT_EQ(0, on_start_ready.wait());
 
@@ -862,7 +862,7 @@ TEST_F(TestMockJournalReplay, SnapRenameEventExists) {
   C_SaferCond on_start_ready;
   C_SaferCond on_start_safe;
   when_process(mock_journal_replay,
-               EventEntry{SnapRenameEvent(123, 234, "snap")},
+               EventEntry{SnapRenameEvent(123, 234, "snap1", "snap")},
                &on_start_ready, &on_start_safe);
   ASSERT_EQ(0, on_start_ready.wait());