From: Nathan Cutler Date: Sat, 13 Jun 2015 19:33:25 +0000 (+0200) Subject: osd_types.cc: replace count with iterator in add_next_event function X-Git-Tag: v9.0.3~98^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=01b2e1fdb720cbc4af9338184c4c18d294a70eff;p=ceph.git osd_types.cc: replace count with iterator in add_next_event function Performance optimization: count() and then operator[] duplicates the rbtree lookup. http://tracker.ceph.com/issues/432 Refs: #432 Signed-off-by: Nathan Cutler --- diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc index 74c733e0290..36d74395a82 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -3385,22 +3385,28 @@ eversion_t pg_missing_t::have_old(const hobject_t& oid) const void pg_missing_t::add_next_event(const pg_log_entry_t& e) { if (e.is_update()) { + map::iterator missing_it; + missing_it = missing.find(e.soid); + bool is_missing_divergent_item = missing_it != missing.end(); if (e.prior_version == eversion_t() || e.is_clone()) { // new object. //assert(missing.count(e.soid) == 0); // might already be missing divergent item. - if (missing.count(e.soid)) // already missing divergent item - rmissing.erase(missing[e.soid].need.version); - missing[e.soid] = item(e.version, eversion_t()); // .have = nil - } else if (missing.count(e.soid)) { + if (is_missing_divergent_item) { // use iterator + rmissing.erase((missing_it->second).need.version); + missing_it->second = item(e.version, eversion_t()); // .have = nil + } else // create new element in missing map + missing[e.soid] = item(e.version, eversion_t()); // .have = nil + } else if (is_missing_divergent_item) { // already missing (prior). //assert(missing[e.soid].need == e.prior_version); - rmissing.erase(missing[e.soid].need.version); - missing[e.soid].need = e.version; // leave .have unchanged. + rmissing.erase((missing_it->second).need.version); + (missing_it->second).need = e.version; // leave .have unchanged. } else if (e.is_backlog()) { // May not have prior version assert(0 == "these don't exist anymore"); } else { // not missing, we must have prior_version (if any) + assert(!is_missing_divergent_item); missing[e.soid] = item(e.version, e.prior_version); } rmissing[e.version.version] = e.soid;