From 0e335b4d657f70b171fec4f4ddfbb871ef13f890 Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Mon, 8 Aug 2022 16:35:40 -0400 Subject: [PATCH] rgw: DataSyncShardCR only locks once at the very top Signed-off-by: Casey Bodley --- src/rgw/rgw_data_sync.cc | 43 ++++++++++++---------------------------- 1 file changed, 13 insertions(+), 30 deletions(-) diff --git a/src/rgw/rgw_data_sync.cc b/src/rgw/rgw_data_sync.cc index 16c8726b11f71..60bdddca82dac 100644 --- a/src/rgw/rgw_data_sync.cc +++ b/src/rgw/rgw_data_sync.cc @@ -2026,21 +2026,21 @@ public: int operate(const DoutPrefixProvider *dpp) override { reenter(this) { + yield init_lease_cr(); + while (!lease_cr->is_locked()) { + if (lease_cr->is_done()) { + tn->log(5, "failed to take lease"); + set_status("lease lock failed, early abort"); + drain_all(); + return set_cr_error(lease_cr->get_ret_status()); + } + set_sleeping(true); + yield; + } + tn->log(10, "took lease"); + while (true) { if (sync_marker.state == rgw_data_sync_marker::FullSync) { - yield init_lease_cr(); - while (!lease_cr->is_locked()) { - if (lease_cr->is_done()) { - tn->log(5, "failed to take lease"); - set_status("lease lock failed, early abort"); - drain_all(); - return set_cr_error(lease_cr->get_ret_status()); - } - set_sleeping(true); - yield; - } - tn->log(10, "took lease"); - yield call(new RGWDataFullSyncShardCR(sc, pool, shard_id, sync_marker, tn, status_oid, error_repo, @@ -2053,23 +2053,6 @@ public: return set_cr_error(retcode); } } else if (sync_marker.state == rgw_data_sync_marker::IncrementalSync) { - if (lease_cr) { - tn->log(10, "lease already held from full sync"); - } else { - yield init_lease_cr(); - while (!lease_cr->is_locked()) { - if (lease_cr->is_done()) { - tn->log(5, "failed to take lease"); - set_status("lease lock failed, early abort"); - drain_all(); - return set_cr_error(lease_cr->get_ret_status()); - } - set_sleeping(true); - yield; - } - set_status("lease acquired"); - tn->log(10, "took lease"); - } yield call(new RGWDataIncSyncShardCR(sc, pool, shard_id, sync_marker, tn, status_oid, error_repo, -- 2.39.5