Merge "Close ECAppIter's sub-generators before propagating GeneratorExit"
This commit is contained in:
@@ -919,6 +919,7 @@ class ResumingGetter(object):
|
|||||||
if nchunks % 5 == 0:
|
if nchunks % 5 == 0:
|
||||||
sleep()
|
sleep()
|
||||||
|
|
||||||
|
part_iter = None
|
||||||
try:
|
try:
|
||||||
while True:
|
while True:
|
||||||
start_byte, end_byte, length, headers, part = \
|
start_byte, end_byte, length, headers, part = \
|
||||||
@@ -930,9 +931,12 @@ class ResumingGetter(object):
|
|||||||
'entity_length': length, 'headers': headers,
|
'entity_length': length, 'headers': headers,
|
||||||
'part_iter': part_iter}
|
'part_iter': part_iter}
|
||||||
self.pop_range()
|
self.pop_range()
|
||||||
|
except GeneratorExit:
|
||||||
|
if part_iter:
|
||||||
|
part_iter.close()
|
||||||
|
raise
|
||||||
except StopIteration:
|
except StopIteration:
|
||||||
req.environ['swift.non_client_disconnect'] = True
|
req.environ['swift.non_client_disconnect'] = True
|
||||||
return
|
|
||||||
|
|
||||||
except ChunkReadTimeout:
|
except ChunkReadTimeout:
|
||||||
self.app.exception_occurred(node[0], _('Object'),
|
self.app.exception_occurred(node[0], _('Object'),
|
||||||
|
@@ -2001,7 +2001,7 @@ class TestECObjController(BaseObjectControllerMixin, unittest.TestCase):
|
|||||||
try:
|
try:
|
||||||
resp.body
|
resp.body
|
||||||
except ECDriverError:
|
except ECDriverError:
|
||||||
pass
|
resp._app_iter.close()
|
||||||
else:
|
else:
|
||||||
self.fail('invalid ec fragment response body did not blow up!')
|
self.fail('invalid ec fragment response body did not blow up!')
|
||||||
error_lines = self.logger.get_lines_for_level('error')
|
error_lines = self.logger.get_lines_for_level('error')
|
||||||
|
@@ -5620,9 +5620,8 @@ class TestObjectController(unittest.TestCase):
|
|||||||
|
|
||||||
# read most of the object, and disconnect
|
# read most of the object, and disconnect
|
||||||
fd.read(10)
|
fd.read(10)
|
||||||
fd.close()
|
sock.fd._sock.close()
|
||||||
sock.close()
|
sleep(0.1)
|
||||||
sleep(0)
|
|
||||||
|
|
||||||
# check for disconnect message!
|
# check for disconnect message!
|
||||||
expected = ['Client disconnected on read'] * 2
|
expected = ['Client disconnected on read'] * 2
|
||||||
@@ -5678,8 +5677,7 @@ class TestObjectController(unittest.TestCase):
|
|||||||
exp = 'HTTP/1.1 200'
|
exp = 'HTTP/1.1 200'
|
||||||
self.assertEqual(headers[:len(exp)], exp)
|
self.assertEqual(headers[:len(exp)], exp)
|
||||||
fd.read(1)
|
fd.read(1)
|
||||||
fd.close()
|
sock.fd._sock.close()
|
||||||
sock.close()
|
|
||||||
# Make sure the GC is run again for pythons without reference
|
# Make sure the GC is run again for pythons without reference
|
||||||
# counting
|
# counting
|
||||||
for i in range(4):
|
for i in range(4):
|
||||||
|
Reference in New Issue
Block a user