Skip to content

Commit d58cca4

Browse files
mp911dechristophstrobl
authored andcommitted
Use Long.parseUnsignedLong/toUnsignedString for SCAN cursor id parsing.
Redis uses an unsigned 64bit value for its cursor id which is now captured via parseUnsignedLong. Closes: #2796
1 parent 439cc36 commit d58cca4

13 files changed

+27
-23
lines changed

src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterHashCommands.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -278,9 +278,10 @@ protected ScanIteration<Entry<byte[], byte[]>> doScan(long cursorId, ScanOptions
278278

279279
ScanParams params = JedisConverters.toScanParams(options);
280280

281-
ScanResult<Entry<byte[], byte[]>> result = connection.getCluster().hscan(key, JedisConverters.toBytes(cursorId),
281+
ScanResult<Entry<byte[], byte[]>> result = connection.getCluster().hscan(key,
282+
JedisConverters.toBytes(Long.toUnsignedString(cursorId)),
282283
params);
283-
return new ScanIteration<>(Long.valueOf(result.getCursor()), result.getResult());
284+
return new ScanIteration<>(Long.parseUnsignedLong(result.getCursor()), result.getResult());
284285
}
285286
}.open();
286287
}

src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterKeyCommands.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -180,8 +180,8 @@ Cursor<byte[]> scan(RedisClusterNode node, ScanOptions options) {
180180
protected ScanIteration<byte[]> doScan(long cursorId, ScanOptions options) {
181181

182182
ScanParams params = JedisConverters.toScanParams(options);
183-
ScanResult<String> result = client.scan(Long.toString(cursorId), params);
184-
return new ScanIteration<>(Long.valueOf(result.getCursor()),
183+
ScanResult<String> result = client.scan(Long.toUnsignedString(cursorId), params);
184+
return new ScanIteration<>(Long.parseUnsignedLong(result.getCursor()),
185185
JedisConverters.stringListToByteList().convert(result.getResult()));
186186
}
187187
}.open();

src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterSetCommands.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -397,8 +397,9 @@ public Cursor<byte[]> sScan(byte[] key, ScanOptions options) {
397397
protected ScanIteration<byte[]> doScan(long cursorId, ScanOptions options) {
398398

399399
ScanParams params = JedisConverters.toScanParams(options);
400-
ScanResult<byte[]> result = connection.getCluster().sscan(key, JedisConverters.toBytes(cursorId), params);
401-
return new ScanIteration<>(Long.parseLong(result.getCursor()), result.getResult());
400+
ScanResult<byte[]> result = connection.getCluster().sscan(key,
401+
JedisConverters.toBytes(Long.toUnsignedString(cursorId)), params);
402+
return new ScanIteration<>(Long.parseUnsignedLong(result.getCursor()), result.getResult());
402403
}
403404
}.open();
404405
}

src/main/java/org/springframework/data/redis/connection/jedis/JedisClusterZSetCommands.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -1077,8 +1077,8 @@ protected ScanIteration<Tuple> doScan(long cursorId, ScanOptions options) {
10771077
ScanParams params = JedisConverters.toScanParams(options);
10781078

10791079
ScanResult<redis.clients.jedis.resps.Tuple> result = connection.getCluster().zscan(key,
1080-
JedisConverters.toBytes(cursorId), params);
1081-
return new ScanIteration<>(Long.valueOf(result.getCursor()),
1080+
JedisConverters.toBytes(Long.toUnsignedString(cursorId)), params);
1081+
return new ScanIteration<>(Long.parseUnsignedLong(result.getCursor()),
10821082
JedisConverters.tuplesToTuples().convert(result.getResult()));
10831083
}
10841084
}.open();

src/main/java/org/springframework/data/redis/connection/jedis/JedisHashCommands.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -237,9 +237,10 @@ protected ScanIteration<Entry<byte[], byte[]>> doScan(byte[] key, long cursorId,
237237

238238
ScanParams params = JedisConverters.toScanParams(options);
239239

240-
ScanResult<Entry<byte[], byte[]>> result = connection.getJedis().hscan(key, JedisConverters.toBytes(cursorId),
240+
ScanResult<Entry<byte[], byte[]>> result = connection.getJedis().hscan(key,
241+
JedisConverters.toBytes(Long.toUnsignedString(cursorId)),
241242
params);
242-
return new ScanIteration<>(Long.valueOf(result.getCursor()), result.getResult());
243+
return new ScanIteration<>(Long.parseUnsignedLong(result.getCursor()), result.getResult());
243244
}
244245

245246
@Override

src/main/java/org/springframework/data/redis/connection/jedis/JedisKeyCommands.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -165,12 +165,12 @@ protected ScanIteration<byte[]> doScan(long cursorId, ScanOptions options) {
165165
}
166166

167167
if (type != null) {
168-
result = connection.getJedis().scan(Long.toString(cursorId).getBytes(), params, type);
168+
result = connection.getJedis().scan(Long.toUnsignedString(cursorId).getBytes(), params, type);
169169
} else {
170-
result = connection.getJedis().scan(Long.toString(cursorId).getBytes(), params);
170+
result = connection.getJedis().scan(Long.toUnsignedString(cursorId).getBytes(), params);
171171
}
172172

173-
return new ScanIteration<>(Long.parseLong(result.getCursor()), result.getResult());
173+
return new ScanIteration<>(Long.parseUnsignedLong(result.getCursor()), result.getResult());
174174
}
175175

