From 3b2807c1919e245f31bcf4d8f5cbfb308039e7a0 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Thu, 20 Nov 2008 11:54:09 -0800 Subject: [PATCH] osd: adjust merge_log Object should only be marked missing if new entry is newer. If they are the same, it may or may not be missing (depending on whether it was before merge_log). --- src/osd/PG.cc | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/osd/PG.cc b/src/osd/PG.cc index bfca59a643a71..0091fc0cf6f4a 100644 --- a/src/osd/PG.cc +++ b/src/osd/PG.cc @@ -251,38 +251,42 @@ void PG::merge_old_entry(ObjectStore::Transaction& t, Log::Entry& oe) // object still exists. Log::Entry &ne = *log.objects[oe.oid]; // new(er?) entry - if (ne.version >= oe.version) { - dout(20) << "merge_entry had " << oe << " new " << ne << " : same or older, missing" << dendl; + if (ne.version > oe.version) { + dout(20) << "merge_old_entry had " << oe << " new " << ne << " : older, missing" << dendl; assert(missing.is_missing(ne.oid)); return; } + if (ne.version == oe.version) { + dout(20) << "merge_old_entry had " << oe << " new " << ne << " : same" << dendl; + return; + } if (oe.is_delete()) { if (ne.is_delete()) { // old and new are delete - dout(20) << "merge_entry had " << oe << " new " << ne << " : both deletes" << dendl; + dout(20) << "merge_old_entry had " << oe << " new " << ne << " : both deletes" << dendl; } else { // old delete, new update. - dout(20) << "merge_entry had " << oe << " new " << ne << " : missing" << dendl; + dout(20) << "merge_old_entry had " << oe << " new " << ne << " : missing" << dendl; assert(missing.is_missing(oe.oid)); } } else { if (ne.is_delete()) { // old update, new delete - dout(20) << "merge_entry had " << oe << " new " << ne << " : new delete supercedes" << dendl; + dout(20) << "merge_old_entry had " << oe << " new " << ne << " : new delete supercedes" << dendl; missing.rm(oe.oid, oe.version); } else { // old update, new update - dout(20) << "merge_entry had " << oe << " new " << ne << " : new item supercedes" << dendl; + dout(20) << "merge_old_entry had " << oe << " new " << ne << " : new item supercedes" << dendl; missing.rm(oe.oid, oe.version); // re-add older "new" entry to missing missing.add_event(ne); } } } else { if (oe.is_delete()) { - dout(20) << "merge_entry had " << oe << " new dne : ok" << dendl; + dout(20) << "merge_old_entry had " << oe << " new dne : ok" << dendl; } else { - dout(20) << "merge_entry had " << oe << " new dne : deleting" << dendl; + dout(20) << "merge_old_entry had " << oe << " new dne : deleting" << dendl; t.remove(info.pgid.to_coll(), pobject_t(info.pgid.pool(), 0, oe.oid)); missing.rm(oe.oid, oe.version); } -- 2.39.5