]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw/datalog: also handle errors properly for fifo trim
authorOguzhan Ozmen <oozmen@bloomberg.net>
Wed, 20 May 2026 13:23:29 +0000 (13:23 +0000)
committerOguzhan Ozmen <oozmen@bloomberg.net>
Tue, 26 May 2026 19:09:04 +0000 (19:09 +0000)
RGWDataChangesFIFO::trim: handle ENODATA from empty FIFO: fifo::FIFO::trim()
throws ENODATA (no_message_available) when the FIFO has no parts yet.

This manifests on clusters with rgw_default_data_log_backing=fifo when
trim_entries is called on a shard before any entries have been pushed.

Signed-off-by: Oguzhan Ozmen <oozmen@bloomberg.net>
(cherry picked from commit 4c5f4df9e227caa2bf91ab31a9bf184f305a7993)

src/rgw/driver/rados/rgw_datalog.cc

index 8fe75e8a59a81bf6e3ade64092c61d1dbf8df0de..dce254c364111c7256d33a42f58e4b35944bd085 100644 (file)
@@ -337,7 +337,15 @@ public:
   }
   asio::awaitable<void> trim(const DoutPrefixProvider *dpp, int index,
           std::string_view marker) override {
-    co_await fifos[index].trim(dpp, std::string{marker}, false);
+    try {
+      co_await fifos[index].trim(dpp, std::string{marker}, false);
+    } catch (const sys::system_error& e) {
+      if (e.code() != sys::errc::no_message_available) {
+       ldpp_dout(dpp, -1) << __PRETTY_FUNCTION__
+                          << ": trim failed: " << e.what() << dendl;
+       throw;
+      }
+    }
   }
   std::string_view max_marker() const override {
     static const auto max_mark = fifo::FIFO::max_marker();