diff options
author | Samuel Just <sam.just@inktank.com> | 2014-03-15 17:58:35 -0700 |
---|---|---|
committer | Samuel Just <sam.just@inktank.com> | 2014-03-15 17:58:37 -0700 |
commit | 04de781765dd5ac0e28dd1a43cfe85020c0854f8 (patch) | |
tree | 54d4e6d7953cdb3e8eaf5335783e924a99852359 | |
parent | 4dd94a006237a67bc8db536dcf36a2c038c1dc48 (diff) | |
download | ceph-04de781765dd5ac0e28dd1a43cfe85020c0854f8.tar.gz |
OSD::handle_pg_query: on dne pg, send lb=hobject_t() if deleting
We will set lb=hobject_t() if we resurrect the pg. In that case,
we need to have sent that to the primary before hand. If we
finish the removal before the pg is recreated, we'll just end
up backfilling it, which is ok since the pg doesn't exist anyway.
Fixes: #7740
Signed-off-by: Samuel Just <sam.just@inktank.com>
-rw-r--r-- | src/osd/OSD.cc | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 54e0febeeb1..60a54a620b9 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -6938,6 +6938,11 @@ void OSD::handle_pg_query(OpRequestRef op) dout(10) << " pg " << pgid << " dne" << dendl; pg_info_t empty(spg_t(pgid.pgid, it->second.to)); + /* This is racy, but that should be ok: if we complete the deletion + * before the pg is recreated, we'll just start it off backfilling + * instead of just empty */ + if (service.deleting_pgs.lookup(pgid)) + empty.last_backfill = hobject_t(); if (it->second.type == pg_query_t::LOG || it->second.type == pg_query_t::FULLLOG) { ConnectionRef con = service.get_con_osd_cluster(from, osdmap->get_epoch()); |