diff --git a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/config/ConfigLoader.java b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/config/ConfigLoader.java index 7963d6b..edb5335 100644 --- a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/config/ConfigLoader.java +++ b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/config/ConfigLoader.java @@ -12,6 +12,7 @@ import ninja.leaping.configurate.objectmapping.ObjectMappingException; import ninja.leaping.configurate.yaml.YAMLConfigurationLoader; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import redis.clients.jedis.*; +import redis.clients.jedis.providers.ClusterConnectionProvider; import redis.clients.jedis.providers.PooledConnectionProvider; import java.io.File; @@ -95,12 +96,7 @@ public interface ConfigLoader { if (hostAndPortSet.isEmpty()) { throw new RuntimeException("No redis cluster servers specified"); } - if (redisPassword != null) { - summoner = new JedisClusterSummoner(new JedisCluster(hostAndPortSet, 5000, 5000, 60, proxyId, redisPassword, poolConfig, useSSL)); - } else { - plugin.logWarn("SSL option is ignored in Cluster mode if no PASSWORD is set"); - summoner = new JedisClusterSummoner(new JedisCluster(hostAndPortSet, 5000, 5000, 60, poolConfig)); - } + summoner = new JedisClusterSummoner(new ClusterConnectionProvider(hostAndPortSet, DefaultJedisClientConfig.builder().password(redisPassword).ssl(useSSL).socketTimeoutMillis(5000).timeoutMillis(10000).build(), poolConfig)); redisBungeeMode = RedisBungeeMode.CLUSTER; } else { plugin.logInfo("RedisBungee MODE: SINGLE"); diff --git a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/summoners/JedisClusterSummoner.java b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/summoners/JedisClusterSummoner.java index fb5ac1f..f5d9e43 100644 --- a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/summoners/JedisClusterSummoner.java +++ b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/summoners/JedisClusterSummoner.java @@ -1,15 +1,18 @@ package com.imaginarycode.minecraft.redisbungee.api.summoners; import redis.clients.jedis.JedisCluster; +import redis.clients.jedis.providers.ClusterConnectionProvider; import java.io.IOException; +import java.time.Duration; public class JedisClusterSummoner implements Summoner { - public final JedisCluster jedisCluster; + public final ClusterConnectionProvider clusterConnectionProvider; - public JedisClusterSummoner(JedisCluster jedisCluster) { - this.jedisCluster = jedisCluster; + public JedisClusterSummoner(ClusterConnectionProvider clusterConnectionProvider) { + this.clusterConnectionProvider = clusterConnectionProvider; // test the connection + JedisCluster jedisCluster = obtainResource(); jedisCluster.set("random_data", "0"); jedisCluster.del("random_data"); } @@ -17,11 +20,11 @@ public class JedisClusterSummoner implements Summoner { @Override public void close() throws IOException { - jedisCluster.close(); + this.clusterConnectionProvider.close(); } @Override public JedisCluster obtainResource() { - return this.jedisCluster; + return new NotClosableJedisCluster(this.clusterConnectionProvider, 60, Duration.ofSeconds(30000)); } } diff --git a/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/summoners/NotClosableJedisCluster.java b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/summoners/NotClosableJedisCluster.java new file mode 100644 index 0000000..3fd1fad --- /dev/null +++ b/RedisBungee-API/src/main/java/com/imaginarycode/minecraft/redisbungee/api/summoners/NotClosableJedisCluster.java @@ -0,0 +1,21 @@ +package com.imaginarycode.minecraft.redisbungee.api.summoners; + +import redis.clients.jedis.JedisCluster; +import redis.clients.jedis.JedisPooled; +import redis.clients.jedis.providers.ClusterConnectionProvider; +import redis.clients.jedis.providers.PooledConnectionProvider; + +import java.time.Duration; + + +public class NotClosableJedisCluster extends JedisCluster { + + NotClosableJedisCluster(ClusterConnectionProvider provider, int maxAttempts, Duration maxTotalRetriesDuration) { + super(provider, maxAttempts, maxTotalRetriesDuration); + } + + @Override + public void close() { + + } +}