peer_missing[peer].missing.count(soid))
return true;
- // If soid == backfill_pos, we may implicitly write to
- // the largest snap of soid for make_writeable.
- if (peer == backfill_target &&
- backfill_pos == soid)
- return true;
-
// Object is degraded if after last_backfill AND
// we have are backfilling it
if (peer == backfill_target &&
op->mark_delayed();
}
+void ReplicatedPG::wait_for_backfill_pos(OpRequestRef op)
+{
+ waiting_for_backfill_pos.push_back(op);
+}
+
+void ReplicatedPG::release_waiting_for_backfill_pos()
+{
+ requeue_ops(waiting_for_backfill_pos);
+}
+
bool PGLSParentFilter::filter(bufferlist& xattr_data, bufferlist& outdata)
{
bufferlist::iterator iter = xattr_data.begin();
backfill_pos = backfill_info.begin > peer_backfill_info.begin ?
peer_backfill_info.begin : backfill_info.begin;
+ release_waiting_for_backfill_pos();
dout(10) << " backfill_pos now " << backfill_pos << dendl;
assert(waiting_on_backfill);
context_registry_on_change();
// requeue object waiters
+ requeue_ops(waiting_for_backfill_pos);
requeue_object_waiters(waiting_for_missing_object);
for (map<hobject_t,list<OpRequestRef> >::iterator p = waiting_for_degraded_object.begin();
p != waiting_for_degraded_object.end();
push_backfill_object(i->first, i->second.first, i->second.second, backfill_target);
}
+ release_waiting_for_backfill_pos();
dout(5) << "backfill_pos is " << backfill_pos << " and pinfo.last_backfill is "
<< pinfo.last_backfill << dendl;
for (set<hobject_t>::iterator i = backfills_in_flight.begin();
bool is_missing_object(const hobject_t& oid);
void wait_for_missing_object(const hobject_t& oid, OpRequestRef op);
void wait_for_all_missing(OpRequestRef op);
+ void wait_for_backfill_pos(OpRequestRef op);
+ void release_waiting_for_backfill_pos();
bool is_degraded_object(const hobject_t& oid);
void wait_for_degraded_object(const hobject_t& oid, OpRequestRef op);