From: Sage Weil Date: Fri, 7 Aug 2015 20:46:50 +0000 (-0400) Subject: osd/osd_types: make pg_missing_t sort order dynamic X-Git-Tag: v9.1.0~346^2~4 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=517921f9ee3e587529769b881b8cecf530645b51;p=ceph.git osd/osd_types: make pg_missing_t sort order dynamic Signed-off-by: Sage Weil --- diff --git a/src/osd/PG.cc b/src/osd/PG.cc index dce03559a4ef..cd75db7a2ed6 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -307,7 +307,7 @@ void PG::proc_replica_log( dout(10) << " peer osd." << from << " now " << oinfo << " " << omissing << dendl; might_have_unfound.insert(from); - for (map::iterator i = omissing.missing.begin(); + for (map::iterator i = omissing.missing.begin(); i != omissing.missing.end(); ++i) { dout(20) << " after missing " << i->first << " need " << i->second.need @@ -464,12 +464,12 @@ void PG::MissingLoc::add_batch_sources_info( const set &sources) { dout(10) << __func__ << ": adding sources in batch " << sources.size() << dendl; - for (map::const_iterator i = needs_recovery_map.begin(); + for (map::const_iterator i = needs_recovery_map.begin(); i != needs_recovery_map.end(); ++i) { missing_loc[i->first].insert(sources.begin(), sources.end()); missing_loc_sources.insert(sources.begin(), sources.end()); - } + } } bool PG::MissingLoc::add_source_info( @@ -481,7 +481,7 @@ bool PG::MissingLoc::add_source_info( { bool found_missing = false; // found items? - for (map::const_iterator p = needs_recovery_map.begin(); + for (map::const_iterator p = needs_recovery_map.begin(); p != needs_recovery_map.end(); ++p) { const hobject_t &soid(p->first); diff --git a/src/osd/PGLog.h b/src/osd/PGLog.h index 2d90c13865db..58995cbd73e1 100644 --- a/src/osd/PGLog.h +++ b/src/osd/PGLog.h @@ -388,9 +388,12 @@ public: //////////////////// get or set missing //////////////////// const pg_missing_t& get_missing() const { return missing; } + void resort_missing(bool sort_bitwise) { + missing.resort(sort_bitwise); + } - void missing_got(map::const_iterator m) { - map::iterator p = missing.missing.find(m->first); + void missing_got(map::const_iterator m) { + map::iterator p = missing.missing.find(m->first); missing.got(p); } @@ -406,8 +409,8 @@ public: missing.add(oid, need, have); } - void missing_rm(map::const_iterator m) { - map::iterator p = missing.missing.find(m->first); + void missing_rm(map::const_iterator m) { + map::iterator p = missing.missing.find(m->first); missing.rm(p); } diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 4f550acfc068..5bcb462986e8 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -711,7 +711,7 @@ int ReplicatedPG::do_command(cmdmap_t cmdmap, ostream& ss, } f->dump_int("num_missing", missing.num_missing()); f->dump_int("num_unfound", get_num_unfound()); - map::const_iterator p = missing.missing.upper_bound(offset); + map::const_iterator p = missing.missing.upper_bound(offset); { f->open_array_section("objects"); int32_t num = 0; @@ -846,7 +846,7 @@ void ReplicatedPG::do_pg_op(OpRequestRef op) } assert(snapid == CEPH_NOSNAP || pg_log.get_missing().missing.empty()); - map::const_iterator missing_iter = + map::const_iterator missing_iter = pg_log.get_missing().missing.lower_bound(current); vector::iterator ls_iter = sentries.begin(); hobject_t _max = hobject_t::get_max(); @@ -1005,7 +1005,7 @@ void ReplicatedPG::do_pg_op(OpRequestRef op) } assert(snapid == CEPH_NOSNAP || pg_log.get_missing().missing.empty()); - map::const_iterator missing_iter = + map::const_iterator missing_iter = pg_log.get_missing().missing.lower_bound(current); vector::iterator ls_iter = sentries.begin(); hobject_t _max = hobject_t::get_max(); @@ -8576,9 +8576,9 @@ void ReplicatedPG::mark_all_unfound_lost(int what) utime_t mtime = ceph_clock_now(cct); info.last_update.epoch = get_osdmap()->get_epoch(); const pg_missing_t &missing = pg_log.get_missing(); - map::const_iterator m = + map::const_iterator m = missing_loc.get_needs_recovery().begin(); - map::const_iterator mend = + map::const_iterator mend = missing_loc.get_needs_recovery().end(); while (m != mend) { const hobject_t &oid(m->first); @@ -9574,7 +9574,7 @@ int ReplicatedPG::recover_replicas(int max, ThreadPool::TPHandle &handle) } dout(10) << __func__ << ": recover_object_replicas(" << soid << ")" << dendl; - map::const_iterator r = m.missing.find(soid); + map::const_iterator r = m.missing.find(soid); started += prep_object_replica_pushes(soid, r->second.need, h); } diff --git a/src/osd/osd_types.cc b/src/osd/osd_types.cc index b256001b345e..5bd4669b2b04 100644 --- a/src/osd/osd_types.cc +++ b/src/osd/osd_types.cc @@ -3389,8 +3389,8 @@ void pg_missing_t::decode(bufferlist::iterator &bl, int64_t pool) if (struct_v < 3) { // Handle hobject_t upgrade - map tmp; - for (map::iterator i = missing.begin(); + map tmp; + for (map::iterator i = missing.begin(); i != missing.end(); ) { if (!i->first.is_max() && i->first.pool == -1) { @@ -3405,7 +3405,7 @@ void pg_missing_t::decode(bufferlist::iterator &bl, int64_t pool) missing.insert(tmp.begin(), tmp.end()); } - for (map::iterator it = missing.begin(); + for (map::iterator it = missing.begin(); it != missing.end(); ++it) rmissing[it->second.need.version] = it->first; @@ -3414,7 +3414,7 @@ void pg_missing_t::decode(bufferlist::iterator &bl, int64_t pool) void pg_missing_t::dump(Formatter *f) const { f->open_array_section("missing"); - for (map::const_iterator p = missing.begin(); p != missing.end(); ++p) { + for (map::const_iterator p = missing.begin(); p != missing.end(); ++p) { f->open_object_section("item"); f->dump_stream("object") << p->first; p->second.dump(f); @@ -3470,7 +3470,7 @@ bool pg_missing_t::is_missing(const hobject_t& oid) const bool pg_missing_t::is_missing(const hobject_t& oid, eversion_t v) const { - map::const_iterator m = missing.find(oid); + map::const_iterator m = missing.find(oid); if (m == missing.end()) return false; const pg_missing_t::item &item(m->second); @@ -3481,7 +3481,7 @@ bool pg_missing_t::is_missing(const hobject_t& oid, eversion_t v) const eversion_t pg_missing_t::have_old(const hobject_t& oid) const { - map::const_iterator m = missing.find(oid); + map::const_iterator m = missing.find(oid); if (m == missing.end()) return eversion_t(); const pg_missing_t::item &item(m->second); @@ -3495,7 +3495,7 @@ 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; + 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()) { @@ -3548,12 +3548,12 @@ void pg_missing_t::add(const hobject_t& oid, eversion_t need, eversion_t have) void pg_missing_t::rm(const hobject_t& oid, eversion_t v) { - std::map::iterator p = missing.find(oid); + std::map::iterator p = missing.find(oid); if (p != missing.end() && p->second.need <= v) rm(p); } -void pg_missing_t::rm(const std::map::iterator &m) +void pg_missing_t::rm(const std::map::iterator &m) { rmissing.erase(m->second.need.version); missing.erase(m); @@ -3561,13 +3561,13 @@ void pg_missing_t::rm(const std::map::iterator p = missing.find(oid); + std::map::iterator p = missing.find(oid); assert(p != missing.end()); assert(p->second.need <= v); got(p); } -void pg_missing_t::got(const std::map::iterator &m) +void pg_missing_t::got(const std::map::iterator &m) { rmissing.erase(m->second.need.version); missing.erase(m); @@ -3579,7 +3579,7 @@ void pg_missing_t::split_into( pg_missing_t *omissing) { unsigned mask = ~((~0)<::iterator i = missing.begin(); + for (map::iterator i = missing.begin(); i != missing.end(); ) { if ((i->first.get_hash() & mask) == child_pgid.m_seed) { diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index 0c3848bec238..2e09e424fea4 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -2493,7 +2493,7 @@ struct pg_missing_t { }; WRITE_CLASS_ENCODER(item) - map missing; // oid -> (need v, have v) + map missing; // oid -> (need v, have v) map rmissing; // v -> oid unsigned int num_missing() const; @@ -2507,9 +2507,9 @@ struct pg_missing_t { void revise_have(hobject_t oid, eversion_t have); void add(const hobject_t& oid, eversion_t need, eversion_t have); void rm(const hobject_t& oid, eversion_t v); - void rm(const std::map::iterator &m); + void rm(const std::map::iterator &m); void got(const hobject_t& oid, eversion_t v); - void got(const std::map::iterator &m); + void got(const std::map::iterator &m); void split_into(pg_t child_pgid, unsigned split_bits, pg_missing_t *omissing); void clear() {