Remote peers need a key to map snapshot ids between clusters.
Signed-off-by: Jason Dillaman <dillaman@redhat.com>
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);
}
}
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);
}
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")));
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;
: 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();
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();
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);
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());
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());