From 109456cb08885fde28dc935759d96494c9f5d577 Mon Sep 17 00:00:00 2001 From: Ofer Affias Date: Thu, 10 Mar 2016 10:42:12 +0200 Subject: [PATCH 1/2] added retry delay when there is connection error, default is 0, backward compatible --- influxdb/client.py | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/influxdb/client.py b/influxdb/client.py index 8146d68d..310f471f 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, retry_delay_sec=None): """Make a HTTP request to the InfluxDB API. :param url: the path of the HTTP request, e.g. write, query, etc. @@ -243,7 +243,8 @@ def request(self, url, method='GET', params=None, data=None, break except requests.exceptions.ConnectionError as e: if i < 2: - continue + if retry_delay_sec: + time.sleep(retry_delay_sec) else: raise e @@ -254,7 +255,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, retry_delay_sec=None): """Write data to InfluxDB. :param data: the data to be written @@ -282,7 +283,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, + retry_delay_sec=retry_delay_sec ) return True @@ -292,7 +294,8 @@ def query(self, epoch=None, expected_response_code=200, database=None, - raise_errors=True): + raise_errors=True, + retry_delay_sec=None): """Send a query to InfluxDB. :param query: the actual query string @@ -329,7 +332,8 @@ def query(self, method='GET', params=params, data=None, - expected_response_code=expected_response_code + expected_response_code=expected_response_code, + retry_delay_sec=retry_delay_sec ) data = response.json() @@ -353,6 +357,7 @@ def write_points(self, retention_policy=None, tags=None, batch_size=None, + retry_delay_sec=None, ): """Write to multiple time series names. @@ -388,14 +393,16 @@ def write_points(self, time_precision=time_precision, database=database, retention_policy=retention_policy, - tags=tags) + tags=tags, + retry_delay_sec=retry_delay_sec) return True else: return self._write_points(points=points, time_precision=time_precision, database=database, retention_policy=retention_policy, - tags=tags) + tags=tags, + retry_delay_sec=retry_delay_sec) def _batches(self, iterable, size): for i in xrange(0, len(iterable), size): @@ -406,7 +413,8 @@ def _write_points(self, time_precision, database, retention_policy, - tags): + tags, + retry_delay_sec): if time_precision not in ['n', 'u', 'ms', 's', 'm', 'h', None]: raise ValueError( "Invalid time precision is given. " @@ -440,7 +448,8 @@ def _write_points(self, self.write( data=data, params=params, - expected_response_code=204 + expected_response_code=204, + retry_delay_sec=retry_delay_sec ) return True From 70f33a06ff4e7805c0c23d05cecc61f3fe44a1c6 Mon Sep 17 00:00:00 2001 From: Ofer Affias Date: Thu, 10 Mar 2016 13:52:41 +0200 Subject: [PATCH 2/2] enhanced retry spec - using sequance of delays defines the total delay and the intervals --- influxdb/client.py | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/influxdb/client.py b/influxdb/client.py index 310f471f..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, retry_delay_sec=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,11 +243,11 @@ def request(self, url, method='GET', params=None, data=None, ) break except requests.exceptions.ConnectionError as e: - if i < 2: - if retry_delay_sec: - time.sleep(retry_delay_sec) - 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) @@ -255,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, retry_delay_sec=None): + def write(self, data, params=None, expected_response_code=204, retries_sequence=None): """Write data to InfluxDB. :param data: the data to be written @@ -284,7 +285,7 @@ def write(self, data, params=None, expected_response_code=204, retry_delay_sec=N data=make_lines(data, precision).encode('utf-8'), expected_response_code=expected_response_code, headers=headers, - retry_delay_sec=retry_delay_sec + retries_sequence=retries_sequence ) return True @@ -295,7 +296,7 @@ def query(self, expected_response_code=200, database=None, raise_errors=True, - retry_delay_sec=None): + retries_sequence=None): """Send a query to InfluxDB. :param query: the actual query string @@ -333,7 +334,7 @@ def query(self, params=params, data=None, expected_response_code=expected_response_code, - retry_delay_sec=retry_delay_sec + retries_sequence=retries_sequence ) data = response.json() @@ -357,7 +358,7 @@ def write_points(self, retention_policy=None, tags=None, batch_size=None, - retry_delay_sec=None, + retries_sequence=None, ): """Write to multiple time series names. @@ -394,7 +395,7 @@ def write_points(self, database=database, retention_policy=retention_policy, tags=tags, - retry_delay_sec=retry_delay_sec) + retries_sequence=retries_sequence) return True else: return self._write_points(points=points, @@ -402,7 +403,7 @@ def write_points(self, database=database, retention_policy=retention_policy, tags=tags, - retry_delay_sec=retry_delay_sec) + retries_sequence=retries_sequence) def _batches(self, iterable, size): for i in xrange(0, len(iterable), size): @@ -414,7 +415,7 @@ def _write_points(self, database, retention_policy, tags, - retry_delay_sec): + retries_sequence): if time_precision not in ['n', 'u', 'ms', 's', 'm', 'h', None]: raise ValueError( "Invalid time precision is given. " @@ -449,7 +450,7 @@ def _write_points(self, data=data, params=params, expected_response_code=204, - retry_delay_sec=retry_delay_sec + retries_sequence=retries_sequence ) return True pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

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:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy