summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Just <sam.just@inktank.com>2013-02-07 13:34:47 -0800
committerSamuel Just <sam.just@inktank.com>2013-02-07 16:16:01 -0800
commit55f857962fc584e7e95babbd10a3c53aab63060a (patch)
tree2aeb1368615196d93de6e2b96df00fd41ddd9503
parent70532d198539f94067e53ef48dd7d1f5114fa27d (diff)
downloadceph-55f857962fc584e7e95babbd10a3c53aab63060a.tar.gz
OSD::load_pgs: first scan colls before initing PGs
Backport: bobtail Signed-off-by: Samuel Just <sam.just@inktank.com> Reviewed-by: Sage Weil <sage@inktank.com>
-rw-r--r--src/osd/OSD.cc11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc
index 6247c40a4c5..00e138ea22f 100644
--- a/src/osd/OSD.cc
+++ b/src/osd/OSD.cc
@@ -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);