]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
Mon: When set pool crush rule should consider the pool size. 7341/head
authorsongbaisen <song.baisen@zte.com.cn>
Mon, 25 Jan 2016 06:17:50 +0000 (14:17 +0800)
committersongbaisen <song.baisen@zte.com.cn>
Wed, 27 Jan 2016 02:29:59 +0000 (10:29 +0800)
Fixes: #14495
Signed-off-by: song baisen <song.baisen@zte.com.cn>
src/mon/OSDMonitor.cc

index d63078eda98e5b2002e1c8f58a2fabecfb485680..3acd29a9c14f6fc713a150e82f8651c9bcb310d7 100644 (file)
@@ -4955,6 +4955,19 @@ int OSDMonitor::prepare_command_pool_set(map<string,cmd_vartype> &cmdmap,
       ss << "crush ruleset " << n << " does not exist";
       return -ENOENT;
     }
+    const int64_t poolsize = p.get_size();
+    const int64_t minsize = osdmap.crush->get_rule_mask_min_size(n);
+    if (poolsize < minsize) {
+      ss << "pool size " << poolsize << " is smaller than crush ruleset " 
+         << n << " min size " << minsize;
+      return -EINVAL;
+    }
+    const int64_t maxsize = osdmap.crush->get_rule_mask_max_size(n);
+    if (poolsize > maxsize) {
+      ss << "pool size " << poolsize << " is bigger than crush ruleset " 
+         << n << " max size " << maxsize;
+      return -EINVAL;
+    }
     p.crush_ruleset = n;
   } else if (var == "hashpspool" || var == "nodelete" || var == "nopgchange" ||
             var == "nosizechange" || var == "write_fadvise_dontneed" ||