From 0dedaf45255acb8dbdaa0363bf8dd3648d6e95bf Mon Sep 17 00:00:00 2001 From: Remo Liebi Date: Mon, 18 Mar 2024 15:42:34 +0100 Subject: [PATCH] allow multiple endpoints as dsn to avoid downtime if single node fails. (new config `hosts`) --- src/DependencyInjection/Configuration.php | 7 +++++++ src/Repository/ConfigurationRepository.php | 14 +++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index c9f7fad..cb0ef4f 100644 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -16,6 +16,13 @@ public function getConfigTreeBuilder() ->children() ->arrayNode('client') ->children() + ->arrayNode('connections')->info('An array of DSN to connect to the Elasticsearch cluster.') + ->arrayPrototype() + ->children() + ->scalarNode('url')->end() + ->end() + ->end() + ->end() ->scalarNode('dsn')->defaultValue('http://localhost:9200')->info('The DSN to connect to the Elasticsearch cluster.')->end() ->booleanNode('should_add_sentry_breadcrumbs')->defaultFalse()->info('If true, breadcrumbs are added to Sentry for every request made to Elasticsearch via Elastica.')->end() ->end() diff --git a/src/Repository/ConfigurationRepository.php b/src/Repository/ConfigurationRepository.php index 7875ca9..c7606a0 100644 --- a/src/Repository/ConfigurationRepository.php +++ b/src/Repository/ConfigurationRepository.php @@ -4,6 +4,8 @@ namespace Valantic\ElasticaBridgeBundle\Repository; +use Psr\Container\ContainerExceptionInterface; +use Psr\Container\NotFoundExceptionInterface; use Symfony\Component\DependencyInjection\ParameterBag\ContainerBagInterface; /** @@ -15,8 +17,18 @@ public function __construct( private readonly ContainerBagInterface $containerBag, ) {} - public function getClientDsn(): string + /** + * @throws ContainerExceptionInterface + * @throws NotFoundExceptionInterface + * + * @return string|array + */ + public function getClientDsn(): string|array { + if ($this->containerBag->get('valantic_elastica_bridge')['client']['connections'] !== []) { + return ['connections' => $this->containerBag->get('valantic_elastica_bridge')['client']['connections']]; + } + return $this->containerBag->get('valantic_elastica_bridge')['client']['dsn']; }