]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mds: change MClientReconnect encoding (mds protocol change)
authorSage Weil <sage@newdream.net>
Wed, 23 Dec 2009 20:09:41 +0000 (12:09 -0800)
committerSage Weil <sage@newdream.net>
Tue, 29 Dec 2009 04:05:32 +0000 (20:05 -0800)
This simplifies the encoding to make life easier for the kclient.

src/include/ceph_fs.h
src/messages/MClientReconnect.h

index db3fed33c4aac3e9892b187b6aa5fcc846eccb7e..d0f2557bb41b6f0a10863d0d9f6094c58dc4a3aa 100644 (file)
@@ -39,7 +39,7 @@
 #define CEPH_MDS_PROTOCOL     9 /* cluster internal */
 #define CEPH_MON_PROTOCOL     5 /* cluster internal */
 #define CEPH_OSDC_PROTOCOL   22 /* server/client */
-#define CEPH_MDSC_PROTOCOL   30 /* server/client */
+#define CEPH_MDSC_PROTOCOL   31 /* server/client */
 #define CEPH_MONC_PROTOCOL   15 /* server/client */
 
 
index 1eefb5c73b3a456e02c5325e90255dce03ea4458..27fd843b974738e2b2b7c2a9868bd59b7215afad 100644 (file)
@@ -20,7 +20,7 @@
 
 class MClientReconnect : public Message {
 public:
-  __u8 closed;  // true if this session was closed by the client.
+  bool closed;  // true if this session was closed by the client.
   map<inodeno_t, cap_reconnect_t>  caps;   // only head inodes
   vector<ceph_mds_snaprealm_reconnect> realms;
 
@@ -49,15 +49,23 @@ public:
   }
 
   void encode_payload() {
-    ::encode(closed, payload);
-    ::encode(caps, payload);
-    ::encode(realms, payload);
+    if (!closed) {
+      ::encode(caps, data);
+      ::encode_nohead(realms, data);
+    }
   }
   void decode_payload() {
-    bufferlist::iterator p = payload.begin();
-    ::decode(closed, p);
-    ::decode(caps, p);
-    ::decode(realms, p);
+    bufferlist::iterator p = data.begin();
+    if (p.end()) {
+      closed = true;
+    } else {
+      closed = false;
+      ::decode(caps, p);
+      while (p.end()) {
+       realms.push_back(ceph_mds_snaprealm_reconnect());
+       ::decode(realms.back(), p);
+      }
+    }
   }
 
 };