From 5613e6f51149289f1095748b11fa04572992112b Mon Sep 17 00:00:00 2001 From: Jakub Bednar Date: Mon, 22 Mar 2021 16:49:10 +0100 Subject: [PATCH 1/4] feat: allow to configure to connection pool maxsize --- README.rst | 2 ++ influxdb_client/client/influxdb_client.py | 35 ++++++++++++++++------- tests/config.ini | 1 + tests/config.toml | 1 + tests/test_InfluxDBClient.py | 11 +++++++ 5 files changed, 40 insertions(+), 10 deletions(-) diff --git a/README.rst b/README.rst index 12b9a52b..697061ba 100644 --- a/README.rst +++ b/README.rst @@ -174,6 +174,7 @@ The following options are supported: - ``timeout`` - socket timeout in ms (default value is 10000) - ``verify_ssl`` - set this to false to skip verifying SSL certificate when calling API from https server - ``ssl_ca_cert`` - set this to customize the certificate file to verify the peer +- ``connection_pool_maxsize`` - set the number of connections to save that can be reused by urllib3 .. code-block:: python @@ -200,6 +201,7 @@ Supported properties are: - ``INFLUXDB_V2_TIMEOUT`` - socket timeout in ms (default value is 10000) - ``INFLUXDB_V2_VERIFY_SSL`` - set this to false to skip verifying SSL certificate when calling API from https server - ``INFLUXDB_V2_SSL_CA_CERT`` - set this to customize the certificate file to verify the peer +- ``INFLUXDB_V2_CONNECTION_POOL_MAXSIZE`` - set this to customize the certificate file to verify the peer .. code-block:: python diff --git a/influxdb_client/client/influxdb_client.py b/influxdb_client/client/influxdb_client.py index e078f50c..40f991a9 100644 --- a/influxdb_client/client/influxdb_client.py +++ b/influxdb_client/client/influxdb_client.py @@ -35,6 +35,8 @@ def __init__(self, url, token, debug=None, timeout=10000, enable_gzip=False, org :key bool verify_ssl: Set this to false to skip verifying SSL certificate when calling API from https server. :key str ssl_ca_cert: Set this to customize the certificate file to verify the peer. :key str proxy: Set this to configure the http proxy to be used (ex. http://localhost:3128) + :key int connection_pool_maxsize: Number of connections to save that can be reused by urllib3. + Defaults to "multiprocessing.cpu_count() * 5". :key urllib3.util.retry.Retry retries: Set the default retry strategy that is used for all HTTP requests except batching writes. As a default there is no one retry strategy. @@ -56,6 +58,7 @@ def __init__(self, url, token, debug=None, timeout=10000, enable_gzip=False, org conf.verify_ssl = kwargs.get('verify_ssl', True) conf.ssl_ca_cert = kwargs.get('ssl_ca_cert', None) conf.proxy = kwargs.get('proxy', None) + conf.connection_pool_maxsize = kwargs.get('connection_pool_maxsize', conf.connection_pool_maxsize) auth_token = self.token auth_header_name = "Authorization" @@ -82,6 +85,7 @@ def from_config_file(cls, config_file: str = "config.ini", debug=None, enable_gz - timeout, - verify_ssl - ssl_ca_cert + - connection_pool_maxsize config.ini example:: @@ -90,6 +94,7 @@ def from_config_file(cls, config_file: str = "config.ini", debug=None, enable_gz org=my-org token=my-token timeout=6000 + connection_pool_maxsize=25 [tags] id = 132-987-655 @@ -103,6 +108,7 @@ def from_config_file(cls, config_file: str = "config.ini", debug=None, enable_gz token = "my-token" org = "my-org" timeout = 6000 + connection_pool_maxsize = 25 [tags] id = "132-987-655" @@ -137,18 +143,19 @@ def config_value(key: str): if config.has_option('influx2', 'ssl_ca_cert'): ssl_ca_cert = config_value('ssl_ca_cert') + connection_pool_maxsize = None + if config.has_option('influx2', 'connection_pool_maxsize'): + connection_pool_maxsize = config_value('connection_pool_maxsize') + default_tags = None if config.has_section('tags'): tags = {k: v.strip('"') for k, v in config.items('tags')} default_tags = dict(tags) - if timeout: - return cls(url, token, debug=debug, timeout=int(timeout), org=org, default_tags=default_tags, - enable_gzip=enable_gzip, verify_ssl=_to_bool(verify_ssl), ssl_ca_cert=ssl_ca_cert) - - return cls(url, token, debug=debug, org=org, default_tags=default_tags, enable_gzip=enable_gzip, - verify_ssl=_to_bool(verify_ssl), ssl_ca_cert=ssl_ca_cert) + return cls(url, token, debug=debug, timeout=_to_int(timeout), org=org, default_tags=default_tags, + enable_gzip=enable_gzip, verify_ssl=_to_bool(verify_ssl), ssl_ca_cert=ssl_ca_cert, + connection_pool_maxsize=_to_int(connection_pool_maxsize)) @classmethod def from_env_properties(cls, debug=None, enable_gzip=False): @@ -162,6 +169,7 @@ def from_env_properties(cls, debug=None, enable_gzip=False): - INFLUXDB_V2_TIMEOUT - INFLUXDB_V2_VERIFY_SSL - INFLUXDB_V2_SSL_CA_CERT + - INFLUXDB_V2_CONNECTION_POOL_MAXSIZE """ url = os.getenv('INFLUXDB_V2_URL', "http://localhost:8086") token = os.getenv('INFLUXDB_V2_TOKEN', "my-token") @@ -169,6 +177,7 @@ def from_env_properties(cls, debug=None, enable_gzip=False): org = os.getenv('INFLUXDB_V2_ORG', "my-org") verify_ssl = os.getenv('INFLUXDB_V2_VERIFY_SSL', "True") ssl_ca_cert = os.getenv('INFLUXDB_V2_SSL_CA_CERT', None) + connection_pool_maxsize = os.getenv('INFLUXDB_V2_CONNECTION_POOL_MAXSIZE', None) default_tags = dict() @@ -176,8 +185,9 @@ def from_env_properties(cls, debug=None, enable_gzip=False): if key.startswith("INFLUXDB_V2_TAG_"): default_tags[key[16:].lower()] = value - return cls(url, token, debug=debug, timeout=int(timeout), org=org, default_tags=default_tags, - enable_gzip=enable_gzip, verify_ssl=_to_bool(verify_ssl), ssl_ca_cert=ssl_ca_cert) + return cls(url, token, debug=debug, timeout=_to_int(timeout), org=org, default_tags=default_tags, + enable_gzip=enable_gzip, verify_ssl=_to_bool(verify_ssl), ssl_ca_cert=ssl_ca_cert, + connection_pool_maxsize=_to_int(connection_pool_maxsize)) def write_api(self, write_options=WriteOptions(), point_settings=PointSettings()) -> WriteApi: """ @@ -322,5 +332,10 @@ def update_request_body(self, path: str, body): return _body -def _to_bool(verify_ssl): - return str(verify_ssl).lower() in ("yes", "true") +def _to_bool(bool_value): + return str(bool_value).lower() in ("yes", "true") + + +def _to_int(int_value): + return int(int_value) if int_value is not None else None + diff --git a/tests/config.ini b/tests/config.ini index 8b5f807b..a5897fc2 100644 --- a/tests/config.ini +++ b/tests/config.ini @@ -3,6 +3,7 @@ url=http://localhost:8086 org=my-org token=my-token timeout=6000 +connection_pool_maxsize=55 [tags] id = 132-987-655 diff --git a/tests/config.toml b/tests/config.toml index 8f9522ea..ae4126e6 100644 --- a/tests/config.toml +++ b/tests/config.toml @@ -4,6 +4,7 @@ org = "my-org" active = true timeout = 6000 + connection_pool_maxsize = 55 [tags] id = "132-987-655" diff --git a/tests/test_InfluxDBClient.py b/tests/test_InfluxDBClient.py index 894a7f68..6ad96e2a 100644 --- a/tests/test_InfluxDBClient.py +++ b/tests/test_InfluxDBClient.py @@ -17,6 +17,10 @@ def tearDown(self) -> None: if hasattr(self, 'httpd_thread'): self.httpd_thread.join() + def test_default_conf(self): + self.client = InfluxDBClient(url="http://localhost:8086", token="my-token", org="my-org") + self.assertIsNotNone(self.client.api_client.configuration.connection_pool_maxsize) + def test_TrailingSlashInUrl(self): self.client = InfluxDBClient(url="http://localhost:8086", token="my-token", org="my-org") self.assertEqual('http://localhost:8086', self.client.api_client.configuration.host) @@ -66,6 +70,7 @@ def assertConfig(self): self.assertEqual("132-987-655", self.client.default_tags["id"]) self.assertEqual("California Miner", self.client.default_tags["customer"]) self.assertEqual("${env.data_center}", self.client.default_tags["data_center"]) + self.assertEqual(55, self.client.api_client.configuration.connection_pool_maxsize) def test_init_from_file_ssl_default(self): self.client = InfluxDBClient.from_config_file(f'{os.path.dirname(__file__)}/config.ini') @@ -113,6 +118,12 @@ def test_init_from_env_ssl_ca_cert(self): self.assertEqual("/my/custom/path/to/cert", self.client.api_client.configuration.ssl_ca_cert) + def test_init_from_env_connection_pool_maxsize(self): + os.environ["INFLUXDB_V2_CONNECTION_POOL_MAXSIZE"] = "29" + self.client = InfluxDBClient.from_env_properties() + + self.assertEqual(29, self.client.api_client.configuration.connection_pool_maxsize) + def _start_http_server(self): import http.server import ssl From 27ca728b303c0a9d040ed0524039463598976897 Mon Sep 17 00:00:00 2001 From: Jakub Bednar Date: Mon, 22 Mar 2021 16:52:47 +0100 Subject: [PATCH 2/4] docs: updated CHANGELOG.md --- CHANGELOG.md | 3 ++- influxdb_client/client/influxdb_client.py | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6240f3f2..725f952f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,8 @@ ## 1.16.0 [unreleased] ### Features -1. [#203](https://github.com/influxdata/influxdb-client-python/pull/203): Allow configuring client via TOML file. +1. [#203](https://github.com/influxdata/influxdb-client-python/pull/203): Allowed configuring a client via TOML file +1. [#215](https://github.com/influxdata/influxdb-client-python/pull/215): Allowed to configure a connection pool maxsize ### Bug Fixes 1. [#206](https://github.com/influxdata/influxdb-client-python/pull/207): Use default (system) certificates instead of Mozilla's root certificates (certifi.where()) diff --git a/influxdb_client/client/influxdb_client.py b/influxdb_client/client/influxdb_client.py index 40f991a9..cb027e92 100644 --- a/influxdb_client/client/influxdb_client.py +++ b/influxdb_client/client/influxdb_client.py @@ -338,4 +338,3 @@ def _to_bool(bool_value): def _to_int(int_value): return int(int_value) if int_value is not None else None - From 5afaff4d3a26ac37a00933a5a49263675f74c3fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Bedn=C3=A1=C5=99?= Date: Fri, 26 Mar 2021 11:26:23 +0100 Subject: [PATCH 3/4] docs: Updated CHANGELOG.md Co-authored-by: Robert Hajek --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 725f952f..6cd0134b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ ## 1.16.0 [unreleased] ### Features -1. [#203](https://github.com/influxdata/influxdb-client-python/pull/203): Allowed configuring a client via TOML file +1. [#203](https://github.com/influxdata/influxdb-client-python/pull/203): Configure a client via TOML file 1. [#215](https://github.com/influxdata/influxdb-client-python/pull/215): Allowed to configure a connection pool maxsize ### Bug Fixes From bc63fe60ba494cbc65578b5f9bb4ab653ccda023 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Bedn=C3=A1=C5=99?= Date: Fri, 26 Mar 2021 11:26:45 +0100 Subject: [PATCH 4/4] docs: update CHANGELOG.md Co-authored-by: Robert Hajek --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6cd0134b..633acd28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ### Features 1. [#203](https://github.com/influxdata/influxdb-client-python/pull/203): Configure a client via TOML file -1. [#215](https://github.com/influxdata/influxdb-client-python/pull/215): Allowed to configure a connection pool maxsize +1. [#215](https://github.com/influxdata/influxdb-client-python/pull/215): Configure a connection pool maxsize ### Bug Fixes 1. [#206](https://github.com/influxdata/influxdb-client-python/pull/207): Use default (system) certificates instead of Mozilla's root certificates (certifi.where()) 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