From 6ca53dc2ac00d937cd936f93d763f0b8c9f51658 Mon Sep 17 00:00:00 2001 From: Shilpa Jagannath Date: Fri, 23 Jul 2021 12:28:24 +0530 Subject: [PATCH] rgw: remove per-shard sync status object after incremental sync finishes Signed-off-by: Shilpa Jagannath Signed-off-by: Casey Bodley --- src/rgw/rgw_data_sync.cc | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/rgw/rgw_data_sync.cc b/src/rgw/rgw_data_sync.cc index 4112da06458a7..fd21966fd4f63 100644 --- a/src/rgw/rgw_data_sync.cc +++ b/src/rgw/rgw_data_sync.cc @@ -3778,6 +3778,8 @@ public: stable_timestamp(stable_timestamp) {} + const rgw_raw_obj& get_obj() const { return obj; } + RGWCoroutine* store_marker(const string& new_marker, uint64_t index_pos, const real_time& timestamp) override { sync_marker.position = new_marker; sync_marker.timestamp = timestamp; @@ -4568,9 +4570,21 @@ int RGWBucketShardIncrementalSyncCR::operate(const DoutPrefixProvider *dpp) if (retcode < 0) { ldout(cct, 20) << "failed to update bucket sync status: " << cpp_strerror(retcode) << dendl; - drain_all(); return set_cr_error(retcode); } + yield { + // delete the shard status object + auto status_obj = sync_env->svc->rados->obj(marker_tracker.get_obj()); + retcode = status_obj.open(dpp); + if (retcode < 0) { + return set_cr_error(retcode); + } + call(new RGWRadosRemoveOidCR(sync_env->store, std::move(status_obj))); + if (retcode < 0) { + ldpp_dout(dpp, 20) << "failed to remove shard status object: " << cpp_strerror(retcode) << dendl; + return set_cr_error(retcode); + } + } } return set_cr_done(); -- 2.39.5