]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: osdmon: allow users to enter range blocklists.
authorGreg Farnum <gfarnum@redhat.com>
Thu, 28 Oct 2021 22:34:40 +0000 (22:34 +0000)
committerGreg Farnum <gfarnum@redhat.com>
Tue, 31 May 2022 23:18:16 +0000 (23:18 +0000)
Signed-off-by: Greg Farnum <gfarnum@redhat.com>
(cherry picked from commit 93617f7f4c6ba3463ab4c6e2df3cc2df9b00fc12)

src/include/ceph_features.h
src/mon/OSDMonitor.cc

index ab05205c1e51df475a9b78ae33abeb1a9f0d091c..1287d39431c9e372a339da94920118a96b479e55 100644 (file)
@@ -133,7 +133,7 @@ DEFINE_CEPH_FEATURE(32, 3, STRETCH_MODE)
 DEFINE_CEPH_FEATURE_RETIRED(33, 1, MON_SCRUB, JEWEL, LUMINOUS)
 DEFINE_CEPH_FEATURE(33, 3, SERVER_QUINCY)
 DEFINE_CEPH_FEATURE_RETIRED(34, 1, OSD_PACKED_RECOVERY, JEWEL, LUMINOUS)
-// available
+DEFINE_CEPH_FEATURE(34, 3, RANGE_BLOCKLIST)
 DEFINE_CEPH_FEATURE(35, 1, OSD_CACHEPOOL)    // 3.14
 DEFINE_CEPH_FEATURE(36, 1, CRUSH_V2)         // 3.14
 DEFINE_CEPH_FEATURE(37, 1, EXPORT_PEER)      // 3.14
@@ -249,6 +249,7 @@ DEFINE_CEPH_FEATURE_DEPRECATED(63, 1, RESERVED_BROKEN, LUMINOUS) // client-facin
         CEPH_FEATUREMASK_SERVER_PACIFIC | \
         CEPH_FEATURE_OSD_FIXED_COLLECTION_LIST | \
         CEPH_FEATUREMASK_SERVER_QUINCY | \
+        CEPH_FEATURE_RANGE_BLOCKLIST | \
         0ULL)
 
 #define CEPH_FEATURES_SUPPORTED_DEFAULT  CEPH_FEATURES_ALL
index 14b7a18f981665745683dfcd06ae1c30537e00bf..db5ea6929de01de7756c649813e6269507aef644 100644 (file)
@@ -12696,7 +12696,12 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
       goto reply;
     }
     else {
-      if (!addr.is_cidr()) {
+      if (addr.is_cidr()) {
+       err = check_cluster_features(CEPH_FEATUREMASK_RANGE_BLOCKLIST, ss);
+       if (err) {
+         goto reply;
+       }
+      } else {
        if (osdmap.require_osd_release >= ceph_release_t::nautilus) {
          // always blocklist type ANY
          addr.set_type(entity_addr_t::TYPE_ANY);
@@ -12727,9 +12732,16 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
            ob.erase(it);
          }
        };
-       add_to_pending_blocklists(pending_inc.new_blocklist,
-                                 pending_inc.old_blocklist,
-                                 addr, expires);
+       if (addr.is_cidr()) {
+         add_to_pending_blocklists(pending_inc.new_range_blocklist,
+                                   pending_inc.old_range_blocklist,
+                                   addr, expires);
+
+       } else {
+         add_to_pending_blocklists(pending_inc.new_blocklist,
+                                   pending_inc.old_blocklist,
+                                   addr, expires);
+       }
 
        ss << "blocklisting " << addr << " until " << expires << " (" << d << " sec)";
        getline(ss, rs);
@@ -12753,7 +12765,10 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op,
        };
        if (maybe_rm_from_pending_blocklists(addr, osdmap.blocklist,
                                             pending_inc.old_blocklist,
-                                            pending_inc.new_blocklist)) {
+                                            pending_inc.new_blocklist) ||
+           maybe_rm_from_pending_blocklists(addr, osdmap.range_blocklist,
+                                            pending_inc.old_range_blocklist,
+                                            pending_inc.new_range_blocklist)) {
          ss << "un-blocklisting " << addr;
          getline(ss, rs);
          wait_for_finished_proposal(op, new Monitor::C_Command(mon, op, 0, rs,