From: John Spray Date: Mon, 8 Sep 2014 22:35:38 +0000 (+0100) Subject: messages: add cephfs client metadata to MClientSession X-Git-Tag: v0.86~63^2~8 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=cd215c7561d855cd263d2898026ee649867f1fea;p=ceph.git messages: add cephfs client metadata to MClientSession Signed-off-by: John Spray --- diff --git a/src/messages/MClientSession.h b/src/messages/MClientSession.h index 4b98a983b0f1..092418926380 100644 --- a/src/messages/MClientSession.h +++ b/src/messages/MClientSession.h @@ -18,24 +18,28 @@ #include "msg/Message.h" class MClientSession : public Message { + static const int HEAD_VERSION = 2; + public: ceph_mds_session_head head; + std::map client_meta; + int get_op() const { return head.op; } version_t get_seq() const { return head.seq; } utime_t get_stamp() const { return utime_t(head.stamp); } int get_max_caps() const { return head.max_caps; } int get_max_leases() const { return head.max_leases; } - MClientSession() : Message(CEPH_MSG_CLIENT_SESSION) { } + MClientSession() : Message(CEPH_MSG_CLIENT_SESSION, HEAD_VERSION) { } MClientSession(int o, version_t s=0) : - Message(CEPH_MSG_CLIENT_SESSION) { + Message(CEPH_MSG_CLIENT_SESSION, HEAD_VERSION) { memset(&head, 0, sizeof(head)); head.op = o; head.seq = s; } MClientSession(int o, utime_t st) : - Message(CEPH_MSG_CLIENT_SESSION) { + Message(CEPH_MSG_CLIENT_SESSION, HEAD_VERSION) { memset(&head, 0, sizeof(head)); head.op = o; head.seq = 0; @@ -58,9 +62,21 @@ public: void decode_payload() { bufferlist::iterator p = payload.begin(); ::decode(head, p); + if (header.version >= 2) { + ::decode(client_meta, p); + } } void encode_payload(uint64_t features) { ::encode(head, payload); + if (client_meta.empty()) { + // If we're not trying to send any metadata (always the case if + // we are a server) then send older-format message to avoid upsetting + // old kernel clients. + header.version = 1; + } else { + ::encode(client_meta, payload); + } + } };