*/
bool PG::merge_old_entry(ObjectStore::Transaction& t, Log::Entry& oe)
{
+ if (oe.soid > info.last_backfill) {
+ dout(20) << "merge_old_entry had " << oe << " : beyond last_backfill" << dendl;
+ return false;
+ }
if (log.objects.count(oe.soid)) {
Log::Entry &ne = *log.objects[oe.soid]; // new(er?) entry
dout(20) << "merge_old_entry had " << oe << " new " << ne << " : same" << dendl;
return true;
}
-
if (oe.is_delete()) {
if (ne.is_delete()) {
// old and new are delete
Log::Entry &ne = *p;
dout(20) << "merge_log " << ne << dendl;
log.index(ne);
- missing.add_next_event(ne);
- if (ne.is_delete())
- t.remove(coll, ne.soid);
+ if (ne.soid <= info.last_backfill) {
+ missing.add_next_event(ne);
+ if (ne.is_delete())
+ t.remove(coll, ne.soid);
+ }
}
// move aside divergent items
for (list<Log::Entry>::iterator p = m->log.log.begin();
p != m->log.log.end();
p++)
- if (p->soid < pi.last_backfill)
+ if (p->soid <= pi.last_backfill)
pm.add_next_event(*p);
}