If there is a pgid that passes coll_t::is_pg() but there is no head, we
will populate the pgs map but then fail later when we try to do
read_state. This is a side-effect of
55f8579.
Take explicit note of _head collections we see, and then warn when we
find stray snap collections.
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Samuel Just <sam.just@inktank.com>
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();
continue;
}
pgs[pgid];
+ head_pgs.insert(pgid);
}
for (map<pg_t, interval_set<snapid_t> >::iterator i = pgs.begin();
++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;