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));
#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
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
#include "SessionMap.h"
-#define CEPH_MDS_PROTOCOL 19 /* cluster internal */
+#define CEPH_MDS_PROTOCOL 20 /* cluster internal */
enum {
for (set<client_t>::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);
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);
return;
}
- if (true) {
+ if (features & CEPH_FEATURE_EXPORT_PEER) {
if (head.op == CEPH_CAP_OP_IMPORT)
::encode(peer, payload);
} else {