op.updated_hit_set_history,
op.trim_to,
op.roll_forward_to,
+ op.roll_forward_to,
!op.backfill_or_async_recovery,
localt,
async);
const std::optional<pg_hit_set_history_t> &hset_history,
const eversion_t &trim_to,
const eversion_t &roll_forward_to,
+ const eversion_t &min_last_complete_ondisk,
bool transaction_applied,
ObjectStore::Transaction &t,
bool async = false) = 0;
auto &missing = pg_log.get_missing();
+ min_last_complete_ondisk = eversion_t(0,0); // we don't know (yet)!
if (is_primary()) {
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();
const vector<pg_log_entry_t>& logv,
eversion_t trim_to,
eversion_t roll_forward_to,
+ eversion_t mlcod,
ObjectStore::Transaction &t,
bool transaction_applied,
bool async)
// update the local pg, pg log
dirty_info = true;
write_if_dirty(t);
+
+ if (!is_primary())
+ min_last_complete_ondisk = mlcod;
}
void PeeringState::recover_got(
pl->cancel_remote_recovery_reservation();
utime_t dur = ceph_clock_now() - enter_time;
pl->get_peering_perf().tinc(rs_replicaactive_latency, dur);
+
+ ps->min_last_complete_ondisk = eversion_t();
}
/*-------Stray---*/
if (ps.last_complete_ondisk != ps.info.last_complete)
out << " lcod " << ps.last_complete_ondisk;
- if (ps.is_primary()) {
- out << " mlcod " << ps.min_last_complete_ondisk;
- }
+ out << " mlcod " << ps.min_last_complete_ondisk;
out << " " << pg_state_string(ps.get_state());
if (ps.should_send_notify())
const vector<pg_log_entry_t>& logv,
eversion_t trim_to,
eversion_t roll_forward_to,
+ eversion_t min_last_complete_ondisk,
ObjectStore::Transaction &t,
bool transaction_applied,
bool async);
const std::optional<pg_hit_set_history_t> &hset_history,
const eversion_t &trim_to,
const eversion_t &roll_forward_to,
+ const eversion_t &min_last_complete_ondisk,
bool transaction_applied,
ObjectStore::Transaction &t,
bool async = false) override {
projected_log.trim(cct, last->version, nullptr, nullptr, nullptr);
}
recovery_state.append_log(
- logv, trim_to, roll_forward_to, t, transaction_applied, async);
+ logv, trim_to, roll_forward_to, min_last_complete_ondisk,
+ t, transaction_applied, async);
}
void op_applied(const eversion_t &applied_version) override;
const eversion_t &at_version,
PGTransactionUPtr &&_t,
const eversion_t &trim_to,
- const eversion_t &roll_forward_to,
+ const eversion_t &min_last_complete_ondisk,
const vector<pg_log_entry_t> &_log_entries,
std::optional<pg_hit_set_history_t> &hset_history,
Context *on_all_commit,
hset_history,
trim_to,
at_version,
+ min_last_complete_ondisk,
true,
op_t);
m->updated_hit_set_history,
m->pg_trim_to,
m->version, /* Replicated PGs don't have rollback info */
+ m->min_last_complete_ondisk,
update_snaps,
rm->localt,
async);