eversion_t trim_to,
eversion_t roll_forward_to,
ObjectStore::Transaction &t,
- bool transaction_applied)
+ bool transaction_applied,
+ bool async)
{
if (transaction_applied)
update_snap_map(logv, t);
dout(10) << __func__ << " approx pg log length = "
<< pg_log.get_log().approx_size() << dendl;
- pg_log.trim(trim_to, info);
+ dout(10) << __func__ << " transaction_applied = "
+ << transaction_applied << dendl;
+ if (!transaction_applied || async)
+ dout(10) << __func__ << " " << pg_whoami
+ << " is async_recovery or backfill target" << dendl;
+ pg_log.trim(trim_to, info, transaction_applied, async);
// update the local pg, pg log
dirty_info = true;
eversion_t trim_to,
eversion_t roll_forward_to,
ObjectStore::Transaction &t,
- bool transaction_applied = true);
+ bool transaction_applied = true,
+ bool async = false);
bool check_log_for_corruption(ObjectStore *store);
void trim_log();
void PGLog::trim(
eversion_t trim_to,
- pg_info_t &info)
+ pg_info_t &info,
+ bool transaction_applied,
+ bool async)
{
dout(10) << __func__ << " proposed trim_to = " << trim_to << dendl;
// trim?
if (trim_to > log.tail) {
- // We shouldn't be trimming the log past last_complete
- assert(trim_to <= info.last_complete);
+ // Don't assert for async_recovery_targets or backfill_targets
+ if (transaction_applied && !async)
+ assert(trim_to <= info.last_complete);
dout(10) << "trim " << log << " to " << trim_to << dendl;
log.trim(cct, trim_to, &trimmed, &trimmed_dups, &write_from_dups);
void trim(
eversion_t trim_to,
- pg_info_t &info);
+ pg_info_t &info,
+ bool transaction_applied = true,
+ bool async = false);
void roll_forward_to(
eversion_t roll_forward_to,
if (hset_history) {
info.hit_set = *hset_history;
}
- append_log(logv, trim_to, roll_forward_to, t, transaction_applied);
+ append_log(logv, trim_to, roll_forward_to, t, transaction_applied, async);
}
void op_applied(const eversion_t &applied_version) override;