From: Sage Weil Date: Wed, 5 Dec 2018 22:23:12 +0000 (-0600) Subject: mon/OSDMonitor: use ANY addr type for blacklisting X-Git-Tag: v14.1.0~484^2~66 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0610e562654b35ed978dfb9689a6061167dadd33;p=ceph.git mon/OSDMonitor: use ANY addr type for blacklisting Client addresses are untyped in that they can connect to v1 or v2 server endpoints, so blacklist them as TYPE_ANY. Signed-off-by: Sage Weil --- diff --git a/src/mon/OSDMonitor.cc b/src/mon/OSDMonitor.cc index 9f7f176aabe..51cbf07e7b9 100644 --- a/src/mon/OSDMonitor.cc +++ b/src/mon/OSDMonitor.cc @@ -1387,6 +1387,12 @@ void OSDMonitor::encode_pending(MonitorDBStore::TransactionRef t) pending_inc.new_pools[i.first].flags |= pg_pool_t::FLAG_CREATING; } } + // adjust blacklist items to all be TYPE_ANY + for (auto& i : tmp.blacklist) { + auto a = i.first; + a.set_type(entity_addr_t::TYPE_ANY); + pending_inc.new_blacklist[a] = i.second; + } } } @@ -4007,14 +4013,24 @@ int OSDMonitor::get_version_full(version_t ver, uint64_t features, epoch_t OSDMonitor::blacklist(const entity_addrvec_t& av, utime_t until) { dout(10) << "blacklist " << av << " until " << until << dendl; - for (auto& a : av.v) { + for (auto a : av.v) { + if (osdmap.require_osd_release >= CEPH_RELEASE_NAUTILUS) { + a.set_type(entity_addr_t::TYPE_ANY); + } else { + a.set_type(entity_addr_t::TYPE_LEGACY); + } pending_inc.new_blacklist[a] = until; } return pending_inc.epoch; } -epoch_t OSDMonitor::blacklist(const entity_addr_t& a, utime_t until) +epoch_t OSDMonitor::blacklist(entity_addr_t a, utime_t until) { + if (osdmap.require_osd_release >= CEPH_RELEASE_NAUTILUS) { + a.set_type(entity_addr_t::TYPE_ANY); + } else { + a.set_type(entity_addr_t::TYPE_LEGACY); + } dout(10) << "blacklist " << a << " until " << until << dendl; pending_inc.new_blacklist[a] = until; return pending_inc.epoch; @@ -11372,6 +11388,13 @@ bool OSDMonitor::prepare_command_impl(MonOpRequestRef op, goto reply; } else { + if (osdmap.require_osd_release >= CEPH_RELEASE_NAUTILUS) { + // always blacklist type ANY + addr.set_type(entity_addr_t::TYPE_ANY); + } else { + addr.set_type(entity_addr_t::TYPE_LEGACY); + } + string blacklistop; cmd_getval(cct, cmdmap, "blacklistop", blacklistop); if (blacklistop == "add") { diff --git a/src/mon/OSDMonitor.h b/src/mon/OSDMonitor.h index 29b1a1065ba..9055ec45260 100644 --- a/src/mon/OSDMonitor.h +++ b/src/mon/OSDMonitor.h @@ -673,7 +673,7 @@ public: int get_full_from_pinned_map(version_t ver, bufferlist& bl); epoch_t blacklist(const entity_addrvec_t& av, utime_t until); - epoch_t blacklist(const entity_addr_t& a, utime_t until); + epoch_t blacklist(entity_addr_t a, utime_t until); void dump_info(Formatter *f); int dump_osd_metadata(int osd, Formatter *f, ostream *err);