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: v12.2.10~30^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=52e24a3c5e09657b265477cc830ac2cb8c646474;p=ceph.git rgw: data sync holds lease over transition from full to incremental Signed-off-by: Casey Bodley (cherry picked commit from 3e9ac0f) Signed-off-by: Jonathan Brielmaier Conflicts: src/rgw/rgw_data_sync.cc: use ldout instead of tn->log, reflect state of luminous in multiple places --- diff --git a/src/rgw/rgw_data_sync.cc b/src/rgw/rgw_data_sync.cc index 5f47ef8ae637..5ec99df339b1 100644 --- a/src/rgw/rgw_data_sync.cc +++ b/src/rgw/rgw_data_sync.cc @@ -1277,15 +1277,14 @@ public: int ret; while (collect(&ret, lease_stack.get())) { if (ret < 0) { - tn->log(10, "a sync operation returned error"); + ldout(cct, 10) << "a sync operation returned error" << dendl; } } } } } while ((int)entries.size() == max_entries); - lease_cr->go_down(); - drain_all(); + drain_all_but_stack(lease_stack.get()); yield { /* update marker to reflect we're done with full sync */ @@ -1300,25 +1299,33 @@ public: if (retcode < 0) { ldout(sync_env->cct, 0) << "ERROR: failed to set sync marker: retcode=" << retcode << dendl; lease_cr->go_down(); + drain_all(); return set_cr_error(retcode); } + // keep lease and transition to incremental_sync() } return 0; } int incremental_sync() { reenter(&incremental_cr) { - yield init_lease_cr(); - while (!lease_cr->is_locked()) { - if (lease_cr->is_done()) { - ldout(cct, 5) << "lease cr failed, done early " << dendl; - set_status("lease lock failed, early abort"); - return set_cr_error(lease_cr->get_ret_status()); + ldout(cct, 10) << "start incremental sync" << dendl; + if (lease_cr) { + ldout(cct, 10) << "lease already held from full sync" << dendl; + } else { + yield init_lease_cr(); + while (!lease_cr->is_locked()) { + if (lease_cr->is_done()) { + ldout(cct, 5) << "lease cr failed, done early " << dendl; + 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"); + ldout(cct, 10) << "took lease" << dendl; } - set_status("lease acquired"); error_repo = new RGWOmapAppend(sync_env->async_rados, sync_env->store, rgw_raw_obj(pool, error_oid), 1 /* no buffer */);