// take note
assert(pulling.count(poid.oid) == 0);
- pulling[poid.oid] = v;
+ pulling[poid.oid].first = v;
+ pulling[poid.oid].second = fromosd;
}
repop->waitfor_commit.count(o))
repop_ack(repop, -1, true, o);
}
+
+ // remove from pushing map
+ {
+ map<object_t, pair<eversion_t,int> >::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()
int fromosd, eversion_t pg_complete_thru=eversion_t(0,0));
// push/pull
- map<object_t, eversion_t> pulling; // which objects are currently being pulled
+ map<object_t, pair<eversion_t, int> > pulling; // which objects are currently being pulled, and from where
map<object_t, set<int> > pushing;