From 49c149ef8a87622389107495981940cc90840ae5 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 12 Feb 2020 10:58:31 +0530 Subject: [PATCH 1/5] fix for Issue#339 --- src/crate/client/connection.py | 7 +++++-- src/crate/client/http.py | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/crate/client/connection.py b/src/crate/client/connection.py index 41a4f89c..5a6bb02b 100644 --- a/src/crate/client/connection.py +++ b/src/crate/client/connection.py @@ -27,8 +27,8 @@ class Connection(object): - - def __init__(self, servers=None, timeout=None, client=None, + + def __init__(self, servers=None, timeout=None, backoff_factor=0, client=None, verify_ssl_cert=False, ca_cert=None, error_trace=False, cert_file=None, key_file=None, username=None, password=None, schema=None): @@ -37,6 +37,7 @@ def __init__(self, servers=None, timeout=None, client=None, else: self.client = Client(servers, timeout=timeout, + backoff_factor=backoff_factor, verify_ssl_cert=verify_ssl_cert, ca_cert=ca_cert, error_trace=error_trace, @@ -103,6 +104,7 @@ def __exit__(self, *excs): def connect(servers=None, timeout=None, + backoff_factor=0, client=None, verify_ssl_cert=False, ca_cert=None, @@ -146,6 +148,7 @@ def connect(servers=None, """ return Connection(servers=servers, timeout=timeout, + backoff_factor=backoff_factor, client=client, verify_ssl_cert=verify_ssl_cert, ca_cert=ca_cert, diff --git a/src/crate/client/http.py b/src/crate/client/http.py index 774af18f..b15ad857 100644 --- a/src/crate/client/http.py +++ b/src/crate/client/http.py @@ -101,6 +101,7 @@ def request(self, username=None, password=None, schema=None, + backoff_factor=0, **kwargs): """Send a request @@ -130,7 +131,7 @@ def request(self, headers['Content-Type'] = 'application/json' kwargs['assert_same_host'] = False kwargs['redirect'] = False - kwargs['retries'] = Retry(read=0) + kwargs['retries'] = Retry(read=0,backoff_factor=backoff_factor) return self.pool.urlopen( method, path, @@ -274,6 +275,7 @@ class Client(object): def __init__(self, servers=None, timeout=None, + backoff_factor=0, verify_ssl_cert=False, ca_cert=None, error_trace=False, @@ -290,6 +292,7 @@ def __init__(self, self._inactive_servers = [] pool_kw = _pool_kw_args(verify_ssl_cert, ca_cert, cert_file, key_file) pool_kw['timeout'] = timeout + self.backoff_factor = backoff_factor self.server_pool = {} self._update_server_pool(servers, **pool_kw) self._pool_kw = pool_kw @@ -403,7 +406,7 @@ def _request(self, method, path, server=None, **kwargs): next_server = server or self._get_server() try: response = self.server_pool[next_server].request( - method, path, username=self.username, password=self.password, schema=self.schema, **kwargs) + method, path, username=self.username, password=self.password,backoff_factor=self.backoff_factor, schema=self.schema, **kwargs) redirect_location = response.get_redirect_location() if redirect_location and 300 <= response.status <= 308: redirect_server = _server_url(redirect_location) From 417ddeba91ff425f3e03cacc2cbfa843cecb64e2 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 4 Mar 2020 19:11:08 +0530 Subject: [PATCH 2/5] Added backoff_factor in connection to configure retry interval --- CHANGES.txt | 3 +++ docs/connect.txt | 13 +++++++++++++ src/crate/client/connection.py | 4 +++- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index f462b917..c4f28131 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -2,9 +2,12 @@ Changes for crate ================= + Unreleased ========== +- ”Added ``backoff_factor`` in connection to configure retry interval”. + - Added official Python 3.8 support. - Made it so that the SQLAlchemy dialect is now aware of the return type of the diff --git a/docs/connect.txt b/docs/connect.txt index 862b2ddd..6e99d933 100644 --- a/docs/connect.txt +++ b/docs/connect.txt @@ -169,6 +169,19 @@ the optional ``error_trace`` argument to ``True``, like so:: .. _authentication: +Backoff Factor +.............. + +When attempting to make a request, the connection can be configured so that retries +are made at lengthening time intervals. This can be configured like so: + >>>connection = client.connect(..., backoff_factor=0.1) + +The formula for this backoff_factor is: + +If ``backoff_factor`` is set to 0.1, then the delay between retries will be +0.0, 0.1, 0.2, 0.4, 0.8, etc. The maximum backoff factor cannot exceed 120 seconds. +By default this setting is 0, meaning that no backoff factor is present between retries. + Authentication ============== diff --git a/src/crate/client/connection.py b/src/crate/client/connection.py index 5a6bb02b..1a6aff95 100644 --- a/src/crate/client/connection.py +++ b/src/crate/client/connection.py @@ -142,7 +142,9 @@ def connect(servers=None, the username in the database. :param password: the password of the user in the database. - + :param backoff_factor: + (optional) + define the retry interval for unreachable servers in seconds >>> connect(['host1:4200', 'host2:4200']) > """ From 40400d9e652745304131b802b6c2a5efcb188629 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 12 Feb 2020 10:58:31 +0530 Subject: [PATCH 3/5] Added backoff_factor in connection to configure retry interval --- CHANGES.txt | 3 +++ docs/connect.txt | 13 +++++++++++++ src/crate/client/connection.py | 11 ++++++++--- src/crate/client/http.py | 7 +++++-- 4 files changed, 29 insertions(+), 5 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index f462b917..c4f28131 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -2,9 +2,12 @@ Changes for crate ================= + Unreleased ========== +- ”Added ``backoff_factor`` in connection to configure retry interval”. + - Added official Python 3.8 support. - Made it so that the SQLAlchemy dialect is now aware of the return type of the diff --git a/docs/connect.txt b/docs/connect.txt index 862b2ddd..6e99d933 100644 --- a/docs/connect.txt +++ b/docs/connect.txt @@ -169,6 +169,19 @@ the optional ``error_trace`` argument to ``True``, like so:: .. _authentication: +Backoff Factor +.............. + +When attempting to make a request, the connection can be configured so that retries +are made at lengthening time intervals. This can be configured like so: + >>>connection = client.connect(..., backoff_factor=0.1) + +The formula for this backoff_factor is: + +If ``backoff_factor`` is set to 0.1, then the delay between retries will be +0.0, 0.1, 0.2, 0.4, 0.8, etc. The maximum backoff factor cannot exceed 120 seconds. +By default this setting is 0, meaning that no backoff factor is present between retries. + Authentication ============== diff --git a/src/crate/client/connection.py b/src/crate/client/connection.py index 41a4f89c..1a6aff95 100644 --- a/src/crate/client/connection.py +++ b/src/crate/client/connection.py @@ -27,8 +27,8 @@ class Connection(object): - - def __init__(self, servers=None, timeout=None, client=None, + + def __init__(self, servers=None, timeout=None, backoff_factor=0, client=None, verify_ssl_cert=False, ca_cert=None, error_trace=False, cert_file=None, key_file=None, username=None, password=None, schema=None): @@ -37,6 +37,7 @@ def __init__(self, servers=None, timeout=None, client=None, else: self.client = Client(servers, timeout=timeout, + backoff_factor=backoff_factor, verify_ssl_cert=verify_ssl_cert, ca_cert=ca_cert, error_trace=error_trace, @@ -103,6 +104,7 @@ def __exit__(self, *excs): def connect(servers=None, timeout=None, + backoff_factor=0, client=None, verify_ssl_cert=False, ca_cert=None, @@ -140,12 +142,15 @@ def connect(servers=None, the username in the database. :param password: the password of the user in the database. - + :param backoff_factor: + (optional) + define the retry interval for unreachable servers in seconds >>> connect(['host1:4200', 'host2:4200']) > """ return Connection(servers=servers, timeout=timeout, + backoff_factor=backoff_factor, client=client, verify_ssl_cert=verify_ssl_cert, ca_cert=ca_cert, diff --git a/src/crate/client/http.py b/src/crate/client/http.py index 774af18f..b15ad857 100644 --- a/src/crate/client/http.py +++ b/src/crate/client/http.py @@ -101,6 +101,7 @@ def request(self, username=None, password=None, schema=None, + backoff_factor=0, **kwargs): """Send a request @@ -130,7 +131,7 @@ def request(self, headers['Content-Type'] = 'application/json' kwargs['assert_same_host'] = False kwargs['redirect'] = False - kwargs['retries'] = Retry(read=0) + kwargs['retries'] = Retry(read=0,backoff_factor=backoff_factor) return self.pool.urlopen( method, path, @@ -274,6 +275,7 @@ class Client(object): def __init__(self, servers=None, timeout=None, + backoff_factor=0, verify_ssl_cert=False, ca_cert=None, error_trace=False, @@ -290,6 +292,7 @@ def __init__(self, self._inactive_servers = [] pool_kw = _pool_kw_args(verify_ssl_cert, ca_cert, cert_file, key_file) pool_kw['timeout'] = timeout + self.backoff_factor = backoff_factor self.server_pool = {} self._update_server_pool(servers, **pool_kw) self._pool_kw = pool_kw @@ -403,7 +406,7 @@ def _request(self, method, path, server=None, **kwargs): next_server = server or self._get_server() try: response = self.server_pool[next_server].request( - method, path, username=self.username, password=self.password, schema=self.schema, **kwargs) + method, path, username=self.username, password=self.password,backoff_factor=self.backoff_factor, schema=self.schema, **kwargs) redirect_location = response.get_redirect_location() if redirect_location and 300 <= response.status <= 308: redirect_server = _server_url(redirect_location) From 1c2e1669ce25075451355a2ae515440a3dbf2675 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 16 Mar 2020 12:13:47 +0530 Subject: [PATCH 4/5] Added backoff_factor in connection to configure retry interval --- docs/connect.txt | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/docs/connect.txt b/docs/connect.txt index 6e99d933..947de3d8 100644 --- a/docs/connect.txt +++ b/docs/connect.txt @@ -173,14 +173,12 @@ Backoff Factor .............. When attempting to make a request, the connection can be configured so that retries -are made at lengthening time intervals. This can be configured like so: - >>>connection = client.connect(..., backoff_factor=0.1) +are made at lengthening time intervals.This can be configured like so:: -The formula for this backoff_factor is: + >>> connection = client.connect(..., backoff_factor=0.1) -If ``backoff_factor`` is set to 0.1, then the delay between retries will be -0.0, 0.1, 0.2, 0.4, 0.8, etc. The maximum backoff factor cannot exceed 120 seconds. -By default this setting is 0, meaning that no backoff factor is present between retries. +If ``backoff_factor``is set to 0.1,then the delay between retries will be 0.0, 0.1, 0.2, +0.4 etc.The maximum backoff factor cannot exceed 120 seconds and by default its value is 0 Authentication ============== From b85a0bad8b613e1893059fcaacd1295f3db8792e Mon Sep 17 00:00:00 2001 From: root Date: Fri, 27 Mar 2020 10:40:13 +0530 Subject: [PATCH 5/5] changes updated --- CHANGES.txt | 2 +- docs/connect.txt | 11 ----------- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index c4f28131..33fd98ca 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -6,7 +6,7 @@ Changes for crate Unreleased ========== -- ”Added ``backoff_factor`` in connection to configure retry interval”. +- Added ``backoff_factor`` in connection to configure retry interval. - Added official Python 3.8 support. diff --git a/docs/connect.txt b/docs/connect.txt index f7ca202e..947de3d8 100644 --- a/docs/connect.txt +++ b/docs/connect.txt @@ -173,23 +173,12 @@ Backoff Factor .............. When attempting to make a request, the connection can be configured so that retries -<<<<<<< HEAD are made at lengthening time intervals.This can be configured like so:: >>> connection = client.connect(..., backoff_factor=0.1) If ``backoff_factor``is set to 0.1,then the delay between retries will be 0.0, 0.1, 0.2, 0.4 etc.The maximum backoff factor cannot exceed 120 seconds and by default its value is 0 -======= -are made at lengthening time intervals. This can be configured like so: - >>>connection = client.connect(..., backoff_factor=0.1) - -The formula for this backoff_factor is: - -If ``backoff_factor`` is set to 0.1, then the delay between retries will be -0.0, 0.1, 0.2, 0.4, 0.8, etc. The maximum backoff factor cannot exceed 120 seconds. -By default this setting is 0, meaning that no backoff factor is present between retries. ->>>>>>> 40400d9e652745304131b802b6c2a5efcb188629 Authentication ==============