DATAREDIS-513 - Fix RedisServerCommands.time() failure when in pipeline mode.
We fixed a glitch in Jedis/Lettuce RedisConneciton TIME command when used in pipeline or transaction mode. Original pull request: #199.
This commit is contained in:
committed by
Mark Paluch
parent
2b51966768
commit
7af8fdf946
@@ -53,7 +53,6 @@ import org.springframework.data.redis.connection.RedisZSetCommands;
|
||||
import org.springframework.data.redis.connection.ReturnType;
|
||||
import org.springframework.data.redis.connection.SortParameters;
|
||||
import org.springframework.data.redis.connection.Subscription;
|
||||
import org.springframework.data.redis.connection.convert.Converters;
|
||||
import org.springframework.data.redis.connection.convert.ListConverter;
|
||||
import org.springframework.data.redis.connection.convert.TransactionResultConverter;
|
||||
import org.springframework.data.redis.core.Cursor;
|
||||
@@ -3579,13 +3578,21 @@ public class JedisConnection extends AbstractRedisConnection {
|
||||
@Override
|
||||
public Long time() {
|
||||
|
||||
List<String> serverTimeInformation = this.jedis.time();
|
||||
try {
|
||||
|
||||
Assert.notEmpty(serverTimeInformation, "Received invalid result from server. Expected 2 items in collection.");
|
||||
Assert.isTrue(serverTimeInformation.size() == 2,
|
||||
"Received invalid nr of arguments from redis server. Expected 2 received " + serverTimeInformation.size());
|
||||
if (isPipelined()) {
|
||||
pipeline(new JedisResult(pipeline.time(), JedisConverters.toTimeConverter()));
|
||||
return null;
|
||||
}
|
||||
|
||||
return Converters.toTimeMillis(serverTimeInformation.get(0), serverTimeInformation.get(1));
|
||||
if (isQueueing()) {
|
||||
transaction(new JedisResult(transaction.time(), JedisConverters.toTimeConverter()));
|
||||
return null;
|
||||
}
|
||||
return JedisConverters.toTimeConverter().convert(jedis.time());
|
||||
} catch (Exception ex) {
|
||||
throw convertJedisAccessException(ex);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -94,6 +94,7 @@ abstract public class JedisConverters extends Converters {
|
||||
private static final Converter<Object, RedisClusterNode> OBJECT_TO_CLUSTER_NODE_CONVERTER;
|
||||
private static final Converter<Expiration, byte[]> EXPIRATION_TO_COMMAND_OPTION_CONVERTER;
|
||||
private static final Converter<SetOption, byte[]> SET_OPTION_TO_COMMAND_OPTION_CONVERTER;
|
||||
private static final Converter<List<String>, Long> STRING_LIST_TO_TIME_CONVERTER;
|
||||
private static final Converter<redis.clients.jedis.GeoCoordinate, Point> GEO_COORDINATE_TO_POINT_CONVERTER;
|
||||
private static final ListConverter<redis.clients.jedis.GeoCoordinate, Point> LIST_GEO_COORDINATE_TO_POINT_CONVERTER;
|
||||
private static final Converter<byte[], String> BYTES_TO_STRING_CONVERTER;
|
||||
@@ -194,6 +195,19 @@ abstract public class JedisConverters extends Converters {
|
||||
|
||||
};
|
||||
|
||||
STRING_LIST_TO_TIME_CONVERTER = new Converter<List<String>, Long>() {
|
||||
|
||||
@Override
|
||||
public Long convert(List<String> source) {
|
||||
|
||||
Assert.notEmpty(source, "Received invalid result from server. Expected 2 items in collection.");
|
||||
Assert.isTrue(source.size() == 2,
|
||||
"Received invalid nr of arguments from redis server. Expected 2 received " + source.size());
|
||||
|
||||
return toTimeMillis(source.get(0), source.get(1));
|
||||
}
|
||||
};
|
||||
|
||||
GEO_COORDINATE_TO_POINT_CONVERTER = new Converter<redis.clients.jedis.GeoCoordinate, Point>() {
|
||||
@Override
|
||||
public Point convert(redis.clients.jedis.GeoCoordinate geoCoordinate) {
|
||||
@@ -493,6 +507,10 @@ abstract public class JedisConverters extends Converters {
|
||||
return sp;
|
||||
}
|
||||
|
||||
static Converter<List<String>, Long> toTimeConverter() {
|
||||
return STRING_LIST_TO_TIME_CONVERTER;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param source
|
||||
* @return
|
||||
|
||||
@@ -60,7 +60,6 @@ import org.springframework.data.redis.connection.RedisSubscribedConnectionExcept
|
||||
import org.springframework.data.redis.connection.ReturnType;
|
||||
import org.springframework.data.redis.connection.SortParameters;
|
||||
import org.springframework.data.redis.connection.Subscription;
|
||||
import org.springframework.data.redis.connection.convert.Converters;
|
||||
import org.springframework.data.redis.connection.convert.ListConverter;
|
||||
import org.springframework.data.redis.connection.convert.TransactionResultConverter;
|
||||
import org.springframework.data.redis.core.Cursor;
|
||||
@@ -3464,16 +3463,19 @@ public class LettuceConnection extends AbstractRedisConnection {
|
||||
*/
|
||||
@Override
|
||||
public Long time() {
|
||||
|
||||
try {
|
||||
|
||||
List<byte[]> result = getConnection().time();
|
||||
|
||||
Assert.notEmpty(result, "Received invalid result from server. Expected 2 items in collection.");
|
||||
Assert.isTrue(result.size() == 2,
|
||||
"Received invalid nr of arguments from redis server. Expected 2 received " + result.size());
|
||||
|
||||
return Converters.toTimeMillis(new String(result.get(0)), new String(result.get(1)));
|
||||
if (isPipelined()) {
|
||||
pipeline(new LettuceResult(getAsyncConnection().time(), LettuceConverters.toTimeConverter()));
|
||||
return null;
|
||||
}
|
||||
if (isQueueing()) {
|
||||
transaction(new LettuceTxResult(getConnection().time(), LettuceConverters.toTimeConverter()));
|
||||
return null;
|
||||
}
|
||||
|
||||
return LettuceConverters.toTimeConverter().convert(getConnection().time());
|
||||
} catch (Exception ex) {
|
||||
throw convertLettuceAccessException(ex);
|
||||
}
|
||||
|
||||
@@ -106,6 +106,7 @@ abstract public class LettuceConverters extends Converters {
|
||||
private static final Converter<String[], List<RedisClientInfo>> STRING_TO_LIST_OF_CLIENT_INFO = new StringToRedisClientInfoConverter();
|
||||
private static final Converter<Partitions, List<RedisClusterNode>> PARTITIONS_TO_CLUSTER_NODES;
|
||||
private static Converter<com.lambdaworks.redis.cluster.models.partitions.RedisClusterNode, RedisClusterNode> CLUSTER_NODE_TO_CLUSTER_NODE_CONVERTER;
|
||||
private static final Converter<List<byte[]>, Long> BYTES_LIST_TO_TIME_CONVERTER;
|
||||
private static final Converter<GeoCoordinates, Point> GEO_COORDINATE_TO_POINT_CONVERTER;
|
||||
private static final ListConverter<GeoCoordinates, Point> GEO_COORDINATE_LIST_TO_POINT_LIST_CONVERTER;
|
||||
|
||||
@@ -302,6 +303,19 @@ abstract public class LettuceConverters extends Converters {
|
||||
POSITIVE_INFINITY_BYTES = toBytes("+inf");
|
||||
NEGATIVE_INFINITY_BYTES = toBytes("-inf");
|
||||
|
||||
BYTES_LIST_TO_TIME_CONVERTER = new Converter<List<byte[]>, Long>() {
|
||||
|
||||
@Override
|
||||
public Long convert(List<byte[]> source) {
|
||||
|
||||
Assert.notEmpty(source, "Received invalid result from server. Expected 2 items in collection.");
|
||||
Assert.isTrue(source.size() == 2,
|
||||
"Received invalid nr of arguments from redis server. Expected 2 received " + source.size());
|
||||
|
||||
return toTimeMillis(LettuceConverters.toString(source.get(0)), LettuceConverters.toString(source.get(1)));
|
||||
}
|
||||
};
|
||||
|
||||
GEO_COORDINATE_TO_POINT_CONVERTER = new Converter<com.lambdaworks.redis.GeoCoordinates, Point>() {
|
||||
@Override
|
||||
public Point convert(com.lambdaworks.redis.GeoCoordinates geoCoordinate) {
|
||||
@@ -683,6 +697,10 @@ abstract public class LettuceConverters extends Converters {
|
||||
return args;
|
||||
}
|
||||
|
||||
static Converter<List<byte[]>, Long> toTimeConverter() {
|
||||
return BYTES_LIST_TO_TIME_CONVERTER;
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert {@link Metric} into {@link GeoArgs.Unit}.
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user