From e4abe888a2330ed619567880f46dac5649c15456 Mon Sep 17 00:00:00 2001 From: "matthew.richards@stfc.ac.uk" Date: Tue, 6 Apr 2021 09:06:41 +0000 Subject: [PATCH] #209: Make client handling values configurable --- config.json.example | 4 +++- datagateway_api/common/config.py | 12 ++++++++++ .../common/icat/icat_client_pool.py | 6 ++++- datagateway_api/common/icat/lru_cache.py | 4 +++- test/test_config.py | 22 ++++++++++++++++++- 5 files changed, 44 insertions(+), 4 deletions(-) diff --git a/config.json.example b/config.json.example index deae7156..5dafee39 100644 --- a/config.json.example +++ b/config.json.example @@ -1,6 +1,8 @@ { "backend": "db", - "client_cache_size": 28, + "client_cache_size": 5, + "client_pool_init_size": 2, + "client_pool_max_capacity": 5, "DB_URL": "mysql+pymysql://icatdbuser:icatdbuserpw@localhost:3306/icatdb", "ICAT_URL": "https://localhost:8181", "icat_check_cert": false, diff --git a/datagateway_api/common/config.py b/datagateway_api/common/config.py index d45507c7..adccd267 100644 --- a/datagateway_api/common/config.py +++ b/datagateway_api/common/config.py @@ -40,6 +40,18 @@ def get_client_cache_size(self): except KeyError: sys.exit("Missing config value, client_cache_size") + def get_client_pool_init_size(self): + try: + return self.config["client_pool_init_size"] + except KeyError: + sys.exit("Missing config value, client_pool_init_size") + + def get_client_pool_max_capacity(self): + try: + return self.config["client_pool_max_capacity"] + except KeyError: + sys.exit("Missing config value, client_pool_max_capacity") + def get_db_url(self): try: return self.config["DB_URL"] diff --git a/datagateway_api/common/icat/icat_client_pool.py b/datagateway_api/common/icat/icat_client_pool.py index ff3812aa..bb684570 100644 --- a/datagateway_api/common/icat/icat_client_pool.py +++ b/datagateway_api/common/icat/icat_client_pool.py @@ -32,7 +32,11 @@ def create_client_pool(): """ return ObjectPool( - ICATClient, min_init=5, max_capacity=20, max_reusable=0, expires=0, + ICATClient, + min_init=config.get_client_pool_init_size(), + max_capacity=config.get_client_pool_max_capacity(), + max_reusable=0, + expires=0, ) diff --git a/datagateway_api/common/icat/lru_cache.py b/datagateway_api/common/icat/lru_cache.py index 23ae2790..313d9250 100644 --- a/datagateway_api/common/icat/lru_cache.py +++ b/datagateway_api/common/icat/lru_cache.py @@ -2,6 +2,8 @@ from cachetools.lru import LRUCache +from datagateway_api.common.config import config + log = logging.getLogger() @@ -17,7 +19,7 @@ class ExtendedLRUCache(LRUCache): """ def __init__(self): - super().__init__(maxsize=8) + super().__init__(maxsize=config.get_client_cache_size()) def popitem(self): key, client = super().popitem() diff --git a/test/test_config.py b/test/test_config.py index a3a4a910..78e74c95 100644 --- a/test/test_config.py +++ b/test/test_config.py @@ -33,13 +33,33 @@ def test_invalid_backend_type(self, invalid_config): class TestGetClientCacheSize: def test_valid_client_cache_size(self, valid_config): cache_size = valid_config.get_client_cache_size() - assert cache_size == 28 + assert cache_size == 5 def test_invalid_client_cache_size(self, invalid_config): with pytest.raises(SystemExit): invalid_config.get_client_cache_size() +class TestGetClientPoolInitSize: + def test_valid_client_pool_init_size(self, valid_config): + pool_init_size = valid_config.get_client_pool_init_size() + assert pool_init_size == 2 + + def test_invalid_client_cache_size(self, invalid_config): + with pytest.raises(SystemExit): + invalid_config.get_client_pool_init_size() + + +class TestGetClientPoolMaxCapacity: + def test_valid_client_pool_init_size(self, valid_config): + pool_max_capacity = valid_config.get_client_pool_max_capacity() + assert pool_max_capacity == 5 + + def test_invalid_client_cache_size(self, invalid_config): + with pytest.raises(SystemExit): + invalid_config.get_client_pool_max_capacity() + + class TestGetDBURL: def test_valid_db_url(self, valid_config): db_url = valid_config.get_db_url()