]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: only send MMonMetadata to peer mons that support it 4993/head
authorSage Weil <sage@redhat.com>
Wed, 17 Jun 2015 18:31:32 +0000 (11:31 -0700)
committerSage Weil <sage@redhat.com>
Wed, 17 Jun 2015 18:35:18 +0000 (11:35 -0700)
Avoid sending this to mons that don't support the feature or else they
will reset the connection and we'll go into a busy reconnect loop.

Fixes: #12064
Signed-off-by: Sage Weil <sage@redhat.com>
src/include/ceph_features.h
src/mon/Monitor.cc

index 7f036161651ff7ce91a4957bb086a9da60ea2a12..b00fd5600d4275572ba4e92e552794fa9d3b4fb4 100644 (file)
@@ -63,6 +63,7 @@
 #define CEPH_FEATURE_OSD_MIN_SIZE_RECOVERY (1ULL<<49)
 // duplicated since it was introduced at the same time as MIN_SIZE_RECOVERY
 #define CEPH_FEATURE_OSD_PROXY_FEATURES (1ULL<<49)  /* overlap w/ above */
+#define CEPH_FEATURE_MON_METADATA (1ULL<<50)
 
 #define CEPH_FEATURE_RESERVED2 (1ULL<<61)  /* slow down, we are almost out... */
 #define CEPH_FEATURE_RESERVED  (1ULL<<62)  /* DO NOT USE THIS ... last bit! */
@@ -148,6 +149,7 @@ static inline unsigned long long ceph_sanitize_features(unsigned long long f) {
         CEPH_FEATURE_MDS_QUOTA | \
          CEPH_FEATURE_CRUSH_V4 |            \
          CEPH_FEATURE_OSD_MIN_SIZE_RECOVERY |           \
+        CEPH_FEATURE_MON_METADATA |                     \
         0ULL)
 
 #define CEPH_FEATURES_SUPPORTED_DEFAULT  CEPH_FEATURES_ALL
index ab809babc707e4e4cc80fb7914b698d5a9bf3275..6950aad8ab918ae666fe608e886f62a7574fc051 100644 (file)
@@ -1881,10 +1881,12 @@ void Monitor::lose_election(epoch_t epoch, set<int> &q, int l, uint64_t features
 
   finish_election();
 
-  Metadata sys_info;
-  collect_sys_info(&sys_info, g_ceph_context);
-  messenger->send_message(new MMonMetadata(sys_info),
-                         monmap->get_inst(get_leader()));
+  if (quorum_features & CEPH_FEATURE_MON_METADATA) {
+    Metadata sys_info;
+    collect_sys_info(&sys_info, g_ceph_context);
+    messenger->send_message(new MMonMetadata(sys_info),
+                           monmap->get_inst(get_leader()));
+  }
 }
 
 void Monitor::finish_election()