]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
RGW/multisite/RGWListRemoteBucketCR: clear reused bucket_list_result to avoid stale...
authorOguzhan Ozmen <oozmen@bloomberg.net>
Tue, 11 Nov 2025 16:16:19 +0000 (16:16 +0000)
committerOguzhan Ozmen <oozmen@bloomberg.net>
Fri, 13 Feb 2026 03:47:49 +0000 (03:47 +0000)
RGWBucketFullSyncCR could spin indefinitely when the source bucket was
already deleted. The coroutine reused a bucket_list_result member, and
RGWListRemoteBucketCR populated it without clearing prior state. Stale
entries/is_truncated from a previous iteration caused the loop to
continue even after the bucket no longer existed.

Fix by clearing the provided bucket_list_result at the start of
RGWListRemoteBucketCR (constructor), ensuring each listing starts from a
clean state and reflects the current remote bucket contents.

This prevents the infinite loop and returns correct results when the
bucket has been deleted.

Fixes: https://tracker.ceph.com/issues/73799
Signed-off-by: Oguzhan Ozmen <oozmen@bloomberg.net>
src/rgw/driver/rados/rgw_data_sync.cc

index 83c1757439afb4e9f4d17e0d205ebf80f66005b7..04978e3a4a5388000ded20f552e77670c9300eec 100644 (file)
@@ -4062,7 +4062,9 @@ public:
   RGWListRemoteBucketCR(RGWDataSyncCtx *_sc, const rgw_bucket_shard& bs,
                         rgw_obj_key& _marker_position, bucket_list_result *_result)
     : RGWCoroutine(_sc->cct), sc(_sc), sync_env(_sc->env), bs(bs),
-      marker_position(_marker_position), result(_result) {}
+      marker_position(_marker_position), result(_result) {
+        result->reset_entries();
+      }
 
   int operate(const DoutPrefixProvider *dpp) override {
     reenter(this) {