From: Sage Weil Date: Mon, 22 Nov 2021 23:46:13 +0000 (-0500) Subject: mon/OSDMonitor: disallow setting pg_num < min or > max X-Git-Tag: v17.1.0~123^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=2d8753f4fe5db5a6f9eaba4fa19abb048be4e6b6;p=ceph.git mon/OSDMonitor: disallow setting pg_num < min or > max Signed-off-by: Sage Weil --- diff --git a/qa/workunits/mon/pool_ops.sh b/qa/workunits/mon/pool_ops.sh index 9a98eab8b135..23bb3c0beda7 100755 --- a/qa/workunits/mon/pool_ops.sh +++ b/qa/workunits/mon/pool_ops.sh @@ -50,6 +50,10 @@ ceph osd pool set $TEST_POOL pg_num_min 2 ceph osd pool get $TEST_POOL pg_num_min | grep 2 ceph osd pool set $TEST_POOL pg_num_max 33 ceph osd pool get $TEST_POOL pg_num_max | grep 33 +expect_false ceph osd pool set $TEST_POOL pg_num_min 9 +expect_false ceph osd pool set $TEST_POOL pg_num_max 7 +expect_false ceph osd pool set $TEST_POOL pg_num 1 +expect_false ceph osd pool set $TEST_POOL pg_num 44 ceph osd pool set $TEST_POOL pg_num_min 0 expect_false ceph osd pool get $TEST_POOL pg_num_min ceph osd pool set $TEST_POOL pg_num_max 0 diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 00ae7ad9f55f..a565ddac95f2 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -8353,6 +8353,19 @@ int OSDMonitor::prepare_command_pool_set(const cmdmap_t& cmdmap, return -EPERM; } } + int64_t pg_min = 0, pg_max = 0; + p.opts.get(pool_opts_t::PG_NUM_MIN, &pg_min); + p.opts.get(pool_opts_t::PG_NUM_MAX, &pg_max); + if (pg_min && n < pg_min) { + ss << "specified pg_num " << n + << " < pg_num_min " << pg_min; + return -EINVAL; + } + if (pg_max && n > pg_max) { + ss << "specified pg_num " << n + << " < pg_num_max " << pg_max; + return -EINVAL; + } if (osdmap.require_osd_release < ceph_release_t::nautilus) { // pre-nautilus osdmap format; increase pg_num directly assert(n > (int)p.get_pg_num());