From e1c31b2997f916e1654ae2e774d13e1370aa1215 Mon Sep 17 00:00:00 2001 From: Soumya Koduri Date: Thu, 17 Nov 2022 21:38:41 +0530 Subject: [PATCH] rgw/bucket-sync: flush marker_tracker when the lease is lost Also clear objv before reading the bucket sync status. Signed-off-by: Soumya Koduri --- src/rgw/driver/rados/rgw_data_sync.cc | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/rgw/driver/rados/rgw_data_sync.cc b/src/rgw/driver/rados/rgw_data_sync.cc index a17f229c226..551aa767b44 100644 --- a/src/rgw/driver/rados/rgw_data_sync.cc +++ b/src/rgw/driver/rados/rgw_data_sync.cc @@ -4346,6 +4346,7 @@ int RGWBucketFullSyncCR::operate(const DoutPrefixProvider *dpp) do { if (lease_cr && !lease_cr->is_locked()) { drain_all(); + yield call(marker_tracker.flush()); tn->log(1, "no lease or lease is lost, abort"); return set_cr_error(-ECANCELED); } @@ -4362,6 +4363,7 @@ int RGWBucketFullSyncCR::operate(const DoutPrefixProvider *dpp) if (retcode < 0 && retcode != -ENOENT) { set_status("failed bucket listing, going down"); drain_all(); + yield spawn(marker_tracker.flush(), true); return set_cr_error(retcode); } if (list_result.entries.size() > 0) { @@ -4371,6 +4373,7 @@ int RGWBucketFullSyncCR::operate(const DoutPrefixProvider *dpp) for (; entries_iter != list_result.entries.end(); ++entries_iter) { if (lease_cr && !lease_cr->is_locked()) { drain_all(); + yield call(marker_tracker.flush()); tn->log(1, "no lease or lease is lost, abort"); return set_cr_error(-ECANCELED); } @@ -4418,6 +4421,7 @@ int RGWBucketFullSyncCR::operate(const DoutPrefixProvider *dpp) tn->unset_flag(RGW_SNS_FLAG_ACTIVE); if (lease_cr && !lease_cr->is_locked()) { tn->log(1, "no lease or lease is lost, abort"); + yield call(marker_tracker.flush()); return set_cr_error(-ECANCELED); } yield call(marker_tracker.flush()); @@ -4609,6 +4613,7 @@ int RGWBucketShardIncrementalSyncCR::operate(const DoutPrefixProvider *dpp) do { if (lease_cr && !lease_cr->is_locked()) { drain_all(); + yield call(marker_tracker.flush()); tn->log(1, "no lease or lease is lost, abort"); return set_cr_error(-ECANCELED); } @@ -4618,6 +4623,7 @@ int RGWBucketShardIncrementalSyncCR::operate(const DoutPrefixProvider *dpp) if (retcode < 0 && retcode != -ENOENT) { /* wait for all operations to complete */ drain_all(); + yield spawn(marker_tracker.flush(), true); return set_cr_error(retcode); } list_result = std::move(extended_result.entries); @@ -4665,6 +4671,7 @@ int RGWBucketShardIncrementalSyncCR::operate(const DoutPrefixProvider *dpp) for (; entries_iter != entries_end; ++entries_iter) { if (lease_cr && !lease_cr->is_locked()) { drain_all(); + yield call(marker_tracker.flush()); tn->log(1, "no lease or lease is lost, abort"); return set_cr_error(-ECANCELED); } @@ -5505,6 +5512,7 @@ int RGWSyncBucketCR::operate(const DoutPrefixProvider *dpp) using ReadCR = RGWSimpleRadosReadCR; using WriteCR = RGWSimpleRadosWriteCR; + objv.clear(); yield call(new ReadCR(dpp, env->async_rados, env->svc->sysobj, status_obj, &bucket_status, false, &objv)); if (retcode == -ENOENT) { @@ -5516,6 +5524,7 @@ int RGWSyncBucketCR::operate(const DoutPrefixProvider *dpp) if (retcode == -EEXIST) { // raced with another create, read its status tn->log(20, "raced with another create, read its status"); + objv.clear(); yield call(new ReadCR(dpp, env->async_rados, env->svc->sysobj, status_obj, &bucket_status, false, &objv)); } @@ -5565,6 +5574,7 @@ int RGWSyncBucketCR::operate(const DoutPrefixProvider *dpp) } // check if local state is "stopped" + objv.clear(); yield call(new ReadCR(dpp, env->async_rados, env->svc->sysobj, status_obj, &bucket_status, false, &objv)); if (retcode < 0) { @@ -5613,6 +5623,7 @@ int RGWSyncBucketCR::operate(const DoutPrefixProvider *dpp) } // reread the status after acquiring the lock + objv.clear(); yield call(new ReadCR(dpp, env->async_rados, env->svc->sysobj, status_obj, &bucket_status, false, &objv)); if (retcode < 0) { -- 2.39.5