From 309a7d31d9cb04960c54b5d73ea2f8bbd70e5a24 Mon Sep 17 00:00:00 2001 From: Nitzan Mordechai Date: Wed, 26 Mar 2025 08:20:15 +0000 Subject: [PATCH] osd_types: Restore new_object marking for delete missing entries MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Recent changes (PR #29893) removed the “new_object” parameter from missing.add() and the pg_missing_item constructor. As a result, when processing delete log entries, if an object is found on disk, its on‑disk version is stored as “have” instead of the default eversion_t() (0'0). The invariant in read_log_and_missing() then fails because delete entries are expected to have “have” set to eversion_t(). This patch reintroduces the following check: if (have == eversion_t()) clean_regions.mark_object_new(); By doing so, we ensure that when the on‑disk “have” is default, the missing record is marked as new—restoring the previous behavior and satisfying the invariant for delete operations. Fixes: https://tracker.ceph.com/issues/45702 Signed-off-by: Nitzan Mordechai (cherry picked from commit 4289371b20bb437ad38ded92bc53f5b192a8a16e) --- src/osd/osd_types.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/osd/osd_types.h b/src/osd/osd_types.h index f6e10c67553..9543256120e 100644 --- a/src/osd/osd_types.h +++ b/src/osd/osd_types.h @@ -4869,6 +4869,8 @@ struct pg_missing_item { set_delete(is_delete); if (old_style) clean_regions.mark_fully_dirty(); + if (have == eversion_t()) + clean_regions.mark_object_new(); } void encode(ceph::buffer::list& bl, uint64_t features) const { -- 2.39.5