]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: maintain missing_loc_sources
authorSage Weil <sage@newdream.net>
Tue, 27 Mar 2012 22:02:51 +0000 (15:02 -0700)
committerSage Weil <sage@newdream.net>
Tue, 27 Mar 2012 22:02:51 +0000 (15:02 -0700)
This is a superset of all missing_loc values... everywhere we might
pull an object from, or are currently pulling from.  Initially it's the
union, but as missing_loc shrinks it may contain peers that are no longer
in missing_loc.

Signed-off-by: Sage Weil <sage@newdream.net>
src/osd/PG.cc
src/osd/PG.h

index 1516fe20555942bc1a4271061aea38f8a0ad23fb..35d30f730244d7587b726a67717b819a5a498d6d 100644 (file)
@@ -556,6 +556,7 @@ bool PG::search_for_missing(const pg_info_t &oinfo, const pg_missing_t *omissing
       }
       stats_updated = true;
       missing_loc[soid].insert(fromosd);
+      missing_loc_sources.insert(fromosd);
     }
     else {
       ml->second.insert(fromosd);
@@ -894,6 +895,8 @@ void PG::clear_primary_state()
   finish_sync_event = 0;  // so that _finish_recvoery doesn't go off in another thread
 
   missing_loc.clear();
+  missing_loc_sources.clear();
+
   log.reset_recovery_pointers();
 
   scrub_reserved_peers.clear();
@@ -2811,6 +2814,7 @@ void PG::repair_object(const hobject_t& soid, ScrubMap::object *po, int bad_peer
 
     missing.add(soid, oi.version, eversion_t());
     missing_loc[soid].insert(ok_peer);
+    missing_loc_sources.insert(ok_peer);
 
     log.last_requested = 0;
   }
index 8d56ddeec8f9f337da75a4880d6345c199424e89..9f50ed31366063002e11410e30c5b540f70fbf82 100644 (file)
@@ -459,6 +459,7 @@ public:
   OndiskLog   ondisklog;
   pg_missing_t     missing;
   map<hobject_t, set<int> > missing_loc;
+  set<int> missing_loc_sources;           // superset of missing_loc locations
   
   interval_set<snapid_t> snap_collections;
   map<epoch_t,Interval> past_intervals;