]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: pool create helper for crush ruleset
authorLoic Dachary <loic@dachary.org>
Sun, 2 Feb 2014 08:56:13 +0000 (09:56 +0100)
committerLoic Dachary <loic@dachary.org>
Tue, 4 Feb 2014 07:06:26 +0000 (08:06 +0100)
The crush ruleset of the replicated pools are by default set to
osd_pool_default_crush_replicated_ruleset but it may vary depending on
the pool type. Create a helper to compute the crush ruleset.

Reviewed-By: Christophe Courtaut <christophe.courtaut@gmail.com>
Signed-off-by: Loic Dachary <loic@dachary.org>
src/mon/OSDMonitor.cc
src/mon/OSDMonitor.h

index 8545457db43982b6eefa5f18423f82c3ff0320a1..0a733684d2d7e86be61816c19818abe5dca54316 100644 (file)
@@ -2791,6 +2791,27 @@ int OSDMonitor::prepare_pool_size(const unsigned pool_type,
   }
   return err;
 }
+int OSDMonitor::prepare_pool_crush_ruleset(const unsigned pool_type,
+                                          const map<string,string> &properties,
+                                          int *crush_ruleset,
+                                          stringstream &ss)
+{
+  if (*crush_ruleset < 0) {
+    switch (pool_type) {
+    case pg_pool_t::TYPE_REPLICATED:
+      *crush_ruleset =
+       CrushWrapper::get_osd_pool_default_crush_replicated_ruleset(g_ceph_context);
+      break;
+    default:
+      ss << "prepare_pool_crush_ruleset: " << pool_type
+        << " is not a known pool type";
+      return -EINVAL;
+      break;
+    }
+  }
+
+  return 0;
+}
 /**
  * @param name The name of the new pool
  * @param auid The auid of the pool owner. Can be -1
@@ -2813,15 +2834,9 @@ int OSDMonitor::prepare_new_pool(string& name, uint64_t auid, int crush_ruleset,
   int r = prepare_pool_properties(pool_type, properties, &properties_map, ss);
   if (r)
     return r;
-  if (crush_ruleset < 0) {
-    if (pool_type == pg_pool_t::TYPE_REPLICATED) {
-      crush_ruleset =
-       CrushWrapper::get_osd_pool_default_crush_replicated_ruleset(g_ceph_context);
-    } else {
-      ss << "prepare_new_pool(" << name << ") ruleset must be set";
-      return -EINVAL;
-    }
-  }
+  r = prepare_pool_crush_ruleset(pool_type, properties_map, &crush_ruleset, ss);
+  if (r)
+    return r;
   unsigned size;
   r = prepare_pool_size(pool_type, properties_map, &size, ss);
   if (r)
index 2b16234994322e46fe24a6cc0e77afae5ea503a1..83ca34dab076d053835327dc37ef0edb9a7903aa 100644 (file)
@@ -240,6 +240,10 @@ private:
                              const vector<string> &properties,
                              map<string,string> *properties_map,
                              stringstream &ss);
+  int prepare_pool_crush_ruleset(const unsigned pool_type,
+                                const map<string,string> &properties,
+                                int *crush_ruleset,
+                                stringstream &ss);
   int prepare_pool_size(const unsigned pool_type,
                        const map<string,string> &properties,
                        unsigned *size,