From: Casey Bodley Date: Sat, 11 Aug 2018 15:39:35 +0000 (-0400) Subject: rgw: data sync holds lease over transition from full to incremental X-Git-Tag: v13.2.3~145^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4d9cba233c8a33fdb147fdc6df7bd9c03e4d51c1;p=ceph.git rgw: data sync holds lease over transition from full to incremental Signed-off-by: Casey Bodley (cherry picked from commit 3e9ac0f1b3f701902a3c35b61e45d938805ddb26) --- diff --git a/src/rgw/rgw_data_sync.cc b/src/rgw/rgw_data_sync.cc index d783192d8bb3..bc81bf546905 100644 --- a/src/rgw/rgw_data_sync.cc +++ b/src/rgw/rgw_data_sync.cc @@ -1360,10 +1360,9 @@ public: } } while ((int)entries.size() == max_entries); - tn->unset_flag(RGW_SNS_FLAG_ACTIVE); /* actually have entries to sync */ + drain_all_but_stack(lease_stack.get()); - lease_cr->go_down(); - drain_all(); + tn->unset_flag(RGW_SNS_FLAG_ACTIVE); yield { /* update marker to reflect we're done with full sync */ @@ -1377,8 +1376,11 @@ public: } if (retcode < 0) { tn->log(0, SSTR("ERROR: failed to set sync marker: retcode=" << retcode)); + lease_cr->go_down(); + drain_all(); return set_cr_error(retcode); } + // keep lease and transition to incremental_sync() } return 0; } @@ -1386,18 +1388,22 @@ public: int incremental_sync() { reenter(&incremental_cr) { tn->log(10, "start incremental sync"); - 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"); - return set_cr_error(lease_cr->get_ret_status()); + 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"); + return set_cr_error(lease_cr->get_ret_status()); + } + set_sleeping(true); + yield; } - set_sleeping(true); - yield; + set_status("lease acquired"); + tn->log(10, "took lease"); } - set_status("lease acquired"); - tn->log(10, "took lease"); error_repo = new RGWOmapAppend(sync_env->async_rados, sync_env->store, rgw_raw_obj(pool, error_oid), 1 /* no buffer */);