Fixed infinite timeout handling. Increased code reuse so that there will be fewer copy and paste errors.

This commit is contained in:
rdifalco
2014-10-18 12:22:07 -07:00
parent 7845dc350a
commit 8f4dbaf89f
5 changed files with 190 additions and 229 deletions

View File

@@ -1845,54 +1845,56 @@ public class Jedis extends BinaryJedis implements JedisCommands,
* programming language used.
*/
public List<String> blpop(final int timeout, final String... keys) {
checkIsInMulti();
List<String> args = new ArrayList<String>();
for (String arg : keys) {
args.add(arg);
}
args.add(String.valueOf(timeout));
return blpop(getArgsAddTimeout(timeout, keys));
}
client.blpop(args.toArray(new String[args.size()]));
client.setTimeoutInfinite();
final List<String> multiBulkReply = client.getMultiBulkReply();
client.rollbackTimeout();
return multiBulkReply;
private String[] getArgsAddTimeout (int timeout, String[] keys) {
final int keyCount = keys.length;
final String[] args = new String[keyCount + 1];
for (int at = 0; at != keyCount; ++at) {
args[at] = keys[at];
}
args[keyCount] = String.valueOf(timeout);
return args;
}
public List<String> blpop(String... args) {
checkIsInMulti();
client.blpop(args);
client.setTimeoutInfinite();
final List<String> multiBulkReply = client.getMultiBulkReply();
client.rollbackTimeout();
return multiBulkReply;
try {
return client.getMultiBulkReply();
} finally {
client.rollbackTimeout();
}
}
public List<String> brpop(String... args) {
checkIsInMulti();
client.brpop(args);
client.setTimeoutInfinite();
final List<String> multiBulkReply = client.getMultiBulkReply();
client.rollbackTimeout();
return multiBulkReply;
try {
return client.getMultiBulkReply();
} finally {
client.rollbackTimeout();
}
}
/**
* @deprecated unusable command
*/
@Deprecated
public List<String> blpop(String arg) {
String[] args = new String[1];
args[0] = arg;
client.blpop(args);
client.setTimeoutInfinite();
final List<String> multiBulkReply = client.getMultiBulkReply();
client.rollbackTimeout();
return multiBulkReply;
return blpop(new String[]{arg});
}
/**
* @deprecated unusable command
*/
@Deprecated
public List<String> brpop(String arg) {
String[] args = new String[1];
args[0] = arg;
client.brpop(args);
client.setTimeoutInfinite();
final List<String> multiBulkReply = client.getMultiBulkReply();
client.rollbackTimeout();
return multiBulkReply;
return brpop(new String[]{arg});
}
/**
@@ -2010,19 +2012,7 @@ public class Jedis extends BinaryJedis implements JedisCommands,
* programming language used.
*/
public List<String> brpop(final int timeout, final String... keys) {
checkIsInMulti();
List<String> args = new ArrayList<String>();
for (String arg : keys) {
args.add(arg);
}
args.add(String.valueOf(timeout));
client.brpop(args.toArray(new String[args.size()]));
client.setTimeoutInfinite();
List<String> multiBulkReply = client.getMultiBulkReply();
client.rollbackTimeout();
return multiBulkReply;
return brpop(getArgsAddTimeout(timeout, keys));
}
public Long zcount(final String key, final double min, final double max) {
@@ -2724,9 +2714,11 @@ public class Jedis extends BinaryJedis implements JedisCommands,
public String brpoplpush(String source, String destination, int timeout) {
client.brpoplpush(source, destination, timeout);
client.setTimeoutInfinite();
String reply = client.getBulkReply();
client.rollbackTimeout();
return reply;
try {
return client.getBulkReply();
} finally {
client.rollbackTimeout();
}
}
/**
@@ -2861,16 +2853,22 @@ public class Jedis extends BinaryJedis implements JedisCommands,
public Object eval(String script, int keyCount, String... params) {
client.setTimeoutInfinite();
client.eval(script, keyCount, params);
return getEvalResult();
try {
client.eval(script, keyCount, params);
return getEvalResult();
} finally {
client.rollbackTimeout();
}
}
public void subscribe(final JedisPubSub jedisPubSub,
final String... channels) {
client.setTimeoutInfinite();
jedisPubSub.proceed(client, channels);
client.rollbackTimeout();
try {
jedisPubSub.proceed(client, channels);
} finally {
client.rollbackTimeout();
}
}
public Long publish(final String channel, final String message) {
@@ -2883,10 +2881,12 @@ public class Jedis extends BinaryJedis implements JedisCommands,
public void psubscribe(final JedisPubSub jedisPubSub,
final String... patterns) {
checkIsInMulti();
connect();
client.setTimeoutInfinite();
jedisPubSub.proceedWithPatterns(client, patterns);
client.rollbackTimeout();
try {
jedisPubSub.proceedWithPatterns(client, patterns);
} finally {
client.rollbackTimeout();
}
}
protected static String[] getParams(List<String> keys, List<String> args) {
@@ -2944,7 +2944,6 @@ public class Jedis extends BinaryJedis implements JedisCommands,
public Object evalsha(String sha1, int keyCount, String... params) {
checkIsInMulti();
client.evalsha(sha1, keyCount, params);
return getEvalResult();
}
@@ -3503,28 +3502,12 @@ public class Jedis extends BinaryJedis implements JedisCommands,
@Override
public List<String> blpop(int timeout, String key) {
checkIsInMulti();
List<String> args = new ArrayList<String>();
args.add(key);
args.add(String.valueOf(timeout));
client.blpop(args.toArray(new String[args.size()]));
client.setTimeoutInfinite();
final List<String> multiBulkReply = client.getMultiBulkReply();
client.rollbackTimeout();
return multiBulkReply;
return blpop(key, String.valueOf(timeout));
}
@Override
public List<String> brpop(int timeout, String key) {
checkIsInMulti();
List<String> args = new ArrayList<String>();
args.add(key);
args.add(String.valueOf(timeout));
client.brpop(args.toArray(new String[args.size()]));
client.setTimeoutInfinite();
final List<String> multiBulkReply = client.getMultiBulkReply();
client.rollbackTimeout();
return multiBulkReply;
return brpop(key, String.valueOf(timeout));
}
}