missing.revise_need(ne.soid, ne.version);
}
}
+ } else if (oe.prior_version > info.log_tail) {
+ assert(oe.soid.snap != CEPH_NOSNAP);
+ dout(20) << "merge_old_entry had " << oe
+ << ", clone with no non-divergent log entries, "
+ << "deleting" << dendl;
+ t.remove(coll, oe.soid);
+ if (missing.is_missing(oe.soid))
+ missing.rm(oe.soid, missing.missing[oe.soid].need);
} else {
if (!oe.is_delete()) {
dout(20) << "merge_old_entry had " << oe << " deleting" << dendl;
dout(20) << "merge_old_entry had " << oe << " reverting to "
<< oe.prior_version << dendl;
if (oe.prior_version > eversion_t()) {
+ /* If missing.missing[oe.soid].need is before info.log_tail
+ * then we filled it in on a previous call to merge_old_entry
+ * and this entry refers to a previous divergent entry.
+ */
if (!missing.is_missing(oe.soid) ||
missing.missing[oe.soid].need > info.log_tail) {
- assert(oe.prior_version < info.log_tail);
missing.revise_need(oe.soid, oe.prior_version);
}
} else if (missing.is_missing(oe.soid)) {