From: songbaisen Date: Mon, 25 Jan 2016 06:17:50 +0000 (+0800) Subject: Mon: When set pool crush rule should consider the pool size. X-Git-Tag: v10.0.4~133^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F7341%2Fhead;p=ceph.git Mon: When set pool crush rule should consider the pool size. Fixes: #14495 Signed-off-by: song baisen --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index d63078eda98e..3acd29a9c14f 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -4955,6 +4955,19 @@ int OSDMonitor::prepare_command_pool_set(map &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" ||