1. Injection read fault, recover failed object is added to the missing set, log.complete_to == log.end()
2. Before the first object recovery, the new object writes, update info.last_update, because num_missing() != 0, so last_complete will not be updated
3. After the first object recovery, PeeringState::recover_got generates the error: ceph_assert(info.last_complete == info.last_update);
Fixed: https://tracker.ceph.com/issues/42019
Signed-off-by: Tao Ning <ningtao@sangfor.com.cn>
peer_missing[peer].add(soid, version, eversion_t(), false);
} else {
pg_log.missing_add(soid, version, eversion_t());
+ pg_log.reset_complete_to(&info);
pg_log.set_last_requested(0);
}
}