From 2d8753f4fe5db5a6f9eaba4fa19abb048be4e6b6 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 22 Nov 2021 18:46:13 -0500 Subject: [PATCH] mon/OSDMonitor: disallow setting pg_num < min or > max Signed-off-by: Sage Weil --- qa/workunits/mon/pool_ops.sh | 4 ++++ src/mon/OSDMonitor.cc | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/qa/workunits/mon/pool_ops.sh b/qa/workunits/mon/pool_ops.sh index 9a98eab8b13..23bb3c0beda 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 00ae7ad9f55..a565ddac95f 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()); -- 2.39.5