]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
librbd: new demote journal event
authorJason Dillaman <dillaman@redhat.com>
Fri, 25 Mar 2016 13:46:50 +0000 (09:46 -0400)
committerJason Dillaman <dillaman@redhat.com>
Tue, 29 Mar 2016 19:19:25 +0000 (15:19 -0400)
This event will be used as a placeholder to ensure that the demotion journal
tag is properly processed by rbd-mirror.  Without an event associated with
the demotion journal tag, the demotion event will be missed.

Signed-off-by: Jason Dillaman <dillaman@redhat.com>
src/librbd/journal/Replay.cc
src/librbd/journal/Replay.h
src/librbd/journal/Types.cc
src/librbd/journal/Types.h

index 55ba5f346f9c13d3b0c5c4a8badb065e42a8bfb8..aca64d9ba82f1b63441228d19b1cb58ab6258549 100644 (file)
@@ -588,6 +588,15 @@ void Replay<I>::handle_event(const journal::FlattenEvent &event,
   on_ready->complete(0);
 }
 
+template <typename I>
+void Replay<I>::handle_event(const journal::DemoteEvent &event,
+                            Context *on_ready, Context *on_safe) {
+  CephContext *cct = m_image_ctx.cct;
+  ldout(cct, 20) << this << " " << __func__ << ": Demote event" << dendl;
+  on_ready->complete(0);
+  on_safe->complete(0);
+}
+
 template <typename I>
 void Replay<I>::handle_event(const journal::UnknownEvent &event,
                             Context *on_ready, Context *on_safe) {
index 5be3406b8aaeb7a4a3548ccdf94fb3e9e3ac79e9..a9d73c06dade17cc80e173827868cd149f93eac8 100644 (file)
@@ -152,6 +152,8 @@ private:
                     Context *on_safe);
   void handle_event(const FlattenEvent &event, Context *on_ready,
                     Context *on_safe);
+  void handle_event(const DemoteEvent &event, Context *on_ready,
+                    Context *on_safe);
   void handle_event(const UnknownEvent &event, Context *on_ready,
                     Context *on_safe);
 
index 86fc7e00ca36f2c82358a29a20ff53cfcc4708c9..494d97311bbe7e7d828da718041c894232073ee1 100644 (file)
@@ -200,6 +200,15 @@ void ResizeEvent::dump(Formatter *f) const {
   f->dump_unsigned("size", size);
 }
 
+void DemoteEvent::encode(bufferlist& bl) const {
+}
+
+void DemoteEvent::decode(__u8 version, bufferlist::iterator& it) {
+}
+
+void DemoteEvent::dump(Formatter *f) const {
+}
+
 void UnknownEvent::encode(bufferlist& bl) const {
   assert(false);
 }
@@ -267,6 +276,9 @@ void EventEntry::decode(bufferlist::iterator& it) {
   case EVENT_TYPE_FLATTEN:
     event = FlattenEvent();
     break;
+  case EVENT_TYPE_DEMOTE:
+    event = DemoteEvent();
+    break;
   default:
     event = UnknownEvent();
     break;
@@ -318,6 +330,8 @@ void EventEntry::generate_test_instances(std::list<EventEntry *> &o) {
   o.push_back(new EventEntry(ResizeEvent(901, 1234)));
 
   o.push_back(new EventEntry(FlattenEvent(123)));
+
+  o.push_back(new EventEntry(DemoteEvent()));
 }
 
 // Journal Client
@@ -546,6 +560,9 @@ std::ostream &operator<<(std::ostream &out, const EventType &type) {
   case EVENT_TYPE_FLATTEN:
     out << "Flatten";
     break;
+  case EVENT_TYPE_DEMOTE:
+    out << "Demote";
+    break;
   default:
     out << "Unknown (" << static_cast<uint32_t>(type) << ")";
     break;
index 20803995b5df387a0d75cb7464cb49f1e55ffe36..fe02ffefd82e7d9211c47bb17bb4dd32b9067472 100644 (file)
@@ -34,7 +34,8 @@ enum EventType {
   EVENT_TYPE_SNAP_ROLLBACK  = 9,
   EVENT_TYPE_RENAME         = 10,
   EVENT_TYPE_RESIZE         = 11,
-  EVENT_TYPE_FLATTEN        = 12
+  EVENT_TYPE_FLATTEN        = 12,
+  EVENT_TYPE_DEMOTE         = 13
 };
 
 struct AioDiscardEvent {
@@ -256,6 +257,14 @@ struct FlattenEvent : public OpEventBase {
   using OpEventBase::dump;
 };
 
+struct DemoteEvent {
+  static const EventType TYPE = static_cast<EventType>(EVENT_TYPE_DEMOTE);
+
+  void encode(bufferlist& bl) const;
+  void decode(__u8 version, bufferlist::iterator& it);
+  void dump(Formatter *f) const;
+};
+
 struct UnknownEvent {
   static const EventType TYPE = static_cast<EventType>(-1);
 
@@ -277,6 +286,7 @@ typedef boost::variant<AioDiscardEvent,
                        RenameEvent,
                        ResizeEvent,
                        FlattenEvent,
+                       DemoteEvent,
                        UnknownEvent> Event;
 
 struct EventEntry {