]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd_types: Restore new_object marking for delete missing entries 63153/head
authorNitzan Mordechai <nmordech@redhat.com>
Wed, 26 Mar 2025 08:20:15 +0000 (08:20 +0000)
committerNitzan Mordechai <nmordech@redhat.com>
Wed, 7 May 2025 06:08:14 +0000 (06:08 +0000)
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 <nmordech@redhat.com>
(cherry picked from commit 4289371b20bb437ad38ded92bc53f5b192a8a16e)

src/osd/osd_types.h

index f6e10c675532fe63433e92e38955d23db5882140..9543256120ea08a07c3a4d7ee671188c53cf1248 100644 (file)
@@ -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 {