last_update_ondisk = info.last_update;
min_last_complete_ondisk = eversion_t(0,0); // we don't know (yet)!
}
+ last_update_applied = info.last_update;
last_rollback_info_trimmed_to_applied = pg_log.get_can_rollback_to();
need_up_thru = false;
/* replica_scrub
*
- * Wait for pushes to complete in case of recent recovery. Build a single
+ * Wait for last_update_applied to match msg->scrub_to as above. Wait
+ * for pushes to complete in case of recent recovery. Build a single
* scrubmap of objects that are in the range [msg->start, msg->end).
*/
void PG::replica_scrub(
protected:
eversion_t last_update_ondisk; // last_update that has committed; ONLY DEFINED WHEN is_active()
eversion_t last_complete_ondisk; // last_complete that has committed.
+ eversion_t last_update_applied;
// entries <= last_rollback_info_trimmed_to_applied have been trimmed
eversion_t last_rollback_info_trimmed_to_applied;
}
}
+void PrimaryLogPG::op_applied(const eversion_t &applied_version)
+{
+ dout(10) << "op_applied version " << applied_version << dendl;
+ assert(applied_version <= info.last_update);
+ last_update_applied = applied_version;
+}
+
void PrimaryLogPG::eval_repop(RepGather *repop)
{
const MOSDOp *m = NULL;
repop->rep_tid,
ctx->reqid,
ctx->op);
+ op_applied(ctx->at_version);
}
PrimaryLogPG::RepGather *PrimaryLogPG::new_repop(
new OnComplete{this, rep_tid, get_osdmap()->get_epoch()});
int r = osd->store->queue_transaction(ch, std::move(t), NULL);
assert(r == 0);
+ op_applied(info.last_update);
});
}
std::move(t),
nullptr);
assert(tr == 0);
+ op_applied(info.last_update);
}
void PrimaryLogPG::do_update_log_missing_reply(OpRequestRef &op)
append_log(logv, trim_to, roll_forward_to, t, transaction_applied);
}
+ void op_applied(const eversion_t &applied_version); // remove me
+
bool should_send_op(
pg_shard_t peer,
const hobject_t &hoid) override {