]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/OSDMonitor: prevent setting hit_set unless all OSDs support it
authorSage Weil <sage@inktank.com>
Thu, 27 Mar 2014 23:38:46 +0000 (16:38 -0700)
committerSage Weil <sage@inktank.com>
Thu, 27 Mar 2014 23:38:46 +0000 (16:38 -0700)
We are using OSD_CACHEPOOL as a proxy for the support for the tiering
OSDMap infrastructure.

Signed-off-by: Sage Weil <sage@inktank.com>
src/mon/OSDMonitor.cc

index a6954fc7cee476ee1c16a0ed850dc98bc5d2b8c9..be55befdd341d7dd70e683beedfa1807cb9b5c35 100644 (file)
@@ -3371,17 +3371,22 @@ int OSDMonitor::prepare_command_pool_set(map<string,cmd_vartype> &cmdmap,
   } else if (var == "hit_set_type") {
     if (val == "none")
       p.hit_set_params = HitSet::Params();
-    else if (val == "bloom") {
-      BloomHitSet::Params *bsp = new BloomHitSet::Params;
-      bsp->set_fpp(g_conf->osd_pool_default_hit_set_bloom_fpp);
-      p.hit_set_params = HitSet::Params(bsp);
-    } else if (val == "explicit_hash")
-      p.hit_set_params = HitSet::Params(new ExplicitHashHitSet::Params);
-    else if (val == "explicit_object")
-      p.hit_set_params = HitSet::Params(new ExplicitObjectHitSet::Params);
     else {
-      ss << "unrecognized hit_set type '" << val << "'";
-      return -EINVAL;
+      int err = check_cluster_features(CEPH_FEATURE_OSD_CACHEPOOL, ss);
+      if (err)
+       return err;
+      if (val == "bloom") {
+       BloomHitSet::Params *bsp = new BloomHitSet::Params;
+       bsp->set_fpp(g_conf->osd_pool_default_hit_set_bloom_fpp);
+       p.hit_set_params = HitSet::Params(bsp);
+      } else if (val == "explicit_hash")
+       p.hit_set_params = HitSet::Params(new ExplicitHashHitSet::Params);
+      else if (val == "explicit_object")
+       p.hit_set_params = HitSet::Params(new ExplicitObjectHitSet::Params);
+      else {
+       ss << "unrecognized hit_set type '" << val << "'";
+       return -EINVAL;
+      }
     }
   } else if (var == "hit_set_period") {
     if (interr.length()) {
@@ -4741,6 +4746,8 @@ done:
 
   } else if (prefix == "osd pool set") {
     err = prepare_command_pool_set(cmdmap, ss);
+    if (err == -EAGAIN)
+      goto wait;
     if (err < 0)
       goto reply;