From: Sage Weil Date: Sat, 9 Feb 2013 08:04:29 +0000 (-0800) Subject: osd: fix load_pgs handling of pg dirs without a head X-Git-Tag: v0.56.4~20 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=0a09be99f3e9d2b68a052ff63ea858a7c8e5626c;p=ceph.git osd: fix load_pgs handling of pg dirs without a head 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 Reviewed-by: Samuel Just (cherry picked from commit 1f80a0b576c0af1931f743ad988b6293cbf2d6d9) --- diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 4e44207ddc53..cd5cd8468711 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -1483,6 +1483,7 @@ void OSD::load_pgs() derr << "failed to list pgs: " << cpp_strerror(-r) << dendl; } + set head_pgs; map > pgs; for (vector::iterator it = ls.begin(); it != ls.end(); @@ -1521,6 +1522,7 @@ void OSD::load_pgs() continue; } pgs[pgid]; + head_pgs.insert(pgid); } for (map >::iterator i = pgs.begin(); @@ -1528,6 +1530,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;