From 3c507667b00bdb5002da009b0712091c3225f2f2 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 23 Jul 2015 16:31:03 -0400 Subject: [PATCH] osd/ReplicatedPG: dynamically vary sort order for backfill sets and maps Reset the map and set so that the comparator matches the sort order at the start of each backfill. Signed-off-by: Sage Weil --- src/osd/ReplicatedPG.cc | 15 ++++++++++++--- src/osd/ReplicatedPG.h | 4 ++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 6726328c5bdd9..8a74c691961e9 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -1216,6 +1216,8 @@ ReplicatedPG::ReplicatedPG(OSDService *o, OSDMapRef curmap, _pool.info, curmap, this, coll_t(p), o->store, cct)), object_contexts(o->cct, g_conf->osd_pg_object_context_cache_count), snapset_contexts_lock("ReplicatedPG::snapset_contexts"), + backfills_in_flight(hobject_t::Comparator(true)), + pending_backfill_updates(hobject_t::Comparator(true)), new_backfill(false), temp_seq(0), snap_trimmer_machine(this) @@ -8997,7 +8999,7 @@ void ReplicatedPG::_clear_recovery_state() recovering_oids.clear(); #endif last_backfill_started = hobject_t(); - set::iterator i = backfills_in_flight.begin(); + set::iterator i = backfills_in_flight.begin(); while (i != backfills_in_flight.end()) { assert(recovering.count(*i)); backfills_in_flight.erase(i++); @@ -9655,6 +9657,12 @@ int ReplicatedPG::recover_backfill( } backfill_info.reset(last_backfill_started, get_sort_bitwise()); + + // initialize comparators + backfills_in_flight = set( + hobject_t::Comparator(get_sort_bitwise())); + pending_backfill_updates = map( + hobject_t::Comparator(get_sort_bitwise())); } for (set::iterator i = backfill_targets.begin(); @@ -9890,7 +9898,7 @@ int ReplicatedPG::recover_backfill( pgbackend->run_recovery_op(h, cct->_conf->osd_recovery_op_priority); dout(5) << "backfill_pos is " << backfill_pos << dendl; - for (set::iterator i = backfills_in_flight.begin(); + for (set::iterator i = backfills_in_flight.begin(); i != backfills_in_flight.end(); ++i) { dout(20) << *i << " is still in flight" << dendl; @@ -9900,7 +9908,8 @@ int ReplicatedPG::recover_backfill( backfill_pos : *(backfills_in_flight.begin()); hobject_t new_last_backfill = earliest_backfill(); dout(10) << "starting new_last_backfill at " << new_last_backfill << dendl; - for (map::iterator i = pending_backfill_updates.begin(); + for (map::iterator i = + pending_backfill_updates.begin(); i != pending_backfill_updates.end() && cmp(i->first, next_backfill_to_complete, get_sort_bitwise()) < 0; pending_backfill_updates.erase(i++)) { diff --git a/src/osd/ReplicatedPG.h b/src/osd/ReplicatedPG.h index 80ebb280be487..206e09c544236 100644 --- a/src/osd/ReplicatedPG.h +++ b/src/osd/ReplicatedPG.h @@ -1074,8 +1074,8 @@ protected: * - are not included in pg stats (yet) * - have their stats in pending_backfill_updates on the primary */ - set backfills_in_flight; - map pending_backfill_updates; + set backfills_in_flight; + map pending_backfill_updates; void dump_recovery_info(Formatter *f) const { f->open_array_section("backfill_targets"); -- 2.39.5