From 3e2ba484adaec985a557da5e8aa7ae55eaa31137 Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Thu, 28 Oct 2021 22:34:40 +0000 Subject: [PATCH] mon: osdmon: allow users to enter range blocklists. Signed-off-by: Greg Farnum (cherry picked from commit 93617f7f4c6ba3463ab4c6e2df3cc2df9b00fc12) --- src/include/ceph_features.h | 3 ++- src/mon/OSDMonitor.cc | 25 ++++++++++++++++++++----- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/include/ceph_features.h b/src/include/ceph_features.h index ab05205c1e51d..1287d39431c9e 100644 --- a/src/include/ceph_features.h +++ b/src/include/ceph_features.h @@ -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 diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 14b7a18f98166..db5ea6929de01 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -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, -- 2.39.5