From 04de781765dd5ac0e28dd1a43cfe85020c0854f8 Mon Sep 17 00:00:00 2001 From: Samuel Just Date: Sat, 15 Mar 2014 17:58:35 -0700 Subject: [PATCH] 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 --- src/osd/OSD.cc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index 54e0febeeb1d..60a54a620b91 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()); -- 2.47.3