]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: use modern encoding for LogEvent
authorGreg Farnum <greg@inktank.com>
Fri, 25 Jan 2013 02:15:13 +0000 (18:15 -0800)
committerGreg Farnum <greg@inktank.com>
Fri, 8 Feb 2013 21:17:54 +0000 (13:17 -0800)
It's a pretty simple encoding, but if we ever want to encode more than
the event type and the event itself we'll be glad to have versioned
the super-structure as well.

Signed-off-by: Greg Farnum <greg@inktank.com>
src/mds/LogEvent.cc
src/mds/LogEvent.h

index 777c0a6ce6fea6019ea52a3d7bb2757dcc84c193..c4f18c756a9231ca00fa15cd81e0c2f95ddb4a2d 100644 (file)
@@ -42,8 +42,22 @@ LogEvent *LogEvent::decode(bufferlist& bl)
   // parse type, length
   bufferlist::iterator p = bl.begin();
   __u32 type;
+  LogEvent *event = NULL;
   ::decode(type, p);
 
+  if (EVENT_NEW_ENCODING == type) {
+    DECODE_START(1, p);
+    ::decode(type, p);
+    event = decode_event(bl, p, type);
+    DECODE_FINISH(p);
+  } else { // we are using classic encoding
+    event = decode_event(bl, p, type);
+  }
+  return event;
+}
+
+LogEvent *LogEvent::decode_event(bufferlist& bl, bufferlist::iterator& p, __u32 type)
+{
   int length = bl.length() - p.get_off();
   generic_dout(15) << "decode_log_event type " << type << ", size " << length << dendl;
   
index 98d95d4314c8b8bcc0a72fecf40b7e43ec3e595a..25990b6f104d97f61fc6b490051e839193848db5 100644 (file)
@@ -15,6 +15,7 @@
 #ifndef CEPH_LOGEVENT_H
 #define CEPH_LOGEVENT_H
 
+#define EVENT_NEW_ENCODING 0 // indicates that the encoding is versioned
 #define EVENT_UNUSED       1 // was previously EVENT_STRING
 
 #define EVENT_SUBTREEMAP   2
@@ -55,6 +56,7 @@ class LogEvent {
  private:
   __u32 _type;
   uint64_t _start_off;
+  static LogEvent *decode_event(bufferlist& bl, bufferlist::iterator& p, __u32 type);
 
 protected:
   utime_t stamp;
@@ -83,8 +85,11 @@ protected:
   static LogEvent *decode(bufferlist &bl);
 
   void encode_with_header(bufferlist& bl) {
+    ::encode(EVENT_NEW_ENCODING, bl);
+    ENCODE_START(1, 1, bl)
     ::encode(_type, bl);
     encode(bl);
+    ENCODE_FINISH(bl);
   }
 
   virtual void print(ostream& out) {