diff --git a/influxdb/client.py b/influxdb/client.py index 8146d68d..0ac8501d 100644 --- a/influxdb/client.py +++ b/influxdb/client.py @@ -193,7 +193,7 @@ def switch_user(self, username, password): self._password = password def request(self, url, method='GET', params=None, data=None, - expected_response_code=200, headers=None): + expected_response_code=200, headers=None, retries_sequence=None): """Make a HTTP request to the InfluxDB API. :param url: the path of the HTTP request, e.g. write, query, etc. @@ -227,7 +227,8 @@ def request(self, url, method='GET', params=None, data=None, # Try to send the request a maximum of three times. (see #103) # TODO (aviau): Make this configurable. - for i in range(0, 3): + retries_sequence = retries_sequence or [0, 0, 0] + for i, delay in enumerate(retries_sequence): try: response = self._session.request( method=method, @@ -242,10 +243,11 @@ def request(self, url, method='GET', params=None, data=None, ) break except requests.exceptions.ConnectionError as e: - if i < 2: - continue - else: + is_last = i == len(retries_sequence) + if is_last: raise e + else: + time.sleep(delay) if response.status_code >= 500 and response.status_code < 600: raise InfluxDBServerError(response.content) @@ -254,7 +256,7 @@ def request(self, url, method='GET', params=None, data=None, else: raise InfluxDBClientError(response.content, response.status_code) - def write(self, data, params=None, expected_response_code=204): + def write(self, data, params=None, expected_response_code=204, retries_sequence=None): """Write data to InfluxDB. :param data: the data to be written @@ -282,7 +284,8 @@ def write(self, data, params=None, expected_response_code=204): params=params, data=make_lines(data, precision).encode('utf-8'), expected_response_code=expected_response_code, - headers=headers + headers=headers, + retries_sequence=retries_sequence ) return True @@ -292,7 +295,8 @@ def query(self, epoch=None, expected_response_code=200, database=None, - raise_errors=True): + raise_errors=True, + retries_sequence=None): """Send a query to InfluxDB. :param query: the actual query string @@ -329,7 +333,8 @@ def query(self, method='GET', params=params, data=None, - expected_response_code=expected_response_code + expected_response_code=expected_response_code, + retries_sequence=retries_sequence ) data = response.json() @@ -353,6 +358,7 @@ def write_points(self, retention_policy=None, tags=None, batch_size=None, + retries_sequence=None, ): """Write to multiple time series names. @@ -388,14 +394,16 @@ def write_points(self, time_precision=time_precision, database=database, retention_policy=retention_policy, - tags=tags) + tags=tags, + retries_sequence=retries_sequence) return True else: return self._write_points(points=points, time_precision=time_precision, database=database, retention_policy=retention_policy, - tags=tags) + tags=tags, + retries_sequence=retries_sequence) def _batches(self, iterable, size): for i in xrange(0, len(iterable), size): @@ -406,7 +414,8 @@ def _write_points(self, time_precision, database, retention_policy, - tags): + tags, + retries_sequence): if time_precision not in ['n', 'u', 'ms', 's', 'm', 'h', None]: raise ValueError( "Invalid time precision is given. " @@ -440,7 +449,8 @@ def _write_points(self, self.write( data=data, params=params, - expected_response_code=204 + expected_response_code=204, + retries_sequence=retries_sequence ) return True
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: