diff --git a/lower-constraints.txt b/lower-constraints.txt index 24e0e1b5b6..536e8b61ed 100644 --- a/lower-constraints.txt +++ b/lower-constraints.txt @@ -25,7 +25,7 @@ flake8==2.5.5 future==0.16.0 gitdb2==2.0.3 GitPython==2.1.8 -greenlet==0.3.1 +greenlet==0.3.2 hacking==0.11.0 idna==2.6 imagesize==1.0.0 diff --git a/requirements.txt b/requirements.txt index 04f2af2c1c..d4c994af27 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,7 +4,7 @@ dnspython>=1.15.0;python_version=='2.7' # http://www.dnspython.org/LICENSE eventlet>=0.25.0 # MIT -greenlet>=0.3.1 +greenlet>=0.3.2 netifaces>=0.8,!=0.10.0,!=0.10.1 PasteDeploy>=1.3.3 lxml>=3.4.1 diff --git a/swift/proxy/controllers/obj.py b/swift/proxy/controllers/obj.py index 8e6c475463..3015362c99 100644 --- a/swift/proxy/controllers/obj.py +++ b/swift/proxy/controllers/obj.py @@ -38,7 +38,7 @@ from hashlib import md5 from swift import gettext_ as _ from greenlet import GreenletExit -from eventlet import GreenPile +from eventlet import GreenPile, sleep from eventlet.queue import Queue from eventlet.timeout import Timeout @@ -1066,6 +1066,7 @@ class ECAppIter(object): # executing the internal_parts_iters. if self.stashed_iter: self.stashed_iter.close() + sleep() # Give the per-frag threads a chance to clean up for it in self.internal_parts_iters: close_if_possible(it)