From fd4a577317b7bb84168afca2a574513c0d823aac 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) Conflicts: src/include/ceph_features.h Signed-off-by: Greg Farnum --- 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 f97440b54f50f..39a32027cd309 100644 --- a/src/include/ceph_features.h +++ b/src/include/ceph_features.h @@ -132,7 +132,7 @@ DEFINE_CEPH_FEATURE(32, 3, STRETCH_MODE) DEFINE_CEPH_FEATURE_RETIRED(33, 1, MON_SCRUB, JEWEL, LUMINOUS) // available 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 @@ -248,6 +248,7 @@ DEFINE_CEPH_FEATURE_DEPRECATED(63, 1, RESERVED_BROKEN, LUMINOUS) // client-facin CEPH_FEATUREMASK_OSD_REPOP_MLCOD | \ CEPH_FEATUREMASK_SERVER_PACIFIC | \ CEPH_FEATURE_OSD_FIXED_COLLECTION_LIST | \ + 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 ea13cfbba93b1..a26b23d782381 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -12692,7 +12692,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); @@ -12724,9 +12729,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); @@ -12750,7 +12762,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