]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/OSDMonitor : error out if pgp_num > pg_num
authorxinxin shu <xinxin.shu@intel.com>
Mon, 15 Jun 2015 23:31:28 +0000 (07:31 +0800)
committerxinxin shu <xinxin.shu@intel.com>
Tue, 16 Jun 2015 01:28:41 +0000 (09:28 +0800)
Fixes : #12025

Signed-off-by: xinxin shu <xinxin.shu@intel.com>
src/mon/OSDMonitor.cc

index ef68d4689c23f9ed2e1244b83fcff5834677c1c2..6b82975e00c76fe2e24b0f7b28b75a7d3643ac7d 100644 (file)
@@ -4326,6 +4326,12 @@ int OSDMonitor::prepare_new_pool(string& name, uint64_t auid,
 {
   if (name.length() == 0)
     return -EINVAL;
+  if (pg_num == 0)
+    pg_num = g_conf->osd_pool_default_pg_num;
+  if (pgp_num == 0)
+    pgp_num = g_conf->osd_pool_default_pgp_num;
+  if (pgp_num > pg_num)
+    return -ERANGE;
   int r;
   r = prepare_pool_crush_ruleset(pool_type, erasure_code_profile,
                                 crush_ruleset_name, &crush_ruleset, ss);
@@ -4368,8 +4374,8 @@ int OSDMonitor::prepare_new_pool(string& name, uint64_t auid,
   pi->crush_ruleset = crush_ruleset;
   pi->expected_num_objects = expected_num_objects;
   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);
+  pi->set_pg_num(pg_num);
+  pi->set_pgp_num(pgp_num);
   pi->last_change = pending_inc.epoch;
   pi->auid = auid;
   pi->erasure_code_profile = erasure_code_profile;