virtual void op_applied_replica(
const eversion_t &applied_version) = 0;
+ virtual bool should_send_op(
+ int peer,
+ const hobject_t &hoid) = 0;
+
virtual ~Listener() {}
};
Listener *parent;
}
// ship resulting transaction, log entries, and pg_stats
- if (is_backfill_targets(peer) &&
- soid > MAX(last_backfill_started, pinfo.last_backfill) &&
- // only skip normal (not temp pool=-1) objects
- soid.pool == (int64_t)info.pgid.pool()) {
+ if (!should_send_op(peer, soid)) {
dout(10) << "issue_repop shipping empty opt to osd." << peer
<<", object " << soid
<< " beyond MAX(last_backfill_started "
void op_applied_replica(
const eversion_t &applied_version);
+ bool should_send_op(
+ int peer,
+ const hobject_t &hoid) {
+ assert(peer_info.count(peer));
+ bool should_send = hoid.pool != (int64_t)info.pgid.pool() ||
+ hoid <= MAX(last_backfill_started, peer_info[peer].last_backfill);
+ if (!should_send)
+ assert(is_backfill_targets(peer));
+ return should_send;
+ }
+
/*
* Capture all object state associated with an in-progress read or write.
*/