]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osdc/Journaler: derr log and abort when header update get (possibly) overwritten... 55265/head
authorVenky Shankar <vshankar@redhat.com>
Mon, 22 Jan 2024 06:02:11 +0000 (01:02 -0500)
committerVenky Shankar <vshankar@redhat.com>
Wed, 5 Jun 2024 14:16:59 +0000 (10:16 -0400)
See: https://tracker.ceph.com/issues/58878#note-4

Signed-off-by: Venky Shankar <vshankar@redhat.com>
src/osdc/Journaler.cc

index 04b90fb5952aaf2b430fa0cd97fa0bbc4dd49192..c1c1178bd7f699b49c8432d796e5827d98031524 100644 (file)
@@ -493,7 +493,21 @@ void Journaler::_finish_write_head(int r, Header &wrote,
   }
   ceph_assert(!readonly);
   ldout(cct, 10) << "_finish_write_head " << wrote << dendl;
-  last_committed = wrote;
+  if (wrote.write_pos < last_committed.write_pos ||
+      wrote.expire_pos < last_committed.expire_pos ||
+      wrote.trimmed_pos < last_committed.trimmed_pos) {
+    lderr(cct) << __func__ << ": not updating last_committed: "
+              << "(wrote.write_pos/last_committed.write_pos="
+              << wrote.write_pos << "," << last_committed.write_pos << "), "
+              << "(wrote.expire_pos/last_committed.expire_pos="
+              << wrote.expire_pos << "," << last_committed.expire_pos << "), "
+              << "(wrote.trimmed_pos/last_committed.trimmed_pos="
+              << wrote.trimmed_pos << "," << last_committed.trimmed_pos << ")"
+              << dendl;
+    ceph_abort();
+  } else {
+    last_committed = wrote;
+  }
   if (oncommit) {
     oncommit->complete(r);
   }