From 94ca91a03fd32c33fac269a193302f4952750311 Mon Sep 17 00:00:00 2001
From: Mateusz Charytoniuk <mateusz.charytoniuk@protonmail.com>
Date: Mon, 16 Oct 2023 20:48:30 +0200
Subject: [PATCH] chore: prefill connection pools

---
 src/DatabaseConnectionPoolConfiguration.php              | 2 ++
 src/RedisConnectionPoolConfiguration.php                 | 2 ++
 .../DatabaseConfigurationProvider.php                    | 3 +++
 .../ConfigurationProvider/RedisConfigurationProvider.php | 2 ++
 .../DatabaseConnectionPoolRepositoryProvider.php         | 9 +++++----
 .../RedisConnectionPoolRepositoryProvider.php            | 9 +++++----
 6 files changed, 19 insertions(+), 8 deletions(-)

diff --git a/src/DatabaseConnectionPoolConfiguration.php b/src/DatabaseConnectionPoolConfiguration.php
index fe5f6206..1681fab6 100644
--- a/src/DatabaseConnectionPoolConfiguration.php
+++ b/src/DatabaseConnectionPoolConfiguration.php
@@ -20,6 +20,8 @@ readonly class DatabaseConnectionPoolConfiguration
         #[SensitiveParameter]
         public string $password,
         #[SensitiveParameter]
+        public int $poolSize,
+        #[SensitiveParameter]
         public int $port,
         #[SensitiveParameter]
         public string $username,
diff --git a/src/RedisConnectionPoolConfiguration.php b/src/RedisConnectionPoolConfiguration.php
index 9986d37e..3e56da1a 100644
--- a/src/RedisConnectionPoolConfiguration.php
+++ b/src/RedisConnectionPoolConfiguration.php
@@ -16,6 +16,8 @@ readonly class RedisConnectionPoolConfiguration
         #[SensitiveParameter]
         public string $password,
         #[SensitiveParameter]
+        public int $poolSize,
+        #[SensitiveParameter]
         public int $port,
         #[SensitiveParameter]
         public string $prefix,
diff --git a/src/SingletonProvider/ConfigurationProvider/DatabaseConfigurationProvider.php b/src/SingletonProvider/ConfigurationProvider/DatabaseConfigurationProvider.php
index 3442a3ba..6312452c 100644
--- a/src/SingletonProvider/ConfigurationProvider/DatabaseConfigurationProvider.php
+++ b/src/SingletonProvider/ConfigurationProvider/DatabaseConfigurationProvider.php
@@ -20,6 +20,7 @@ use Nette\Schema\Schema;
  *         host: string,
  *         log_queries: bool,
  *         password: string,
+ *         pool_size: int,
  *         port: int,
  *         username: string,
  *     }>
@@ -43,6 +44,7 @@ final readonly class DatabaseConfigurationProvider extends ConfigurationProvider
             'host' => Expect::string()->min(1)->required(),
             'log_queries' => Expect::bool()->required(),
             'password' => Expect::string()->required(),
+            'pool_size' => Expect::int()->min(1)->required(),
             'port' => Expect::int()->min(1)->max(65535)->required(),
             'username' => Expect::string()->min(1)->required(),
         ]);
@@ -63,6 +65,7 @@ final readonly class DatabaseConfigurationProvider extends ConfigurationProvider
                     host: $connectionPoolConfiguration->host,
                     logQueries: $connectionPoolConfiguration->log_queries,
                     password: $connectionPoolConfiguration->password,
+                    poolSize: $connectionPoolConfiguration->pool_size,
                     port: $connectionPoolConfiguration->port,
                     username: $connectionPoolConfiguration->username,
                 ),
diff --git a/src/SingletonProvider/ConfigurationProvider/RedisConfigurationProvider.php b/src/SingletonProvider/ConfigurationProvider/RedisConfigurationProvider.php
index 0261d127..fb95a128 100644
--- a/src/SingletonProvider/ConfigurationProvider/RedisConfigurationProvider.php
+++ b/src/SingletonProvider/ConfigurationProvider/RedisConfigurationProvider.php
@@ -40,6 +40,7 @@ final readonly class RedisConfigurationProvider extends ConfigurationProvider
             'db_index' => Expect::int()->min(0)->required(),
             'host' => Expect::string()->min(1)->required(),
             'password' => Expect::string()->required(),
+            'pool_size' => Expect::int()->min(1)->required(),
             'port' => Expect::int()->min(1)->max(65535)->required(),
             'prefix' => Expect::string()->min(1)->required(),
             'timeout' => Expect::int()->min(0)->required(),
@@ -59,6 +60,7 @@ final readonly class RedisConfigurationProvider extends ConfigurationProvider
                     dbIndex: $connectionPoolConfiguration->db_index,
                     host: $connectionPoolConfiguration->host,
                     password: $connectionPoolConfiguration->password,
+                    poolSize: $connectionPoolConfiguration->pool_size,
                     port: $connectionPoolConfiguration->port,
                     prefix: $connectionPoolConfiguration->prefix,
                     timeout: $connectionPoolConfiguration->timeout,
diff --git a/src/SingletonProvider/DatabaseConnectionPoolRepositoryProvider.php b/src/SingletonProvider/DatabaseConnectionPoolRepositoryProvider.php
index 1e461b4d..ee16d39e 100644
--- a/src/SingletonProvider/DatabaseConnectionPoolRepositoryProvider.php
+++ b/src/SingletonProvider/DatabaseConnectionPoolRepositoryProvider.php
@@ -46,10 +46,11 @@ final readonly class DatabaseConnectionPoolRepositoryProvider extends SingletonP
                     PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT,
                 ])
             ;
-            $databaseConnectionPoolRepository->databaseConnectionPool->put(
-                $name,
-                new PDOPool($pdoConfig),
-            );
+
+            $pdoPool = new PDOPool($pdoConfig, $connectionPoolConfiguration->poolSize);
+            $pdoPool->fill();
+
+            $databaseConnectionPoolRepository->databaseConnectionPool->put($name, $pdoPool);
         }
 
         return $databaseConnectionPoolRepository;
diff --git a/src/SingletonProvider/RedisConnectionPoolRepositoryProvider.php b/src/SingletonProvider/RedisConnectionPoolRepositoryProvider.php
index 48c4a745..7e494f5a 100644
--- a/src/SingletonProvider/RedisConnectionPoolRepositoryProvider.php
+++ b/src/SingletonProvider/RedisConnectionPoolRepositoryProvider.php
@@ -37,10 +37,11 @@ final readonly class RedisConnectionPoolRepositoryProvider extends SingletonProv
                 ->withDbIndex($connectionPoolConfiguration->dbIndex)
                 ->withTimeout($connectionPoolConfiguration->timeout)
             ;
-            $redisConnectionPoolRepository->redisConnectionPool->put(
-                $name,
-                new RedisPool($redisConfig),
-            );
+
+            $redisPool = new RedisPool($redisConfig, $connectionPoolConfiguration->poolSize);
+            $redisPool->fill();
+
+            $redisConnectionPoolRepository->redisConnectionPool->put($name, $redisPool);
         }
 
         return $redisConnectionPoolRepository;
-- 
GitLab