From 1638e5e1d4f9e37af27b386c655b91776c25ee43 Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Mon, 25 Feb 2019 14:10:39 -0500 Subject: [PATCH] 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 (cherry picked from commit 11ff8653dcaf7663a0553e3175dec75843b3ccea) --- src/rgw/rgw_data_sync.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/rgw/rgw_data_sync.cc b/src/rgw/rgw_data_sync.cc index 088f3aa8dcc..1efb1876d3e 100644 --- a/src/rgw/rgw_data_sync.cc +++ b/src/rgw/rgw_data_sync.cc @@ -1242,6 +1242,7 @@ public: if (lease_cr->is_done()) { ldout(cct, 5) << "lease cr failed, done early " << dendl; set_status("lease lock failed, early abort"); + drain_all(); return set_cr_error(lease_cr->get_ret_status()); } set_sleeping(true); @@ -1323,6 +1324,7 @@ public: if (lease_cr->is_done()) { ldout(cct, 5) << "lease cr failed, done early " << dendl; set_status("lease lock failed, early abort"); + drain_all(); return set_cr_error(lease_cr->get_ret_status()); } set_sleeping(true); @@ -3033,6 +3035,7 @@ int RGWRunBucketSyncCoroutine::operate() if (lease_cr->is_done()) { ldout(cct, 5) << "lease cr failed, done early" << dendl; set_status("lease lock failed, early abort"); + drain_all(); return set_cr_error(lease_cr->get_ret_status()); } set_sleeping(true); -- 2.47.3