]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw/logging: make sure source bucket is in the target's list
authorYuval Lifshitz <ylifshit@ibm.com>
Thu, 30 Oct 2025 09:45:48 +0000 (09:45 +0000)
committerYuval Lifshitz <ylifshit@ibm.com>
Thu, 30 Oct 2025 09:45:48 +0000 (09:45 +0000)
if a target log bucket is deleted, and then recreated with the same name,
the attribute holding the sources will not exist.
this is fixing it, but updating the list anytime we try to flush
or add a record.
if the source is already in the list, there will be no update to the attribute.

Fixes: https://tracker.ceph.com/issues/73675
Signed-off-by: Yuval Lifshitz <ylifshit@ibm.com>
src/rgw/radosgw-admin/radosgw-admin.cc
src/rgw/rgw_bucket_logging.cc
src/rgw/rgw_rest_bucket_logging.cc

index a48adb01124629865127a1872059ecd2f231e47c..26495d22f5bba2b0bfda30b2fb8bb1b74c3fd466 100644 (file)
@@ -7867,6 +7867,12 @@ int main(int argc, const char **argv)
       return 0;
     }
 
+    // make sure that the logging source attribute is up-to-date
+    if (ret = rgw::bucketlogging::update_bucket_logging_sources(dpp(), target_bucket, bucket->get_key(), true, null_yield); ret < 0) {
+      cerr << "WARNING: failed to update logging sources attribute '" << RGW_ATTR_BUCKET_LOGGING_SOURCES
+        << "' in logging target '" << target_bucket->get_key() << "'. error: " << cpp_strerror(ret) << std::endl;
+    }
+
     std::string obj_name;
     RGWObjVersionTracker objv_tracker;
     ret = target_bucket->get_logging_object_name(obj_name, configuration.target_prefix, null_yield, dpp(), &objv_tracker);
index 39bb78b498c01908ce9de66af8a84d8ada2e5d42..79ef96968e346d92dd7550afb89f91e731eace34 100644 (file)
@@ -501,6 +501,12 @@ int log_record(rgw::sal::Driver* driver,
     return ret;
   }
 
+  // make sure that the logging source attribute is up-to-date
+  if (ret = update_bucket_logging_sources(dpp, target_bucket, s->bucket->get_key(), true, y); ret < 0) {
+    ldpp_dout(dpp, 5) << "WARNING: failed to update logging sources attribute '" << RGW_ATTR_BUCKET_LOGGING_SOURCES
+        << "' in logging bucket '" << target_bucket_id << "'. error: " << ret << dendl;
+  }
+
   const auto region = driver->get_zone()->get_zonegroup().get_api_name();
   std::string obj_name;
   RGWObjVersionTracker objv_tracker;
index 6f8f4b73b9264a3da57b7a25c506f0d2f1168df1..ba0374a94fe645b09e0e539ebcb5f7dca70403aa 100644 (file)
@@ -417,6 +417,11 @@ class RGWPostBucketLoggingOp : public RGWDefaultResponseOp {
 
   void execute(optional_yield y) override {
     const auto& target_bucket_id = target_bucket->get_key();
+    // make sure that the logging source attribute is up-to-date
+    if (const auto ret = rgw::bucketlogging::update_bucket_logging_sources(this, target_bucket, source_bucket->get_key(), true, y); ret < 0) {
+      ldpp_dout(this, 5) << "WARNING: failed to update logging sources attribute '" << RGW_ATTR_BUCKET_LOGGING_SOURCES
+        << "' in logging target '" << target_bucket_id << "'. error: " << ret << dendl;
+    }
     std::string obj_name;
     RGWObjVersionTracker objv_tracker;
     op_ret = target_bucket->get_logging_object_name(obj_name, configuration.target_prefix, y, this, &objv_tracker);