]> 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>
Tue, 19 Mar 2013 17:43:11 +0000 (10:43 -0700)
Backport: bobtail
Signed-off-by: Samuel Just <sam.just@inktank.com>
Reviewed-by: Sage Weil <sage@inktank.com>
(cherry picked from commit 073f58ede2e473af91f76d01679631c169274af7)

src/osd/OSD.cc

index c0e7d2335e2fd76f3f37a52553f57a5f51d3ad9c..4e44207ddc5344a1b5d36fee03e58347b0caaa75 100644 (file)
@@ -1483,6 +1483,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++) {
@@ -1516,8 +1517,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 "
@@ -1532,7 +1541,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);