diff options
author | Sage Weil <sage@inktank.com> | 2013-02-09 09:41:02 -0800 |
---|---|---|
committer | Sage Weil <sage@inktank.com> | 2013-02-09 09:41:02 -0800 |
commit | 6d199e22fbe390bc2d6c4e1cd0c3fa319dc7a577 (patch) | |
tree | 6f49b0608b5014e1f56f9791d6d3705e577e4e93 | |
parent | ead68b47f44deee4183aabf4418c258f77c19202 (diff) | |
parent | b19b6dced85617d594c15631571202aab2f94ae8 (diff) | |
download | ceph-6d199e22fbe390bc2d6c4e1cd0c3fa319dc7a577.tar.gz |
Merge branch 'next'
-rw-r--r-- | src/osd/OSD.cc | 65 |
1 files changed, 38 insertions, 27 deletions
diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 669729f05ff..1785678ced4 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -1518,44 +1518,48 @@ void OSD::load_pgs() derr << "failed to list pgs: " << cpp_strerror(-r) << dendl; } + set<pg_t> head_pgs; map<pg_t, interval_set<snapid_t> > pgs; for (vector<coll_t>::iterator it = ls.begin(); it != ls.end(); it++) { pg_t pgid; snapid_t snap; - if (!it->is_pg(pgid, snap)) { - if (it->is_temp(pgid)) - clear_temp(store, *it); - dout(10) << "load_pgs skipping non-pg " << *it << dendl; - if (it->is_temp(pgid)) { - clear_temp(store, *it); - continue; - } - uint64_t seq; - if (it->is_removal(&seq, &pgid)) { - if (seq >= next_removal_seq) - next_removal_seq = seq + 1; - dout(10) << "queueing coll " << *it << " for removal, seq is " - << seq << "pgid is " << pgid << dendl; - boost::tuple<coll_t, SequencerRef, DeletingStateRef> *to_queue = - new boost::tuple<coll_t, SequencerRef, DeletingStateRef>; - to_queue->get<0>() = *it; - to_queue->get<1>() = service.osr_registry.lookup_or_create( - pgid, stringify(pgid)); - to_queue->get<2>() = service.deleting_pgs.lookup_or_create(pgid); - remove_wq.queue(to_queue); - continue; + + if (it->is_temp(pgid)) { + dout(10) << "load_pgs " << *it << " clearing temp" << dendl; + clear_temp(store, *it); + continue; + } + + if (it->is_pg(pgid, snap)) { + if (snap != CEPH_NOSNAP) { + dout(10) << "load_pgs skipping snapped dir " << *it + << " (pg " << pgid << " snap " << snap << ")" << dendl; + pgs[pgid].insert(snap); + } else { + pgs[pgid]; + head_pgs.insert(pgid); } continue; } - if (snap != CEPH_NOSNAP) { - dout(10) << "load_pgs skipping snapped dir " << *it - << " (pg " << pgid << " snap " << snap << ")" << dendl; - pgs[pgid].insert(snap); + + uint64_t seq; + if (it->is_removal(&seq, &pgid)) { + if (seq >= next_removal_seq) + next_removal_seq = seq + 1; + dout(10) << "load_pgs queueing " << *it << " for removal, seq is " + << seq << " pgid is " << pgid << dendl; + boost::tuple<coll_t, SequencerRef, DeletingStateRef> *to_queue = + new boost::tuple<coll_t, SequencerRef, DeletingStateRef>; + to_queue->get<0>() = *it; + to_queue->get<1>() = service.osr_registry.lookup_or_create(pgid, stringify(pgid)); + to_queue->get<2>() = service.deleting_pgs.lookup_or_create(pgid); + remove_wq.queue(to_queue); continue; } - pgs[pgid]; + + dout(10) << "load_pgs ignoring unrecognized " << *it << dendl; } for (map<pg_t, interval_set<snapid_t> >::iterator i = pgs.begin(); @@ -1563,6 +1567,12 @@ void OSD::load_pgs() ++i) { pg_t pgid(i->first); + if (!head_pgs.count(pgid)) { + dout(10) << __func__ << ": " << pgid << " has orphan snap collections " << i->second + << " with no head" << dendl; + continue; + } + if (!osdmap->have_pg_pool(pgid.pool())) { dout(10) << __func__ << ": skipping PG " << pgid << " because we don't have pool " << pgid.pool() << dendl; @@ -1575,6 +1585,7 @@ void OSD::load_pgs() continue; } + dout(10) << "pgid " << pgid << " coll " << coll_t(pgid) << dendl; bufferlist bl; epoch_t map_epoch = PG::peek_map_epoch(store, coll_t(pgid), &bl); |