From: Casey Bodley Date: Mon, 25 Feb 2019 19:10:39 +0000 (-0500) Subject: rgw: data sync drains lease stack on lease failure X-Git-Tag: v14.1.1~100^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F26639%2Fhead;p=ceph.git rgw: data sync drains lease stack on lease failure on lease failure, call drain_all() to collect the spawned lease stack. otherwise, the parent coroutine will inherit this spawned stack and may not drain or collect it manually. RGWDataSyncShardControlCR, for example, does not drain/collect because it only uses call() to run a single RGWDataSyncShardCR, so all lease stacks from RGWDataSyncShardCR just pile up in the RGWDataSyncShardControlCR Fixes: http://tracker.ceph.com/issues/38479 Signed-off-by: Casey Bodley --- diff --git a/src/rgw/rgw_data_sync.cc b/src/rgw/rgw_data_sync.cc index fc924eeed86..6cd55eece17 100644 --- a/src/rgw/rgw_data_sync.cc +++ b/src/rgw/rgw_data_sync.cc @@ -1216,6 +1216,7 @@ public: 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); @@ -1307,6 +1308,7 @@ public: 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); @@ -3176,6 +3178,7 @@ int RGWRunBucketSyncCoroutine::operate() 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);