From: Yan, Zheng Date: Wed, 29 May 2019 08:25:28 +0000 (+0800) Subject: mds: fix 'is session in blacklist' check in Server::apply_blacklist() X-Git-Tag: v15.1.0~2522^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0d51266c45f4b2a9b0ab6b34b622dc76fbfd4bd2;p=ceph.git mds: fix 'is session in blacklist' check in Server::apply_blacklist() Blacklist entries are always TYPE_ANY for nautilus+, but client's entity addr type can be legacy. Fixes: http://tracker.ceph.com/issues/40061 Signed-off-by: "Yan, Zheng" --- diff --git a/src/mds/Server.cc b/src/mds/Server.cc index 3cb2f977589c1..fd4b900c56fa6 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -1108,9 +1108,14 @@ void Server::kill_session(Session *session, Context *on_safe) size_t Server::apply_blacklist(const std::set &blacklist) { + bool prenautilus = mds->objecter->with_osdmap( + [&](const OSDMap& o) { + return o.require_osd_release < ceph_release_t::nautilus; + }); + std::vector victims; const auto& sessions = mds->sessionmap.get_sessions(); - for (const auto& p : sessions) { + for (const auto& p : sessions) { if (!p.first.is_client()) { // Do not apply OSDMap blacklist to MDS daemons, we find out // about their death via MDSMap. @@ -1118,8 +1123,19 @@ size_t Server::apply_blacklist(const std::set &blacklist) } Session *s = p.second; - if (blacklist.count(s->info.inst.addr)) { + auto inst_addr = s->info.inst.addr; + // blacklist entries are always TYPE_ANY for nautilus+ + inst_addr.set_type(entity_addr_t::TYPE_ANY); + if (blacklist.count(inst_addr)) { victims.push_back(s); + continue; + } + if (prenautilus) { + // ...except pre-nautilus, they were TYPE_LEGACY + inst_addr.set_type(entity_addr_t::TYPE_LEGACY); + if (blacklist.count(inst_addr)) { + victims.push_back(s); + } } }