]> 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)
committerSage Weil <sage@inktank.com>
Sat, 9 Feb 2013 17:37:33 +0000 (09:37 -0800)
Backport: bobtail
Signed-off-by: Samuel Just <sam.just@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
src/osd/OSD.cc

index 7b9c9235476d314c275d7e7749d29e1e18e4cf5e..8d10734552a182146e72c3324f304c7b4391150d 100644 (file)
@@ -1518,6 +1518,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++) {
@@ -1551,8 +1552,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 "
@@ -1567,7 +1576,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);