/**
* Managing JEDIS pool and allocating/deallocating JEDIS resources for connection to REDIS.
*
* @author Imran, Koushik
*/
package qa.qcri.aidr.redis;
import org.apache.log4j.Logger;
import qa.qcri.aidr.common.util.EmailClient;
import qa.qcri.aidr.utils.PersisterConfigurationProperty;
import qa.qcri.aidr.utils.PersisterConfigurator;
import qa.qcri.aidr.utils.PersisterErrorHandler;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;
import redis.clients.jedis.exceptions.JedisConnectionException;
public class JedisConnectionPool {
private static Logger logger = Logger.getLogger(JedisConnectionPool.class.getName());
static JedisPool jedisPool;
public JedisConnectionPool() {
jedisPool = null;
}
public synchronized Jedis getJedisConnection() { // koushik: removed static
try {
if (jedisPool == null) {
JedisPoolConfig config = new JedisPoolConfig();
config.setMaxTotal(1000);
config.setMaxIdle(10);
config.setMinIdle(1);
config.setMaxWaitMillis(30000);
jedisPool = new JedisPool(config, PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.REDIS_HOST), Integer.parseInt(PersisterConfigurator.getInstance().getProperty(PersisterConfigurationProperty.REDIS_PORT)));
}
return jedisPool.getResource();
} catch (JedisConnectionException e) {
logger.error("Could not establish Redis connection. Is the Redis running?");
PersisterErrorHandler.sendErrorMail(e.getLocalizedMessage(), "Could not establish Redis connection. Is the Redis running?");
throw e;
}
}
public synchronized void close(Jedis resource) { // koushik: removed static, added code to increase robustness
if (jedisPool != null) {
try {
if (resource != null) {
jedisPool.returnResource(resource);
resource = null;
}
} catch (JedisConnectionException e) {
jedisPool.returnBrokenResource(resource);
resource = null;
} finally {
if (resource != null)
jedisPool.returnResource(resource);
resource = null;
}
}
}
}