176176
protected void doClose() {

src/main/java/org/springframework/data/redis/connection/jedis/JedisSetCommands.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -231,8 +231,9 @@ protected ScanIteration<byte[]> doScan(byte[] key, long cursorId, ScanOptions op
231231

232232
ScanParams params = JedisConverters.toScanParams(options);
233233

234-
ScanResult<byte[]> result = connection.getJedis().sscan(key, JedisConverters.toBytes(cursorId), params);
235-
return new ScanIteration<>(Long.valueOf(result.getCursor()), result.getResult());
234+
ScanResult<byte[]> result = connection.getJedis().sscan(key,
235+
JedisConverters.toBytes(Long.toUnsignedString(cursorId)), params);
236+
return new ScanIteration<>(Long.parseUnsignedLong(result.getCursor()), result.getResult());
236237
}
237238

238239
protected void doClose() {

src/main/java/org/springframework/data/redis/connection/jedis/JedisZSetCommands.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -582,8 +582,8 @@ protected ScanIteration<Tuple> doScan(byte[] key, long cursorId, ScanOptions opt
582582
ScanParams params = JedisConverters.toScanParams(options);
583583

584584
ScanResult<redis.clients.jedis.resps.Tuple> result = connection.getJedis().zscan(key,
585-
JedisConverters.toBytes(cursorId), params);
586-
return new ScanIteration<>(Long.valueOf(result.getCursor()),
585+
JedisConverters.toBytes(Long.toUnsignedString(cursorId)), params);
586+
return new ScanIteration<>(Long.parseUnsignedLong(result.getCursor()),
587587
JedisConverters.tuplesToTuples().convert(result.getResult()));
588588
}
589589

src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnection.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1015,7 +1015,7 @@ private void potentiallySelectDatabase(int dbIndex) {
10151015
}
10161016

10171017
io.lettuce.core.ScanCursor getScanCursor(long cursorId) {
1018-
return io.lettuce.core.ScanCursor.of(Long.toString(cursorId));
1018+
return io.lettuce.core.ScanCursor.of(Long.toUnsignedString(cursorId));
10191019
}
10201020

10211021
private void validateCommandIfRunningInTransactionMode(ProtocolKeyword cmd, byte[]... args) {

src/main/java/org/springframework/data/redis/connection/lettuce/LettuceHashCommands.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ protected ScanIteration<Entry<byte[], byte[]>> doScan(byte[] key, long cursorId,
235235
String nextCursorId = mapScanCursor.getCursor();
236236

237237
Map<byte[], byte[]> values = mapScanCursor.getMap();
238-
return new ScanIteration<>(Long.valueOf(nextCursorId), values.entrySet());
238+
return new ScanIteration<>(Long.parseUnsignedLong(nextCursorId), values.entrySet());
239239
}
240240

241241
@Override

src/main/java/org/springframework/data/redis/connection/lettuce/LettuceScanCursor.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ private ScanIteration<T> scanAndProcessState(io.lettuce.core.ScanCursor scanCurs
7777
}
7878

7979
private boolean isMatchingCursor(long cursorId) {
80-
return state != null && state.getCursor().equals(Long.toString(cursorId));
80+
return state != null && state.getCursor().equals(Long.toUnsignedString(cursorId));
8181
}
8282

8383
/**
@@ -101,7 +101,7 @@ static class LettuceScanIteration<T> extends ScanIteration<T> {
101101

102102
LettuceScanIteration(io.lettuce.core.ScanCursor cursor, Collection<T> items) {
103103

104-
super(Long.parseLong(cursor.getCursor()), items);
104+
super(Long.parseUnsignedLong(cursor.getCursor()), items);
105105
this.cursor = cursor;
106106
}
107107
}

src/main/java/org/springframework/data/redis/connection/lettuce/LettuceSetCommands.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ protected ScanIteration<byte[]> doScan(byte[] key, long cursorId, ScanOptions op
232232
String nextCursorId = valueScanCursor.getCursor();
233233

234234
List<byte[]> values = connection.failsafeReadScanValues(valueScanCursor.getValues(), null);
235-
return new ScanIteration<>(Long.valueOf(nextCursorId), values);
235+
return new ScanIteration<>(Long.parseUnsignedLong(nextCursorId), values);
236236
}
237237

238238
protected void doClose() {

src/main/java/org/springframework/data/redis/connection/lettuce/LettuceZSetCommands.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -559,7 +559,7 @@ protected ScanIteration<Tuple> doScan(byte[] key, long cursorId, ScanOptions opt
559559
List<ScoredValue<byte[]>> result = scoredValueScanCursor.getValues();
560560

561561
List<Tuple> values = connection.failsafeReadScanValues(result, LettuceConverters.scoredValuesToTupleList());
562-
return new ScanIteration<>(Long.valueOf(nextCursorId), values);
562+
return new ScanIteration<>(Long.parseUnsignedLong(nextCursorId), values);
563563
}
564564

565565
@Override

0 commit comments

Comments
 (0)