From 19358d71b630d31db80881b290c83bf6d585459a Mon Sep 17 00:00:00 2001 From: devsett Date: Fri, 19 Feb 2021 17:29:30 +0300 Subject: [PATCH 1/4] Support sentinel --- .../RediSearchAutoConfiguration.java | 36 ++++++++++++++----- 1 file changed, 28 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/redislabs/springredisearch/RediSearchAutoConfiguration.java b/src/main/java/com/redislabs/springredisearch/RediSearchAutoConfiguration.java index cba2674..f0408ab 100644 --- a/src/main/java/com/redislabs/springredisearch/RediSearchAutoConfiguration.java +++ b/src/main/java/com/redislabs/springredisearch/RediSearchAutoConfiguration.java @@ -3,6 +3,7 @@ import com.redislabs.lettusearch.RediSearchClient; import com.redislabs.lettusearch.StatefulRediSearchConnection; import io.lettuce.core.RedisURI; +import io.lettuce.core.api.StatefulConnection; import io.lettuce.core.resource.ClientResources; import io.lettuce.core.resource.DefaultClientResources; import io.lettuce.core.support.ConnectionPoolSupport; @@ -22,10 +23,29 @@ public class RediSearchAutoConfiguration { @Bean RedisURI redisURI(RedisProperties properties) { - RedisURI redisURI = RedisURI.create(properties.getHost(), properties.getPort()); + RedisProperties.Sentinel sentinel = properties.getSentinel(); + + RedisURI redisURI = null; + + if (sentinel != null) { + //Since nodes may contain a port, delete it just in case. + String firstNode = sentinel.getNodes().get(0).replaceAll(":.*", ""); + RedisURI.Builder builder = RedisURI.Builder.sentinel(firstNode, properties.getPort(), sentinel.getMaster()); + + for (int i = 1; i < sentinel.getNodes().size(); i++) { + String node = sentinel.getNodes().get(i).replaceAll(":.*", ""); + builder = builder.withSentinel(node); + } + + redisURI = builder.build(); + } else { + redisURI = RedisURI.create(properties.getHost(), properties.getPort()); + } + if (properties.getPassword() != null) { redisURI.setPassword(properties.getPassword().toCharArray()); } + Duration timeout = properties.getTimeout(); if (timeout != null) { redisURI.setTimeout(timeout); @@ -44,17 +64,17 @@ RediSearchClient client(RedisURI redisURI, ClientResources clientResources) { } @Bean(name = "rediSearchConnection", destroyMethod = "close") - StatefulRediSearchConnection connection(RediSearchClient rediSearchClient) { + StatefulRediSearchConnection connection(RediSearchClient rediSearchClient) throws Exception { return rediSearchClient.connect(); } @Bean(name = "rediSearchConnectionPoolConfig") - GenericObjectPoolConfig> poolConfig(RedisProperties redisProperties) { + GenericObjectPoolConfig> poolConfig(RedisProperties redisProperties) { return configure(redisProperties, new GenericObjectPoolConfig<>()); } - public GenericObjectPoolConfig> configure(RedisProperties redisProperties, - GenericObjectPoolConfig> config) { + public GenericObjectPoolConfig> configure(RedisProperties redisProperties, + GenericObjectPoolConfig> config) { config.setJmxEnabled(false); Pool poolProps = redisProperties.getLettuce().getPool(); if (poolProps != null) { @@ -69,9 +89,9 @@ public GenericObjectPoolConfig> config } @Bean(name = "rediSearchConnectionPool", destroyMethod = "close") - GenericObjectPool> pool( - GenericObjectPoolConfig> config, RediSearchClient client) { + GenericObjectPool> pool( + GenericObjectPoolConfig> config, RediSearchClient client) { return ConnectionPoolSupport.createGenericObjectPool(client::connect, config); } -} +} \ No newline at end of file From 94776427dc5fec27b34bccf68cf56ba8bd591430 Mon Sep 17 00:00:00 2001 From: DevSett Date: Fri, 19 Feb 2021 17:30:20 +0300 Subject: [PATCH 2/4] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 12a4c76..66b24aa 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ [![GitHub issues](https://img.shields.io/github/release/RediSearch/spring-redisearch.svg)](https://github.com/RediSearch/spring-redisearch/releases/latest) -# Spring RediSearch +# Spring RediSearch with Sentinel [![Forum](https://img.shields.io/badge/Forum-RediSearch-blue)](https://forum.redislabs.com/c/modules/redisearch/) [![Discord](https://img.shields.io/discord/697882427875393627?style=flat-square)](https://discord.gg/xTbqgTB) From 6c5a899902f925385a78ae21aed317eab439ff98 Mon Sep 17 00:00:00 2001 From: devsett Date: Fri, 19 Feb 2021 17:34:30 +0300 Subject: [PATCH 3/4] refactoring --- .../RediSearchAutoConfiguration.java | 145 +++++++++--------- 1 file changed, 72 insertions(+), 73 deletions(-) diff --git a/src/main/java/com/redislabs/springredisearch/RediSearchAutoConfiguration.java b/src/main/java/com/redislabs/springredisearch/RediSearchAutoConfiguration.java index f0408ab..6e99cca 100644 --- a/src/main/java/com/redislabs/springredisearch/RediSearchAutoConfiguration.java +++ b/src/main/java/com/redislabs/springredisearch/RediSearchAutoConfiguration.java @@ -3,7 +3,6 @@ import com.redislabs.lettusearch.RediSearchClient; import com.redislabs.lettusearch.StatefulRediSearchConnection; import io.lettuce.core.RedisURI; -import io.lettuce.core.api.StatefulConnection; import io.lettuce.core.resource.ClientResources; import io.lettuce.core.resource.DefaultClientResources; import io.lettuce.core.support.ConnectionPoolSupport; @@ -21,77 +20,77 @@ @EnableConfigurationProperties(RedisProperties.class) public class RediSearchAutoConfiguration { - @Bean - RedisURI redisURI(RedisProperties properties) { - RedisProperties.Sentinel sentinel = properties.getSentinel(); - - RedisURI redisURI = null; - - if (sentinel != null) { - //Since nodes may contain a port, delete it just in case. - String firstNode = sentinel.getNodes().get(0).replaceAll(":.*", ""); - RedisURI.Builder builder = RedisURI.Builder.sentinel(firstNode, properties.getPort(), sentinel.getMaster()); - - for (int i = 1; i < sentinel.getNodes().size(); i++) { - String node = sentinel.getNodes().get(i).replaceAll(":.*", ""); - builder = builder.withSentinel(node); - } - - redisURI = builder.build(); - } else { - redisURI = RedisURI.create(properties.getHost(), properties.getPort()); - } - - if (properties.getPassword() != null) { - redisURI.setPassword(properties.getPassword().toCharArray()); - } - - Duration timeout = properties.getTimeout(); - if (timeout != null) { - redisURI.setTimeout(timeout); - } - return redisURI; - } - - @Bean(destroyMethod = "shutdown") - ClientResources clientResources() { - return DefaultClientResources.create(); - } - - @Bean(destroyMethod = "shutdown") - RediSearchClient client(RedisURI redisURI, ClientResources clientResources) { - return RediSearchClient.create(clientResources, redisURI); - } - - @Bean(name = "rediSearchConnection", destroyMethod = "close") - StatefulRediSearchConnection connection(RediSearchClient rediSearchClient) throws Exception { - return rediSearchClient.connect(); - } - - @Bean(name = "rediSearchConnectionPoolConfig") - GenericObjectPoolConfig> poolConfig(RedisProperties redisProperties) { - return configure(redisProperties, new GenericObjectPoolConfig<>()); - } - - public GenericObjectPoolConfig> configure(RedisProperties redisProperties, - GenericObjectPoolConfig> config) { - config.setJmxEnabled(false); - Pool poolProps = redisProperties.getLettuce().getPool(); - if (poolProps != null) { - config.setMaxTotal(poolProps.getMaxActive()); - config.setMaxIdle(poolProps.getMaxIdle()); - config.setMinIdle(poolProps.getMinIdle()); - if (poolProps.getMaxWait() != null) { - config.setMaxWaitMillis(poolProps.getMaxWait().toMillis()); - } - } - return config; - } - - @Bean(name = "rediSearchConnectionPool", destroyMethod = "close") - GenericObjectPool> pool( - GenericObjectPoolConfig> config, RediSearchClient client) { - return ConnectionPoolSupport.createGenericObjectPool(client::connect, config); - } + @Bean + RedisURI redisURI(RedisProperties properties) { + RedisProperties.Sentinel sentinel = properties.getSentinel(); + + RedisURI redisURI = null; + + if (sentinel != null) { + //Since nodes may contain a port, delete it just in case. + String firstNode = sentinel.getNodes().get(0).replaceAll(":.*", ""); + RedisURI.Builder builder = RedisURI.Builder.sentinel(firstNode, properties.getPort(), sentinel.getMaster()); + + for (int i = 1; i < sentinel.getNodes().size(); i++) { + String node = sentinel.getNodes().get(i).replaceAll(":.*", ""); + builder = builder.withSentinel(node); + } + + redisURI = builder.build(); + } else { + redisURI = RedisURI.create(properties.getHost(), properties.getPort()); + } + + if (properties.getPassword() != null) { + redisURI.setPassword(properties.getPassword().toCharArray()); + } + + Duration timeout = properties.getTimeout(); + if (timeout != null) { + redisURI.setTimeout(timeout); + } + return redisURI; + } + + @Bean(destroyMethod = "shutdown") + ClientResources clientResources() { + return DefaultClientResources.create(); + } + + @Bean(destroyMethod = "shutdown") + RediSearchClient client(RedisURI redisURI, ClientResources clientResources) { + return RediSearchClient.create(clientResources, redisURI); + } + + @Bean(name = "rediSearchConnection", destroyMethod = "close") + StatefulRediSearchConnection connection(RediSearchClient rediSearchClient) { + return rediSearchClient.connect(); + } + + @Bean(name = "rediSearchConnectionPoolConfig") + GenericObjectPoolConfig> poolConfig(RedisProperties redisProperties) { + return configure(redisProperties, new GenericObjectPoolConfig<>()); + } + + public GenericObjectPoolConfig> configure(RedisProperties redisProperties, + GenericObjectPoolConfig> config) { + config.setJmxEnabled(false); + Pool poolProps = redisProperties.getLettuce().getPool(); + if (poolProps != null) { + config.setMaxTotal(poolProps.getMaxActive()); + config.setMaxIdle(poolProps.getMaxIdle()); + config.setMinIdle(poolProps.getMinIdle()); + if (poolProps.getMaxWait() != null) { + config.setMaxWaitMillis(poolProps.getMaxWait().toMillis()); + } + } + return config; + } + + @Bean(name = "rediSearchConnectionPool", destroyMethod = "close") + GenericObjectPool> pool( + GenericObjectPoolConfig> config, RediSearchClient client) { + return ConnectionPoolSupport.createGenericObjectPool(client::connect, config); + } } \ No newline at end of file From 292aff3a389ad0fa699e1c4f0481bcee89f84457 Mon Sep 17 00:00:00 2001 From: devsett Date: Fri, 19 Feb 2021 18:46:22 +0300 Subject: [PATCH 4/4] parse port from nodes --- .../springredisearch/RediSearchAutoConfiguration.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/redislabs/springredisearch/RediSearchAutoConfiguration.java b/src/main/java/com/redislabs/springredisearch/RediSearchAutoConfiguration.java index 6e99cca..eedb438 100644 --- a/src/main/java/com/redislabs/springredisearch/RediSearchAutoConfiguration.java +++ b/src/main/java/com/redislabs/springredisearch/RediSearchAutoConfiguration.java @@ -27,13 +27,14 @@ RedisURI redisURI(RedisProperties properties) { RedisURI redisURI = null; if (sentinel != null) { - //Since nodes may contain a port, delete it just in case. String firstNode = sentinel.getNodes().get(0).replaceAll(":.*", ""); - RedisURI.Builder builder = RedisURI.Builder.sentinel(firstNode, properties.getPort(), sentinel.getMaster()); + int port = Integer.parseInt(sentinel.getNodes().get(0).replaceAll(".*:", "")); + RedisURI.Builder builder = RedisURI.Builder.sentinel(firstNode, port, sentinel.getMaster()); for (int i = 1; i < sentinel.getNodes().size(); i++) { String node = sentinel.getNodes().get(i).replaceAll(":.*", ""); - builder = builder.withSentinel(node); + port = Integer.parseInt(sentinel.getNodes().get(i).replaceAll(".*:", "")); + builder = builder.withSentinel(node, port); } redisURI = builder.build();