Merge "Fix error handling in proxy/controllers/base.py."

This commit is contained in:
Jenkins 2016-09-07 23:49:52 +00:00 committed by Gerrit Code Review
commit 37b59b0dd3
3 changed files with 8 additions and 3 deletions

View File

@ -467,6 +467,8 @@ class Range(object):
:param headerval: value of the header as a str :param headerval: value of the header as a str
""" """
def __init__(self, headerval): def __init__(self, headerval):
if not headerval:
raise ValueError('Invalid Range header: %r' % headerval)
headerval = headerval.replace(' ', '') headerval = headerval.replace(' ', '')
if not headerval.lower().startswith('bytes='): if not headerval.lower().startswith('bytes='):
raise ValueError('Invalid Range header: %s' % headerval) raise ValueError('Invalid Range header: %s' % headerval)

View File

@ -1061,6 +1061,7 @@ class ResumingGetter(object):
self.app.client_timeout) self.app.client_timeout)
self.app.logger.increment('client_timeouts') self.app.logger.increment('client_timeouts')
except GeneratorExit: except GeneratorExit:
exc_type, exc_value, exc_traceback = exc_info()
warn = True warn = True
try: try:
req_range = Range(self.backend_headers['Range']) req_range = Range(self.backend_headers['Range'])
@ -1068,11 +1069,12 @@ class ResumingGetter(object):
req_range = None req_range = None
if req_range and len(req_range.ranges) == 1: if req_range and len(req_range.ranges) == 1:
begin, end = req_range.ranges[0] begin, end = req_range.ranges[0]
if end is not None and begin is not None:
if end - begin + 1 == self.bytes_used_from_backend: if end - begin + 1 == self.bytes_used_from_backend:
warn = False warn = False
if not req.environ.get('swift.non_client_disconnect') and warn: if not req.environ.get('swift.non_client_disconnect') and warn:
self.app.logger.warning(_('Client disconnected on read')) self.app.logger.warning(_('Client disconnected on read'))
raise six.reraise(exc_type, exc_value, exc_traceback)
except Exception: except Exception:
self.app.logger.exception(_('Trying to send to client')) self.app.logger.exception(_('Trying to send to client'))
raise raise

View File

@ -249,6 +249,7 @@ class TestRange(unittest.TestCase):
6. any combination of the above 6. any combination of the above
""" """
_assert_invalid_range(None)
_assert_invalid_range('nonbytes=foobar,10-2') _assert_invalid_range('nonbytes=foobar,10-2')
_assert_invalid_range('bytes=5-3') _assert_invalid_range('bytes=5-3')
_assert_invalid_range('bytes=-') _assert_invalid_range('bytes=-')