summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Just <sam.just@inktank.com>2013-02-07 13:34:47 -0800
committerSage Weil <sage@inktank.com>2013-02-09 09:37:33 -0800
commit073f58ede2e473af91f76d01679631c169274af7 (patch)
treef520086a5bc1dd4cb730eea8c649c8a1dbc59865
parent3cf3710be0b4cccc8de152a97be50d983c35116d (diff)
downloadceph-073f58ede2e473af91f76d01679631c169274af7.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 7b9c9235476..8d10734552a 100644
--- a/src/osd/OSD.cc
+++ b/src/osd/OSD.cc
@@ -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);