Skip to content

Commit 8255358

Browse files
committed
Adapt DefaultStringRedisConnection to API changes in Jedis 5.0.
Refactor and cleanup compiler warnings. Organize source. Closes spring-projects#2612
1 parent f702314 commit 8255358

File tree

1 file changed

+56
-40
lines changed

1 file changed

+56
-40
lines changed

src/main/java/org/springframework/data/redis/connection/DefaultStringRedisConnection.java

Lines changed: 56 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@
5858
import org.springframework.data.redis.core.types.Expiration;
5959
import org.springframework.data.redis.core.types.RedisClientInfo;
6060
import org.springframework.data.redis.domain.geo.GeoReference;
61-
import org.springframework.data.redis.domain.geo.GeoReference.GeoMemberReference;
6261
import org.springframework.data.redis.domain.geo.GeoShape;
6362
import org.springframework.data.redis.serializer.RedisSerializer;
6463
import org.springframework.data.redis.serializer.StringRedisSerializer;
@@ -87,21 +86,19 @@ public class DefaultStringRedisConnection implements StringRedisConnection, Deco
8786

8887
private static final byte[][] EMPTY_2D_BYTE_ARRAY = new byte[0][];
8988

89+
private boolean deserializePipelineAndTxResults = false;
90+
9091
private final Log log = LogFactory.getLog(DefaultStringRedisConnection.class);
92+
9193
private final RedisConnection delegate;
94+
9295
private final RedisSerializer<String> serializer;
93-
private Converter<byte[], String> bytesToString = new DeserializingConverter();
94-
private Converter<String, byte[]> stringToBytes = new SerializingConverter();
95-
private final TupleConverter tupleConverter = new TupleConverter();
96-
private SetConverter<Tuple, StringTuple> tupleToStringTuple = new SetConverter<>(tupleConverter);
97-
private SetConverter<StringTuple, Tuple> stringTupleToTuple = new SetConverter<>(new StringTupleConverter());
98-
private ListConverter<Tuple, StringTuple> tupleListToStringTuple = new ListConverter<>(new TupleConverter());
99-
private ListConverter<byte[], String> byteListToStringList = new ListConverter<>(bytesToString);
100-
private MapConverter<byte[], String> byteMapToStringMap = new MapConverter<>(bytesToString);
101-
private MapConverter<String, byte[]> stringMapToByteMap = new MapConverter<>(stringToBytes);
102-
private SetConverter<byte[], String> byteSetToStringSet = new SetConverter<>(bytesToString);
103-
private Converter<GeoResults<GeoLocation<byte[]>>, GeoResults<GeoLocation<String>>> byteGeoResultsToStringGeoResults;
104-
private Converter<ByteRecord, StringRecord> byteMapRecordToStringMapRecordConverter = new Converter<ByteRecord, StringRecord>() {
96+
97+
private final Converter<byte[], String> bytesToString = new DeserializingConverter();
98+
99+
private final Converter<GeoResults<GeoLocation<byte[]>>, GeoResults<GeoLocation<String>>> byteGeoResultsToStringGeoResults;
100+
101+
private final Converter<ByteRecord, StringRecord> byteMapRecordToStringMapRecordConverter = new Converter<>() {
105102

106103
@Nullable
107104
@Override
@@ -110,47 +107,55 @@ public StringRecord convert(ByteRecord source) {
110107
}
111108
};
112109

113-
private ListConverter<ByteRecord, StringRecord> listByteMapRecordToStringMapRecordConverter = new ListConverter<>(
114-
byteMapRecordToStringMapRecordConverter);
110+
private final ListConverter<byte[], String> byteListToStringList = new ListConverter<>(bytesToString);
111+
private final ListConverter<Tuple, StringTuple> tupleListToStringTuple = new ListConverter<>(new TupleConverter());
115112

116-
@SuppressWarnings("rawtypes") private Queue<Converter> pipelineConverters = new LinkedList<>();
117-
@SuppressWarnings("rawtypes") private Queue<Converter> txConverters = new LinkedList<>();
118-
private boolean deserializePipelineAndTxResults = false;
113+
private final ListConverter<ByteRecord, StringRecord> listByteMapRecordToStringMapRecordConverter =
114+
new ListConverter<>(byteMapRecordToStringMapRecordConverter);
115+
116+
private final MapConverter<byte[], String> byteMapToStringMap = new MapConverter<>(bytesToString);
117+
118+
private final TupleConverter tupleConverter = new TupleConverter();
119+
120+
private final SetConverter<byte[], String> byteSetToStringSet = new SetConverter<>(bytesToString);
121+
private final SetConverter<StringTuple, Tuple> stringTupleToTuple = new SetConverter<>(new StringTupleConverter());
122+
private final SetConverter<Tuple, StringTuple> tupleToStringTuple = new SetConverter<>(tupleConverter);
123+
124+
@SuppressWarnings("rawtypes")
125+
private final Queue<Converter> pipelineConverters = new LinkedList<>();
126+
127+
@SuppressWarnings("rawtypes")
128+
private final Queue<Converter> txConverters = new LinkedList<>();
119129

120130
private Entry<String, String> convertEntry(Entry<byte[], byte[]> source) {
121131
return Converters.entryOf(bytesToString.convert(source.getKey()), bytesToString.convert(source.getValue()));
122132
}
123133

124134
private class DeserializingConverter implements Converter<byte[], String> {
135+
125136
public String convert(byte[] source) {
126137
return serializer.deserialize(source);
127138
}
128139
}
129140

130-
private class SerializingConverter implements Converter<String, byte[]> {
141+
private class StringTupleConverter implements Converter<StringTuple, Tuple> {
131142

132-
@Nullable
133-
@Override
134-
public byte[] convert(String source) {
135-
return serializer.serialize(source);
143+
public Tuple convert(StringTuple source) {
144+
return new DefaultTuple(source.getValue(), source.getScore());
136145
}
137146
}
138147

139148
private class TupleConverter implements Converter<Tuple, StringTuple> {
149+
140150
public StringTuple convert(Tuple source) {
141151
return new DefaultStringTuple(source, serializer.deserialize(source.getValue()));
142152
}
143153
}
144154

145-
private class StringTupleConverter implements Converter<StringTuple, Tuple> {
146-
public Tuple convert(StringTuple source) {
147-
return new DefaultTuple(source.getValue(), source.getScore());
148-
}
149-
}
150-
151155
@SuppressWarnings("rawtypes")
152156
private class TransactionResultConverter implements Converter<List<Object>, List<Object>> {
153-
private Queue<Converter> txConverters;
157+
158+
private final Queue<Converter> txConverters;
154159

155160
public TransactionResultConverter(Queue<Converter> txConverters) {
156161
this.txConverters = txConverters;
@@ -327,7 +332,6 @@ public byte[] echo(byte[] message) {
327332
}
328333

329334
@Override
330-
@SuppressWarnings("rawtypes")
331335
public List<Object> exec() {
332336

333337
try {
@@ -1022,7 +1026,7 @@ public Long zDiffStore(byte[] destKey, byte[]... sets) {
10221026
@Nullable
10231027
@Override
10241028
public Set<String> zDiff(String... sets) {
1025-
return convertAndReturn(delegate.zDiff(serializeMulti(sets)), byteSetToStringSet);
1029+
return convertAndReturn(delegate.zDiff(serializeMulti(sets)), byteListToStringList);
10261030
}
10271031

10281032
@Nullable
@@ -1059,7 +1063,7 @@ public Set<Tuple> zInterWithScores(Aggregate aggregate, Weights weights, byte[].
10591063
@Nullable
10601064
@Override
10611065
public Set<String> zInter(String... sets) {
1062-
return convertAndReturn(delegate.zInter(serializeMulti(sets)), byteSetToStringSet);
1066+
return convertAndReturn(delegate.zInter(serializeMulti(sets)), byteListToStringList);
10631067
}
10641068

10651069
@Nullable
@@ -1265,7 +1269,7 @@ public Set<Tuple> zUnionWithScores(Aggregate aggregate, Weights weights, byte[].
12651269
@Nullable
12661270
@Override
12671271
public Set<String> zUnion(String... sets) {
1268-
return convertAndReturn(delegate.zUnion(serializeMulti(sets)), byteSetToStringSet);
1272+
return convertAndReturn(delegate.zUnion(serializeMulti(sets)), byteListToStringList);
12691273
}
12701274

12711275
@Nullable
@@ -1396,11 +1400,11 @@ private org.springframework.data.domain.Range.Bound<byte[]> rawBound(
13961400
.orElseGet(org.springframework.data.domain.Range.Bound::unbounded);
13971401
}
13981402

1399-
@SuppressWarnings("unchecked")
1403+
@SuppressWarnings({ "rawtypes", "unchecked" })
14001404
private GeoReference<byte[]> serialize(GeoReference<String> data) {
1401-
return data instanceof GeoReference.GeoMemberReference
1402-
? GeoReference
1403-
.fromMember(serializer.serialize(((GeoMemberReference<String>) data).getMember()))
1405+
1406+
return data instanceof GeoReference.GeoMemberReference<String> geoMemberReference
1407+
? GeoReference.fromMember(serializer.serialize(geoMemberReference.getMember()))
14041408
: (GeoReference) data;
14051409
}
14061410

@@ -2887,12 +2891,14 @@ public List<StringRecord> xRange(String key, org.springframework.data.domain.Ran
28872891
}
28882892

28892893
@Override
2894+
@SuppressWarnings("unchecked")
28902895
public List<StringRecord> xReadAsString(StreamReadOptions readOptions, StreamOffset<String>... streams) {
28912896
return convertAndReturn(delegate.xRead(readOptions, serialize(streams)),
28922897
listByteMapRecordToStringMapRecordConverter);
28932898
}
28942899

28952900
@Override
2901+
@SuppressWarnings("unchecked")
28962902
public List<StringRecord> xReadGroupAsString(Consumer consumer, StreamReadOptions readOptions,
28972903
StreamOffset<String>... streams) {
28982904

@@ -3000,11 +3006,13 @@ public List<ByteRecord> xRange(byte[] key, org.springframework.data.domain.Range
30003006
}
30013007

30023008
@Override
3009+
@SuppressWarnings("unchecked")
30033010
public List<ByteRecord> xRead(StreamReadOptions readOptions, StreamOffset<byte[]>... streams) {
30043011
return delegate.xRead(readOptions, streams);
30053012
}
30063013

30073014
@Override
3015+
@SuppressWarnings("unchecked")
30083016
public List<ByteRecord> xReadGroup(Consumer consumer, StreamReadOptions readOptions,
30093017
StreamOffset<byte[]>... streams) {
30103018
return delegate.xReadGroup(consumer, readOptions, streams);
@@ -3036,12 +3044,11 @@ public void setDeserializePipelineAndTxResults(boolean deserializePipelineAndTxR
30363044
this.deserializePipelineAndTxResults = deserializePipelineAndTxResults;
30373045
}
30383046

3039-
@SuppressWarnings("unchecked")
30403047
@Nullable
3048+
@SuppressWarnings({ "rawtypes", "unchecked" })
30413049
private <T> T convertAndReturn(@Nullable Object value, Converter converter) {
30423050

30433051
if (isFutureConversion()) {
3044-
30453052
addResultConverter(converter);
30463053
return null;
30473054
}
@@ -3056,6 +3063,7 @@ private <T> T convertAndReturn(@Nullable Object value, Converter converter) {
30563063
}
30573064

30583065
private void addResultConverter(Converter<?, ?> converter) {
3066+
30593067
if (isQueueing()) {
30603068
txConverters.add(converter);
30613069
} else {
@@ -3069,20 +3077,26 @@ private boolean isFutureConversion() {
30693077

30703078
@SuppressWarnings({ "unchecked", "rawtypes" })
30713079
private List<Object> convertResults(@Nullable List<Object> results, Queue<Converter> converters) {
3080+
30723081
if (!deserializePipelineAndTxResults || results == null) {
30733082
return results;
30743083
}
3084+
30753085
if (results.size() != converters.size()) {
30763086
// Some of the commands were done directly on the delegate, don't attempt to convert
30773087
log.warn("Delegate returned an unexpected number of results; Abandoning type conversion.");
30783088
return results;
30793089
}
3090+
30803091
List<Object> convertedResults = new ArrayList<>(results.size());
3092+
30813093
for (Object result : results) {
30823094

30833095
Converter converter = converters.remove();
3096+
30843097
convertedResults.add(result == null ? null : converter.convert(result));
30853098
}
3099+
30863100
return convertedResults;
30873101
}
30883102

@@ -3095,9 +3109,11 @@ public List<Long> bitField(byte[] key, BitFieldSubCommands subCommands) {
30953109
public List<Long> bitfield(String key, BitFieldSubCommands operation) {
30963110

30973111
List<Long> results = delegate.bitField(serialize(key), operation);
3112+
30983113
if (isFutureConversion()) {
30993114
addResultConverter(Converters.identityConverter());
31003115
}
3116+
31013117
return results;
31023118
}
31033119

0 commit comments

Comments
 (0)