From c8a66a96e913b8a112ef26bf3399ede861686d23 Mon Sep 17 00:00:00 2001 From: Oguzhan Ozmen Date: Tue, 11 Nov 2025 16:16:19 +0000 Subject: [PATCH] RGW/multisite/RGWListRemoteBucketCR: clear reused bucket_list_result to avoid stale listings 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 --- src/rgw/driver/rados/rgw_data_sync.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/rgw/driver/rados/rgw_data_sync.cc b/src/rgw/driver/rados/rgw_data_sync.cc index 83c1757439af..04978e3a4a53 100644 --- a/src/rgw/driver/rados/rgw_data_sync.cc +++ b/src/rgw/driver/rados/rgw_data_sync.cc @@ -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) { -- 2.47.3