#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 */
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;
}
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);
+ }
+ }
}
};