]> 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>
Wed, 20 May 2026 13:54:07 +0000 (13:54 +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>
src/rgw/driver/rados/rgw_datalog.cc

index 4b85826767a3eb898640e4f23e31eccb9181d3dc..74a0675caf145ad048e5962d86abb778cc2d50f5 100644 (file)
@@ -346,7 +346,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();