]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon/OSDMonitor: disallow setting pg_num < min or > max
authorSage Weil <sage@newdream.net>
Mon, 22 Nov 2021 23:46:13 +0000 (18:46 -0500)
committerSage Weil <sage@newdream.net>
Mon, 3 Jan 2022 19:12:54 +0000 (14:12 -0500)
Signed-off-by: Sage Weil <sage@newdream.net>
qa/workunits/mon/pool_ops.sh
src/mon/OSDMonitor.cc

index 9a98eab8b13562dbb5632ff438bc3fdb32478907..23bb3c0beda7f33ce5ffedc7b372ce19ce6047a4 100755 (executable)
@@ -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
index 00ae7ad9f55f517fedede57f212a50d0378fc597..a565ddac95f2234a520e0e72f8c31fd1a223a01f 100644 (file)
@@ -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());