diff --git a/src/DatabaseConnectionPoolConfiguration.php b/src/DatabaseConnectionPoolConfiguration.php index 1681fab6da68cca735e740b40819c39f7ca6275b..586a22a67d00e59da411881f59e2df4b5286ef1e 100644 --- a/src/DatabaseConnectionPoolConfiguration.php +++ b/src/DatabaseConnectionPoolConfiguration.php @@ -20,6 +20,8 @@ readonly class DatabaseConnectionPoolConfiguration #[SensitiveParameter] public string $password, #[SensitiveParameter] + public bool $poolPrefill, + #[SensitiveParameter] public int $poolSize, #[SensitiveParameter] public int $port, diff --git a/src/DependencyInjectionContainer.php b/src/DependencyInjectionContainer.php index 06550b49c196e48563431ec3ab293492983fff72..94ff613281e783223270881e46a8724e92606f32 100644 --- a/src/DependencyInjectionContainer.php +++ b/src/DependencyInjectionContainer.php @@ -13,6 +13,7 @@ use ReflectionClass; use ReflectionFunction; use RuntimeException; use Swoole\Coroutine\WaitGroup; +use Throwable; use function Swoole\Coroutine\run; @@ -260,10 +261,17 @@ readonly class DependencyInjectionContainer return $this->singletons->get($className); } - $singleton = $this->doMakeSingleton($className, $previous); + try { + $singleton = $this->doMakeSingleton($className, $previous); - $this->singletons->set($className, $singleton); + $this->singletons->set($className, $singleton); - return $singleton; + return $singleton; + } catch (Throwable $throwable) { + throw new LogicException( + message: 'Error while building: '.$className, + previous: $throwable, + ); + } } } diff --git a/src/RedisConnectionPoolConfiguration.php b/src/RedisConnectionPoolConfiguration.php index 3e56da1af42c835a4e81924b8f16f50bcb9cd9dd..ff9f65ddc7a0b27d7cb7ee6eb8cbfbbdea47ccad 100644 --- a/src/RedisConnectionPoolConfiguration.php +++ b/src/RedisConnectionPoolConfiguration.php @@ -16,6 +16,8 @@ readonly class RedisConnectionPoolConfiguration #[SensitiveParameter] public string $password, #[SensitiveParameter] + public bool $poolPrefill, + #[SensitiveParameter] public int $poolSize, #[SensitiveParameter] public int $port, diff --git a/src/SingletonProvider/ConfigurationProvider/DatabaseConfigurationProvider.php b/src/SingletonProvider/ConfigurationProvider/DatabaseConfigurationProvider.php index 6312452cf71aade059a3a87d38d4d729212c8dbb..aeacb6333ac5f17b075143a080de91958c4eba3b 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_prefill: bool, * pool_size: int, * port: int, * username: string, @@ -44,6 +45,7 @@ final readonly class DatabaseConfigurationProvider extends ConfigurationProvider 'host' => Expect::string()->min(1)->required(), 'log_queries' => Expect::bool()->required(), 'password' => Expect::string()->required(), + 'pool_prefill' => Expect::bool()->required(), 'pool_size' => Expect::int()->min(1)->required(), 'port' => Expect::int()->min(1)->max(65535)->required(), 'username' => Expect::string()->min(1)->required(), @@ -65,6 +67,7 @@ final readonly class DatabaseConfigurationProvider extends ConfigurationProvider host: $connectionPoolConfiguration->host, logQueries: $connectionPoolConfiguration->log_queries, password: $connectionPoolConfiguration->password, + poolPrefill: $connectionPoolConfiguration->pool_prefill, 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 3f202034046a0e9fa6727b779924fbba8377a70d..950377e237fabd559d3ad6e2813cd676c06feb71 100644 --- a/src/SingletonProvider/ConfigurationProvider/RedisConfigurationProvider.php +++ b/src/SingletonProvider/ConfigurationProvider/RedisConfigurationProvider.php @@ -18,6 +18,7 @@ use Nette\Schema\Schema; * db_index: int, * host: string, * password: string, + * pool_prefill: bool, * pool_size: int, * port: int, * prefix: string, @@ -41,6 +42,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_prefill' => Expect::bool()->required(), 'pool_size' => Expect::int()->min(1)->required(), 'port' => Expect::int()->min(1)->max(65535)->required(), 'prefix' => Expect::string()->min(1)->required(), @@ -61,6 +63,7 @@ final readonly class RedisConfigurationProvider extends ConfigurationProvider dbIndex: $connectionPoolConfiguration->db_index, host: $connectionPoolConfiguration->host, password: $connectionPoolConfiguration->password, + poolPrefill: $connectionPoolConfiguration->pool_prefill, poolSize: $connectionPoolConfiguration->pool_size, port: $connectionPoolConfiguration->port, prefix: $connectionPoolConfiguration->prefix, diff --git a/src/SingletonProvider/DatabaseConnectionPoolRepositoryProvider.php b/src/SingletonProvider/DatabaseConnectionPoolRepositoryProvider.php index ee16d39ec8930dcc3fa738d12f88ba381849edd5..67c47947e3fe43d29411bfc4a91299fa08ba3952 100644 --- a/src/SingletonProvider/DatabaseConnectionPoolRepositoryProvider.php +++ b/src/SingletonProvider/DatabaseConnectionPoolRepositoryProvider.php @@ -48,7 +48,10 @@ final readonly class DatabaseConnectionPoolRepositoryProvider extends SingletonP ; $pdoPool = new PDOPool($pdoConfig, $connectionPoolConfiguration->poolSize); - $pdoPool->fill(); + + if ($connectionPoolConfiguration->poolPrefill) { + $pdoPool->fill(); + } $databaseConnectionPoolRepository->databaseConnectionPool->put($name, $pdoPool); } diff --git a/src/SingletonProvider/RedisConnectionPoolRepositoryProvider.php b/src/SingletonProvider/RedisConnectionPoolRepositoryProvider.php index 7e494f5a457665794bc043d598389dc663802999..741f99996e787c0fb37a8da26b66b2fa3c08d0bc 100644 --- a/src/SingletonProvider/RedisConnectionPoolRepositoryProvider.php +++ b/src/SingletonProvider/RedisConnectionPoolRepositoryProvider.php @@ -39,7 +39,10 @@ final readonly class RedisConnectionPoolRepositoryProvider extends SingletonProv ; $redisPool = new RedisPool($redisConfig, $connectionPoolConfiguration->poolSize); - $redisPool->fill(); + + if ($connectionPoolConfiguration->poolPrefill) { + $redisPool->fill(); + } $redisConnectionPoolRepository->redisConnectionPool->put($name, $redisPool); }