From: Michal Jarzabek Date: Tue, 20 Sep 2016 21:17:04 +0000 (+0100) Subject: osd/PG.cc: prevent repeated searching of map/set X-Git-Tag: v11.1.0~470^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c300da1b0c9749bb19f7656dd8c8411cf9969f54;p=ceph.git osd/PG.cc: prevent repeated searching of map/set Signed-off-by: Michal Jarzabek --- diff --git a/src/osd/PG.cc b/src/osd/PG.cc index c1e2764948d..4352dc717fd 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -486,8 +486,9 @@ bool PG::MissingLoc::readable_with_acting( const hobject_t &hoid, const set &acting) const { if (!needs_recovery(hoid)) return true; - if (!missing_loc.count(hoid)) return false; - const set &locs = missing_loc.find(hoid)->second; + auto missing_loc_entry = missing_loc.find(hoid); + if (missing_loc_entry == missing_loc.end()) return false; + const set &locs = missing_loc_entry->second; dout(10) << __func__ << ": locs:" << locs << dendl; set have_acting; for (set::const_iterator i = locs.begin(); @@ -1781,10 +1782,12 @@ void PG::activate(ObjectStore::Transaction& t, if (!missing.have_missing()) complete_shards.insert(*i); } else { - assert(peer_missing.count(*i)); - missing_loc.add_active_missing(peer_missing[*i]); - if (!peer_missing[*i].have_missing() && peer_info[*i].last_backfill.is_max()) - complete_shards.insert(*i); + auto peer_missing_entry = peer_missing.find(*i); + assert(peer_missing_entry != peer_missing.end()); + missing_loc.add_active_missing(peer_missing_entry->second); + if (!peer_missing_entry->second.have_missing() && + peer_info[*i].last_backfill.is_max()) + complete_shards.insert(*i); } } // If necessary, create might_have_unfound to help us find our unfound objects. @@ -4389,10 +4392,11 @@ bool PG::scrub_process_inconsistent() i != scrubber.authoritative.end(); ++i) { set::iterator j; - - if (scrubber.missing.count(i->first)) { - for (j = scrubber.missing[i->first].begin(); - j != scrubber.missing[i->first].end(); + + auto missing_entry = scrubber.missing.find(i->first); + if (missing_entry != scrubber.missing.end()) { + for (j = missing_entry->second.begin(); + j != missing_entry->second.end(); ++j) { repair_object( i->first,