Merge "Fix exceeding retries"
This commit is contained in:
commit
25a113b045
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
fixes:
|
||||||
|
- |
|
||||||
|
Fixes exceeding retries. Before this fix running sushy for longer it no
|
||||||
|
longer retried for temporary failures when it should.
|
|
@ -95,7 +95,8 @@ class Connector(object):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def _op(self, method, path='', data=None, headers=None, blocking=False,
|
def _op(self, method, path='', data=None, headers=None, blocking=False,
|
||||||
timeout=60, **extra_session_req_kwargs):
|
timeout=60, server_side_retries_left=None,
|
||||||
|
**extra_session_req_kwargs):
|
||||||
"""Generic RESTful request handler.
|
"""Generic RESTful request handler.
|
||||||
|
|
||||||
:param method: The HTTP method to be used, e.g: GET, POST,
|
:param method: The HTTP method to be used, e.g: GET, POST,
|
||||||
|
@ -105,6 +106,8 @@ class Connector(object):
|
||||||
:param headers: Optional dictionary of headers.
|
:param headers: Optional dictionary of headers.
|
||||||
:param blocking: Whether to block for asynchronous operations.
|
:param blocking: Whether to block for asynchronous operations.
|
||||||
:param timeout: Max time in seconds to wait for blocking async call.
|
:param timeout: Max time in seconds to wait for blocking async call.
|
||||||
|
:param server_side_retries_left: Remaining retries. If not provided
|
||||||
|
will use limit provided by instance's server_side_retries
|
||||||
:param extra_session_req_kwargs: Optional keyword argument to pass
|
:param extra_session_req_kwargs: Optional keyword argument to pass
|
||||||
requests library arguments which would pass on to requests session
|
requests library arguments which would pass on to requests session
|
||||||
object.
|
object.
|
||||||
|
@ -112,6 +115,10 @@ class Connector(object):
|
||||||
:raises: ConnectionError
|
:raises: ConnectionError
|
||||||
:raises: HTTPError
|
:raises: HTTPError
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
if server_side_retries_left is None:
|
||||||
|
server_side_retries_left = self._server_side_retries
|
||||||
|
|
||||||
url = path if urlparse.urlparse(path).netloc else urlparse.urljoin(
|
url = path if urlparse.urlparse(path).netloc else urlparse.urljoin(
|
||||||
self._url, path)
|
self._url, path)
|
||||||
headers = headers or {}
|
headers = headers or {}
|
||||||
|
@ -208,15 +215,19 @@ class Connector(object):
|
||||||
except exceptions.ServerSideError as e:
|
except exceptions.ServerSideError as e:
|
||||||
if ((method.lower() == 'get'
|
if ((method.lower() == 'get'
|
||||||
or self.check_retry_on_exception(e.message))
|
or self.check_retry_on_exception(e.message))
|
||||||
and self._server_side_retries > 0):
|
and server_side_retries_left > 0):
|
||||||
LOG.warning('Got server side error %s in response to a '
|
LOG.warning('Got server side error %s in response to a '
|
||||||
'GET request, retrying after %d seconds',
|
'GET request, retrying after %d seconds. Retries '
|
||||||
e, self._server_side_retries)
|
'left %d.',
|
||||||
|
e, self._server_side_retries_delay,
|
||||||
|
server_side_retries_left)
|
||||||
time.sleep(self._server_side_retries_delay)
|
time.sleep(self._server_side_retries_delay)
|
||||||
self._server_side_retries -= 1
|
server_side_retries_left -= 1
|
||||||
return self._op(method, path, data=data, headers=headers,
|
return self._op(
|
||||||
blocking=blocking, timeout=timeout,
|
method, path, data=data, headers=headers,
|
||||||
**extra_session_req_kwargs)
|
blocking=blocking, timeout=timeout,
|
||||||
|
server_side_retries_left=server_side_retries_left,
|
||||||
|
**extra_session_req_kwargs)
|
||||||
else:
|
else:
|
||||||
raise
|
raise
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue