From 2c15749077fd4354cff04f273248181ce4e2118c Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 6 Nov 2008 09:43:59 -0800 Subject: [PATCH] osd: don't pull if source osd is down --- src/osd/ReplicatedPG.cc | 15 +++++++++++---- src/osd/ReplicatedPG.h | 2 +- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/osd/ReplicatedPG.cc b/src/osd/ReplicatedPG.cc index 775f5ef9aa02d..323595ed2d850 100644 --- a/src/osd/ReplicatedPG.cc +++ b/src/osd/ReplicatedPG.cc @@ -1735,7 +1735,7 @@ void ReplicatedPG::calc_clone_subsets(SnapSet& snapset, pobject_t poid, /** pull - request object from a peer */ -void ReplicatedPG::pull(pobject_t poid) +bool ReplicatedPG::pull(pobject_t poid) { assert(missing.loc.count(poid.oid)); eversion_t v = missing.missing[poid.oid].need; @@ -1746,6 +1746,11 @@ void ReplicatedPG::pull(pobject_t poid) << " from osd" << fromosd << dendl; + if (!osd->osdmap->is_up(fromosd)) { + dout(7) << " osd" << fromosd << " is down" << dendl; + return false; + } + map > clone_subsets; interval_set<__u64> data_subset; @@ -1762,7 +1767,7 @@ void ReplicatedPG::pull(pobject_t poid) pull(head); } waiting_for_head.insert(poid.oid); - return; + return false; } // check snapset @@ -1801,6 +1806,7 @@ void ReplicatedPG::pull(pobject_t poid) assert(pulling.count(poid.oid) == 0); pulling[poid.oid].first = v; pulling[poid.oid].second = fromosd; + return true; } @@ -2414,8 +2420,9 @@ int ReplicatedPG::recover_primary(int max) } } - pull(poid); - if (++started >= max) + if (pull(poid)) + ++started; + if (started >= max) return started; } diff --git a/src/osd/ReplicatedPG.h b/src/osd/ReplicatedPG.h index 7fcd8641c492f..a7f471704d43a 100644 --- a/src/osd/ReplicatedPG.h +++ b/src/osd/ReplicatedPG.h @@ -107,7 +107,7 @@ protected: void push(pobject_t oid, int dest); void push(pobject_t oid, int dest, interval_set<__u64>& data_subset, map >& clone_subsets); - void pull(pobject_t oid); + bool pull(pobject_t oid); // modify void op_modify_commit(tid_t rep_tid, eversion_t pg_complete_thru); -- 2.47.3