All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.infinispan.persistence.redis.client.RedisSentinelConnectionPool Maven / Gradle / Ivy

package org.infinispan.persistence.redis.client;

import org.infinispan.persistence.redis.configuration.ConnectionPoolConfiguration;
import org.infinispan.persistence.redis.configuration.RedisServerConfiguration;
import org.infinispan.persistence.redis.configuration.RedisStoreConfiguration;
import redis.clients.jedis.DefaultJedisClientConfig;
import redis.clients.jedis.HostAndPort;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.JedisSentinelPool;

import java.time.Duration;
import java.util.HashSet;
import java.util.Set;

final public class RedisSentinelConnectionPool implements RedisConnectionPool {
    private final JedisSentinelPool sentinelPool;

    public RedisSentinelConnectionPool(RedisStoreConfiguration configuration) {
        boolean ssl = configuration.ssl();
        Set sentinels = new HashSet();

        for (RedisServerConfiguration server : configuration.sentinels()) {
            sentinels.add(new HostAndPort(server.host(), server.port()));
        }

        ConnectionPoolConfiguration connectionPoolConfiguration = configuration.connectionPool();

        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxTotal(connectionPoolConfiguration.maxTotal());
        poolConfig.setMinIdle(connectionPoolConfiguration.minIdle());
        poolConfig.setMaxIdle(connectionPoolConfiguration.maxIdle());
        poolConfig.setMinEvictableIdleTime(Duration.ofMillis(connectionPoolConfiguration.minEvictableIdleTime()));
        poolConfig.setTimeBetweenEvictionRuns(Duration.ofMillis(connectionPoolConfiguration.timeBetweenEvictionRuns()));
        poolConfig.setTestOnCreate(connectionPoolConfiguration.testOnCreate());
        poolConfig.setTestOnBorrow(connectionPoolConfiguration.testOnBorrow());
        poolConfig.setTestOnReturn(connectionPoolConfiguration.testOnReturn());
        poolConfig.setTestWhileIdle(connectionPoolConfiguration.testOnIdle());

        DefaultJedisClientConfig masterConfig = DefaultJedisClientConfig.builder()
                                                                        .connectionTimeoutMillis(configuration.connectionTimeout())
                                                                        .socketTimeoutMillis(configuration.socketTimeout())
                                                                        .password(configuration.password())
                                                                        .database(configuration.database())
                                                                        .ssl(ssl)
                                                                        .build();

        DefaultJedisClientConfig sentinelConfig = DefaultJedisClientConfig.builder()
                                                                          .ssl(ssl)
                                                                          .build();

        sentinelPool = new JedisSentinelPool(
                configuration.masterName(),
                sentinels,
                poolConfig,
                masterConfig,
                sentinelConfig
        );
    }

    @Override
    public RedisConnection getConnection() {
        return new RedisServerConnection(sentinelPool.getResource());
    }

    @Override
    public void shutdown() {
        sentinelPool.destroy();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy