From: Josh Durgin Date: Fri, 23 Jun 2017 22:39:00 +0000 (-0400) Subject: osd/PGLog.h: update missing set verification for deletes X-Git-Tag: v12.1.2~220^2~13 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=31d6a030e540c533d151020dcbdd7e35c964ccad;p=ceph.git osd/PGLog.h: update missing set verification for deletes Deleted objects may still be on-disk after merging a log that includes deletes, so adjust the asserts accordingly. A case like: 980'1192 (972'1186) modify foo --- osd restart --- 999'1196 (980'1192) delete foo 1003'1199 (0'0) modify foo 1015'1208 (1003'1199) delete foo Would trigger the assert(miter->second.have == oi.info) since the 'have' version would would be reset to 0'0. Signed-off-by: Josh Durgin --- diff --git a/src/osd/PGLog.h b/src/osd/PGLog.h index a93a217e7575..b637dcda01e4 100644 --- a/src/osd/PGLog.h +++ b/src/osd/PGLog.h @@ -1225,7 +1225,9 @@ public: auto miter = missing.get_items().find(i->soid); assert(miter != missing.get_items().end()); assert(miter->second.need == i->version); - assert(miter->second.have == oi.version); + // the 'have' version is reset if an object is deleted, + // then created again + assert(miter->second.have == oi.version || miter->second.have == eversion_t()); checked.insert(i->soid); } else { missing.add(i->soid, i->version, oi.version, i->is_delete());