From c1bcce9692cdb1dfd4207e53d73a5334b284782b Mon Sep 17 00:00:00 2001 From: allegroai <> Date: Thu, 10 Oct 2019 21:10:18 +0300 Subject: [PATCH] Retry suppression --- trains/backend_interface/base.py | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/trains/backend_interface/base.py b/trains/backend_interface/base.py index 0503cc67..7bf9ecf5 100644 --- a/trains/backend_interface/base.py +++ b/trains/backend_interface/base.py @@ -19,6 +19,7 @@ from .session import SendError, SessionInterface class InterfaceBase(SessionInterface): """ Base class for a backend manager class """ _default_session = None + _num_retry_warning_display = 1 @property def session(self): @@ -44,6 +45,7 @@ class InterfaceBase(SessionInterface): @classmethod def _send(cls, session, req, ignore_errors=False, raise_on_errors=True, log=None, async_enable=False): """ Convenience send() method providing a standardized error reporting """ + num_retries = 0 while True: error_msg = '' try: @@ -61,8 +63,8 @@ class InterfaceBase(SessionInterface): except requests.exceptions.BaseHTTPError as e: res = None - if log: - log.warning('Failed sending %s: %s' % (str(type(req)), str(e))) + if log and num_retries >= cls._num_retry_warning_display: + log.warning('Retrying, previous request failed %s: %s' % (str(type(req)), str(e))) except MaxRequestSizeError as e: res = CallResult(meta=ResponseMeta.from_raw_data(status_code=400, text=str(e))) error_msg = 'Failed sending: %s' % str(e) @@ -75,8 +77,8 @@ class InterfaceBase(SessionInterface): res = None except Exception as e: res = None - if log: - log.warning('Failed sending %s: %s' % (str(type(req)), str(e))) + if log and num_retries >= cls._num_retry_warning_display: + log.warning('Retrying, previous request failed %s: %s' % (str(type(req)), str(e))) if res and res.meta.result_code <= 500: # Proper backend error/bad status code - raise or return @@ -84,6 +86,8 @@ class InterfaceBase(SessionInterface): raise SendError(res, error_msg) return res + num_retries += 1 + def send(self, req, ignore_errors=False, raise_on_errors=True, async_enable=False): return self._send(session=self.session, req=req, ignore_errors=ignore_errors, raise_on_errors=raise_on_errors, log=self.log, async_enable=async_enable)