]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: implement --osd-pool-default-crush-erasure-ruleset
authorLoic Dachary <loic@dachary.org>
Thu, 26 Dec 2013 08:59:18 +0000 (09:59 +0100)
committerLoic Dachary <loic@dachary.org>
Thu, 26 Dec 2013 23:13:47 +0000 (00:13 +0100)
It must be different from the replicated default.

Signed-off-by: Loic Dachary <loic@dachary.org>
src/common/config.h
src/common/config_opts.h
src/mon/OSDMonitor.cc
src/test/mon/osd-pool-create.sh

index 4ba1cb9b87886d19f9305948d261ed5ddc558aab..0b6ab761162ebe7a8bbc47eecea4ac0d434715ee 100644 (file)
@@ -31,6 +31,7 @@ extern struct ceph_file_layout g_default_file_layout;
 
 enum {
   CEPH_DEFAULT_CRUSH_REPLICATED_RULESET,
+  CEPH_DEFAULT_CRUSH_ERASURE_RULESET,
 };
 
 #define OSD_REP_PRIMARY 0
index d4ffc93f94c1ba21185a6c22e9b1e0f72d2ae461..0a452fec46bbbf59704df1fd574052db5ae8bb4c 100644 (file)
@@ -395,6 +395,7 @@ OPTION(osd_pgp_bits, OPT_INT, 6)  // bits per osd
 OPTION(osd_crush_chooseleaf_type, OPT_INT, 1) // 1 = host
 OPTION(osd_pool_default_crush_rule, OPT_INT, -1) // deprecated for osd_pool_default_crush_replicated_ruleset
 OPTION(osd_pool_default_crush_replicated_ruleset, OPT_INT, CEPH_DEFAULT_CRUSH_REPLICATED_RULESET)
+OPTION(osd_pool_default_crush_erasure_ruleset, OPT_INT, CEPH_DEFAULT_CRUSH_ERASURE_RULESET)
 OPTION(osd_pool_default_size, OPT_INT, 3)
 OPTION(osd_pool_default_min_size, OPT_INT, 0)  // 0 means no specific default; ceph will use size-size/2
 OPTION(osd_pool_default_pg_num, OPT_INT, 8) // number of PGs for new pools. Configure in global or mon section of ceph.conf
index b9e69a040cbf070f777e8f7fe0614a4d6c6ae79d..3ff0d660a2b1487de7770ea6236eefe84fbeb321 100644 (file)
@@ -2784,11 +2784,19 @@ int OSDMonitor::prepare_new_pool(string& name, uint64_t auid, int crush_ruleset,
 
   pi->size = g_conf->osd_pool_default_size;
   pi->min_size = g_conf->get_osd_pool_default_min_size();
-  if (crush_ruleset >= 0)
+  if (crush_ruleset >= 0) {
     pi->crush_ruleset = crush_ruleset;
-  else
-    pi->crush_ruleset =
-      CrushWrapper::get_osd_pool_default_crush_replicated_ruleset(g_ceph_context);
+  } else {
+    switch(pool_type) {
+    case pg_pool_t::TYPE_REPLICATED:
+      pi->crush_ruleset =
+       CrushWrapper::get_osd_pool_default_crush_replicated_ruleset(g_ceph_context);
+      break;
+    case pg_pool_t::TYPE_ERASURE:
+      pi->crush_ruleset = g_conf->osd_pool_default_crush_erasure_ruleset;
+      break;
+    }
+  }
   pi->object_hash = CEPH_STR_HASH_RJENKINS;
   pi->set_pg_num(pg_num ? pg_num : g_conf->osd_pool_default_pg_num);
   pi->set_pgp_num(pgp_num ? pgp_num : g_conf->osd_pool_default_pgp_num);
index 6fb81b7019ea427fab29463913869a5e3f74ccfd..c3c07ccb8d004afa854f44dfc0163b572e35e06b 100755 (executable)
@@ -81,6 +81,14 @@ run_mon --osd_pool_default_erasure_code_properties 1
 ./ceph osd pool create poolA 12 12 erasure 2>&1 | grep 'must be a JSON object'
 kill_mon
 
+# explicitly set the default erasure crush rule
+expected=88
+run_mon --osd_pool_default_crush_erasure_ruleset $expected
+./ceph --format json osd dump | grep '"crush_ruleset":'$expected && exit 1
+./ceph osd pool create pool_erasure 12 12 erasure
+./ceph --format json osd dump | grep '"crush_ruleset":'$expected
+kill_mon
+
 expected='"foo":"bar"'
 # osd_pool_default_erasure_code_properties is JSON
 run_mon --osd_pool_default_erasure_code_properties "{$expected}"