/** 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;
<< " from osd" << fromosd
<< dendl;
+ if (!osd->osdmap->is_up(fromosd)) {
+ dout(7) << " osd" << fromosd << " is down" << dendl;
+ return false;
+ }
+
map<pobject_t, interval_set<__u64> > clone_subsets;
interval_set<__u64> data_subset;
pull(head);
}
waiting_for_head.insert(poid.oid);
- return;
+ return false;
}
// check snapset
assert(pulling.count(poid.oid) == 0);
pulling[poid.oid].first = v;
pulling[poid.oid].second = fromosd;
+ return true;
}
}
}
- pull(poid);
- if (++started >= max)
+ if (pull(poid))
+ ++started;
+ if (started >= max)
return started;
}
void push(pobject_t oid, int dest);
void push(pobject_t oid, int dest, interval_set<__u64>& data_subset,
map<pobject_t, interval_set<__u64> >& 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);