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,
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,