]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: overaggressive assert in read_log_and_missing with optimized EC pool
authorBill Scales <bill_scales@uk.ibm.com>
Fri, 25 Apr 2025 14:03:02 +0000 (15:03 +0100)
committerLaura Flores <lflores@ibm.com>
Wed, 9 Jul 2025 15:47:24 +0000 (15:47 +0000)
read_log_and_missing is called during OSD initializaiton to sanity check
the PG log. One of its checks is too agressive for an optimized EC pool
where because of a partial write there can be a log entry but no update
to the object on this shard (other shards will have been updated). The
fix is to skip the checks when the log entry indicates this shard was
not updated.

Only affects pool with allow_ec_optimizations flag on.

Signed-off-by: Bill Scales <bill_scales@uk.ibm.com>
(cherry picked from commit c8739a2bdb0bf523402d85517a7fce39d445eef5)

src/osd/PGLog.h

index 455fc4464185016d829c0ad4967f7e9f20103bba..7aa3d17f1f6e1c1fb14289044c381c4ccba140e7 100644 (file)
@@ -1614,6 +1614,10 @@ public:
            continue;
          if (i->is_error())
            continue;
+         if (!i->is_written_shard(info.pgid.shard)) {
+           // optimized EC - partial write that this shard didn't participate in
+           continue;
+         }
          if (did.count(i->soid)) continue;
          did.insert(i->soid);