From 3051ec214869c6edf104741ebf295b2009020a8a Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 11 Aug 2008 13:26:52 -0700 Subject: [PATCH] osd: remove failed osds from pulling map --- src/osd/ReplicatedPG.cc | 15 ++++++++++++++- src/osd/ReplicatedPG.h | 2 +- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index a704bcdb0929d..0447f58d0dc59 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -1413,7 +1413,8 @@ void ReplicatedPG::pull(pobject_t poid) // take note assert(pulling.count(poid.oid) == 0); - pulling[poid.oid] = v; + pulling[poid.oid].first = v; + pulling[poid.oid].second = fromosd; } @@ -1639,6 +1640,18 @@ void ReplicatedPG::on_osd_failure(int o) repop->waitfor_commit.count(o)) repop_ack(repop, -1, true, o); } + + // remove from pushing map + { + map >::iterator p = pulling.begin(); + while (p != pulling.end()) + if (p->second.second == o) { + dout(10) << " forgetting pull of " << p->first << " " << p->second.first + << " from osd" << o << dendl; + pulling.erase(p++); + } else + p++; + } } void ReplicatedPG::on_acker_change() diff --git a/src/osd/ReplicatedPG.h b/src/osd/ReplicatedPG.h index f8fe241360dc0..289257704eac4 100644 --- a/src/osd/ReplicatedPG.h +++ b/src/osd/ReplicatedPG.h @@ -86,7 +86,7 @@ protected: int fromosd, eversion_t pg_complete_thru=eversion_t(0,0)); // push/pull - map pulling; // which objects are currently being pulled + map > pulling; // which objects are currently being pulled, and from where map > pushing; -- 2.39.5