From cb17c5fc68843a9c1181f955fe00ac6522481316 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Tue, 29 Jul 2008 09:40:13 -0700 Subject: [PATCH] osd: ignore remove request if pg has changed since request was sent --- src/osd/OSD.cc | 15 ++++++++++----- src/osd/PG.cc | 2 +- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/src/osd/OSD.cc b/src/osd/OSD.cc index d31b71120fafa..f33b9647fa2e8 100644 --- a/src/osd/OSD.cc +++ b/src/osd/OSD.cc @@ -2666,11 +2666,16 @@ void OSD::handle_pg_remove(MOSDPGRemove *m) } pg = _lookup_lock_pg(pgid); - - dout(10) << *pg << " removing." << dendl; - assert(pg->get_role() == -1); - - _remove_unlock_pg(pg); + if (pg->info.history.same_since <= m->get_epoch()) { + dout(10) << *pg << " removing." << dendl; + assert(pg->get_role() == -1); + assert(pg->get_primary() == m->get_source().num()); + _remove_unlock_pg(pg); + } else { + dout(10) << *pg << " ignoring remove request, pg changed in epoch " + << pg->info.history.same_since << " > " << m->get_epoch() << dendl; + pg->unlock(); + } } delete m; diff --git a/src/osd/PG.cc b/src/osd/PG.cc index 3558014c73300..a1f8bb348dff1 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -1102,7 +1102,7 @@ void PG::purge_strays() MOSDPGRemove *m = new MOSDPGRemove(osd->osdmap->get_epoch(), ls); osd->messenger->send_message(m, osd->osdmap->get_inst(*p)); } else { - dout(10) << "not sending PGRemote to down osd" << *p << dendl; + dout(10) << "not sending PGRemove to down osd" << *p << dendl; } peer_info.erase(*p); } -- 2.39.5