]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osd/OSDmap: add require_min_compat_client field
authorSage Weil <sage@redhat.com>
Thu, 4 May 2017 17:04:19 +0000 (12:04 -0500)
committerSage Weil <sage@redhat.com>
Tue, 9 May 2017 16:32:54 +0000 (11:32 -0500)
This is a persistent record of the compatibility for old clients that
we will enforce.  Once set, the mon will eventually prevent newer features
of the OSDMap or CRUSH maps from being used if they violate this
requirement.

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

index e1cf4ff0957168c56a8b2976f73f67ef70b091a7..8b3071beb8f4e6cbfbcdd98c8035a2845f54ac3b 100644 (file)
@@ -467,6 +467,9 @@ void OSDMap::Incremental::encode(bufferlist& bl, uint64_t features) const
       ::encode(new_full_ratio, bl);
       ::encode(new_backfillfull_ratio, bl);
     }
+    if (target_v >= 4) {
+      ::encode(new_require_min_compat_client, bl);
+    }
     ENCODE_FINISH(bl); // osd-only data
   }
 
@@ -675,6 +678,7 @@ void OSDMap::Incremental::decode(bufferlist::iterator& bl)
     }
     if (struct_v >= 4) {
       ::decode(new_backfillfull_ratio, bl);
+      ::decode(new_require_min_compat_client, bl);
     } else {
       new_backfillfull_ratio = -1;
     }
@@ -722,6 +726,7 @@ void OSDMap::Incremental::dump(Formatter *f) const
   f->dump_float("new_full_ratio", new_full_ratio);
   f->dump_float("new_nearfull_ratio", new_nearfull_ratio);
   f->dump_float("new_backfillfull_ratio", new_backfillfull_ratio);
+  f->dump_string("new_require_min_compat_client", new_require_min_compat_client);
 
   if (fullmap.length()) {
     f->open_object_section("full_map");
@@ -1619,6 +1624,9 @@ int OSDMap::apply_incremental(const Incremental &inc)
   if (inc.new_full_ratio >= 0) {
     full_ratio = inc.new_full_ratio;
   }
+  if (inc.new_require_min_compat_client.length()) {
+    require_min_compat_client = inc.new_require_min_compat_client;
+  }
 
   // do new crush map last (after up/down stuff)
   if (inc.crush.length()) {
@@ -2210,6 +2218,9 @@ void OSDMap::encode(bufferlist& bl, uint64_t features) const
       ::encode(full_ratio, bl);
       ::encode(backfillfull_ratio, bl);
     }
+    if (target_v >= 3) {
+      ::encode(require_min_compat_client, bl);
+    }
     ENCODE_FINISH(bl); // osd-only data
   }
 
@@ -2445,6 +2456,7 @@ void OSDMap::decode(bufferlist::iterator& bl)
     }
     if (struct_v >= 3) {
       ::decode(backfillfull_ratio, bl);
+      ::decode(require_min_compat_client, bl);
     } else {
       backfillfull_ratio = 0;
     }
@@ -2522,6 +2534,7 @@ 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());
+  f->dump_string("require_min_compat_client", require_min_compat_client);
   auto mv = get_min_compat_client();
   f->dump_string("min_compat_client", mv.first);
   f->dump_string("min_compat_client_version", mv.second);
@@ -2738,6 +2751,11 @@ void OSDMap::print(ostream& out) const
   out << "full_ratio " << full_ratio << "\n";
   out << "backfillfull_ratio " << backfillfull_ratio << "\n";
   out << "nearfull_ratio " << nearfull_ratio << "\n";
+  if (require_min_compat_client.length()) {
+    out << "require_min_compat_client " << require_min_compat_client << "\n";
+  }
+  auto mv = get_min_compat_client();
+  out << "min_compat_client " << mv.first << " " << mv.second << "\n";
   if (get_cluster_snapshot().length())
     out << "cluster_snapshot " << get_cluster_snapshot() << "\n";
   out << "\n";
index 1cc8f1cc0c0a7e09a93eb99384e6e564ea9d607b..1dc67090d4446a4691763d89c6b46c775b530bb7 100644 (file)
@@ -172,6 +172,8 @@ public:
     float new_backfillfull_ratio = -1;
     float new_full_ratio = -1;
 
+    string new_require_min_compat_client;
+
     mutable bool have_crc;      ///< crc values are defined
     uint32_t full_crc;  ///< crc of the resulting OSDMap
     mutable uint32_t inc_crc;   ///< crc of this incremental
@@ -270,6 +272,9 @@ private:
 
   float full_ratio = 0, backfillfull_ratio = 0, nearfull_ratio = 0;
 
+  /// min compat client we want to support
+  string require_min_compat_client;
+
   mutable uint64_t cached_up_osd_features;
 
   mutable bool crc_defined;