]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
OSD::load_pgs: first scan colls before initing PGs
authorSamuel Just <sam.just@inktank.com>
Thu, 7 Feb 2013 21:34:47 +0000 (13:34 -0800)
committerSamuel Just <sam.just@inktank.com>
Fri, 8 Feb 2013 00:16:01 +0000 (16:16 -0800)
Backport: bobtail
Signed-off-by: Samuel Just <sam.just@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
src/osd/OSD.cc

index 6247c40a4c5369a9d16b9865f5e1b44cd018a6b9..00e138ea22f6bae84a41c7b6bddbef223a9c137d 100644 (file)
@@ -1513,6 +1513,7 @@ void OSD::load_pgs()
     derr << "failed to list pgs: " << cpp_strerror(-r) << dendl;
   }
 
+  map<pg_t, interval_set<snapid_t> > pgs;
   for (vector<coll_t>::iterator it = ls.begin();
        it != ls.end();
        it++) {
@@ -1546,8 +1547,16 @@ void OSD::load_pgs()
     if (snap != CEPH_NOSNAP) {
       dout(10) << "load_pgs skipping snapped dir " << *it
               << " (pg " << pgid << " snap " << snap << ")" << dendl;
+      pgs[pgid].insert(snap);
       continue;
     }
+    pgs[pgid];
+  }
+
+  for (map<pg_t, interval_set<snapid_t> >::iterator i = pgs.begin();
+       i != pgs.end();
+       ++i) {
+    pg_t pgid(i->first);
 
     if (!osdmap->have_pg_pool(pgid.pool())) {
       dout(10) << __func__ << ": skipping PG " << pgid << " because we don't have pool "
@@ -1562,7 +1571,7 @@ void OSD::load_pgs()
     }
 
     bufferlist bl;
-    epoch_t map_epoch = PG::peek_map_epoch(store, *it, &bl);
+    epoch_t map_epoch = PG::peek_map_epoch(store, coll_t(pgid), &bl);
 
     PG *pg = _open_lock_pg(map_epoch == 0 ? osdmap : service.get_map(map_epoch), pgid);