From: Yan, Zheng Date: Fri, 6 Dec 2013 08:33:39 +0000 (+0800) Subject: mds: add CEPH_FEATURE_EXPORT_PEER and bump the protocal version X-Git-Tag: v0.75~93^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=71d1eb374a27fe598c5b4547e9d75868aa821b25;p=ceph.git mds: add CEPH_FEATURE_EXPORT_PEER and bump the protocal version Signed-off-by: Yan, Zheng --- diff --git a/src/ceph_mds.cc b/src/ceph_mds.cc index 88b807b1b245..03947581cd21 100644 --- a/src/ceph_mds.cc +++ b/src/ceph_mds.cc @@ -244,7 +244,8 @@ int main(int argc, const char **argv) CEPH_FEATURE_NOSRCADDR | CEPH_FEATURE_DIRLAYOUTHASH | CEPH_FEATURE_PGID64 | - CEPH_FEATURE_MSG_AUTH; + CEPH_FEATURE_MSG_AUTH | + CEPH_FEATURE_EXPORT_PEER; uint64_t required = CEPH_FEATURE_OSDREPLYMUX; messenger->set_default_policy(Messenger::Policy::lossy_client(supported, required)); diff --git a/src/include/ceph_features.h b/src/include/ceph_features.h index 0ddf91f5d5cc..2d7960c0b436 100644 --- a/src/include/ceph_features.h +++ b/src/include/ceph_features.h @@ -41,6 +41,7 @@ #define CEPH_FEATURE_OSD_PACKED_RECOVERY (1ULL<<34) #define CEPH_FEATURE_OSD_CACHEPOOL (1ULL<<35) #define CEPH_FEATURE_CRUSH_V2 (1ULL<<36) /* new indep; SET_* steps */ +#define CEPH_FEATURE_EXPORT_PEER (1ULL<<37) /* * The introduction of CEPH_FEATURE_OSD_SNAPMAPPER caused the feature @@ -105,6 +106,7 @@ static inline unsigned long long ceph_sanitize_features(unsigned long long f) { CEPH_FEATURE_OSD_PACKED_RECOVERY | \ CEPH_FEATURE_OSD_CACHEPOOL | \ CEPH_FEATURE_CRUSH_V2 | \ + CEPH_FEATURE_EXPORT_PEER | \ 0ULL) #define CEPH_FEATURES_SUPPORTED_DEFAULT CEPH_FEATURES_ALL diff --git a/src/mds/MDS.h b/src/mds/MDS.h index 764b4e206b5c..2ab1eb1741c1 100644 --- a/src/mds/MDS.h +++ b/src/mds/MDS.h @@ -35,7 +35,7 @@ #include "SessionMap.h" -#define CEPH_MDS_PROTOCOL 19 /* cluster internal */ +#define CEPH_MDS_PROTOCOL 20 /* cluster internal */ enum { diff --git a/src/mds/Server.cc b/src/mds/Server.cc index a34b082e033f..fa46636241b5 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -271,7 +271,9 @@ void Server::flush_client_sessions(set& client_set, C_GatherBuilder& g for (set::iterator p = client_set.begin(); p != client_set.end(); ++p) { Session *session = mds->sessionmap.get_session(entity_name_t::CLIENT(p->v)); assert(session); - if (session->is_stale()) + if (session->is_stale() || + !session->connection.get() || + !session->connection->has_feature(CEPH_FEATURE_EXPORT_PEER)) continue; version_t seq = session->wait_for_flush(gather.new_sub()); mds->send_message_client(new MClientSession(CEPH_SESSION_FLUSHMSG, seq), session); diff --git a/src/messages/MClientCaps.h b/src/messages/MClientCaps.h index 04a393d2c7f1..38487084cdce 100644 --- a/src/messages/MClientCaps.h +++ b/src/messages/MClientCaps.h @@ -175,7 +175,7 @@ public: head.xattr_len = xattrbl.length(); // record peer in unused fields of cap export message - if (head.op == CEPH_CAP_OP_EXPORT) + if ((features & CEPH_FEATURE_EXPORT_PEER) && head.op == CEPH_CAP_OP_EXPORT) memcpy(&head.size, &peer, sizeof(peer)); ::encode(head, payload); @@ -191,7 +191,7 @@ public: return; } - if (true) { + if (features & CEPH_FEATURE_EXPORT_PEER) { if (head.op == CEPH_CAP_OP_IMPORT) ::encode(peer, payload); } else {