]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osd/OSDMap: get_min_compat_client()
authorSage Weil <sage@redhat.com>
Thu, 4 May 2017 17:02:28 +0000 (12:02 -0500)
committerSage Weil <sage@redhat.com>
Tue, 9 May 2017 16:04:57 +0000 (11:04 -0500)
Calculate the oldest client we allow to connect.  Provide both a release
name (e.g., firefly) and a version string (e.g., "0.80").

Signed-off-by: Sage Weil <sage@redhat.com>
src/osd/OSDMap.cc
src/osd/OSDMap.h

index 16f3774918a405f475c8dccc694619c467fb5756..e1cf4ff0957168c56a8b2976f73f67ef70b091a7 100644 (file)
@@ -1238,6 +1238,35 @@ uint64_t OSDMap::get_features(int entity_type, uint64_t *pmask) const
   return features;
 }
 
+pair<string,string> OSDMap::get_min_compat_client() const
+{
+  uint64_t f = get_features(CEPH_ENTITY_TYPE_CLIENT, nullptr);
+
+  if (HAVE_FEATURE(f, OSDMAP_REMAP)) {         // v12.0.0-1733-g27d6f43
+    return make_pair("luminous", "12.2.0");
+  }
+  if (HAVE_FEATURE(f, CRUSH_TUNABLES5)) {      // v10.0.0-612-g043a737
+    return make_pair("jewel", "10.2.0");
+  }
+  if (HAVE_FEATURE(f, CRUSH_V4)) {             // v0.91-678-g325fc56
+    return make_pair("hammer", "0.94");
+  }
+  if (HAVE_FEATURE(f, OSD_PRIMARY_AFFINITY) || // v0.76-553-gf825624
+      HAVE_FEATURE(f, CRUSH_TUNABLES3) ||      // v0.76-395-ge20a55d
+      HAVE_FEATURE(f, OSD_ERASURE_CODES) ||    // v0.73-498-gbfc86a8
+      HAVE_FEATURE(f, OSD_CACHEPOOL)) {        // v0.67-401-gb91c1c5
+    return make_pair("firefly", "0.80");
+  }
+  if (HAVE_FEATURE(f, CRUSH_TUNABLES2) ||      // v0.54-684-g0cc47ff
+      HAVE_FEATURE(f, OSDHASHPSPOOL)) {        // v0.57-398-g8cc2b0f
+    return make_pair("dumpling", "0.67");
+  }
+  if (HAVE_FEATURE(f, CRUSH_TUNABLES)) {       // v0.48argonaut-206-g6f381af
+    return make_pair("argonaut", "0.48argonaut-207");
+  }
+  return make_pair("argonaut", "0.48");
+}
+
 void OSDMap::_calc_up_osd_features()
 {
   bool first = true;
@@ -2493,6 +2522,9 @@ void OSDMap::dump(Formatter *f) const
   f->dump_string("cluster_snapshot", get_cluster_snapshot());
   f->dump_int("pool_max", get_pool_max());
   f->dump_int("max_osd", get_max_osd());
+  auto mv = get_min_compat_client();
+  f->dump_string("min_compat_client", mv.first);
+  f->dump_string("min_compat_client_version", mv.second);
 
   f->open_array_section("pools");
   for (const auto &pool : pools) {
index aa431389dc0bbd9026982412f594e87e1d8ed94d..1cc8f1cc0c0a7e09a93eb99384e6e564ea9d607b 100644 (file)
@@ -606,6 +606,12 @@ public:
    */
   uint64_t get_features(int entity_type, uint64_t *mask) const;
 
+  /**
+   * get oldest *client* version (firefly, hammer, etc.) that can connect given
+   * the feature bits required (according to get_features()).
+   */
+  pair<string,string> get_min_compat_client() const;
+
   /**
    * get intersection of features supported by up osds
    */