diff options
author | Samuel Just <sam.just@inktank.com> | 2013-02-07 13:34:47 -0800 |
---|---|---|
committer | Samuel Just <sam.just@inktank.com> | 2013-02-07 16:16:01 -0800 |
commit | 55f857962fc584e7e95babbd10a3c53aab63060a (patch) | |
tree | 2aeb1368615196d93de6e2b96df00fd41ddd9503 | |
parent | 70532d198539f94067e53ef48dd7d1f5114fa27d (diff) | |
download | ceph-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.cc | 11 |
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); |