Skip to content

Upgrade to Jedis 3.7 #2154

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions pom.xml
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>org.springframework.data</groupId>
<artifactId>spring-data-redis</artifactId>
<version>2.6.0-SNAPSHOT</version>
<version>2.6.0-2153-SNAPSHOT</version>

<name>Spring Data Redis</name>

Expand All @@ -23,7 +25,7 @@
<xstream>1.4.18</xstream>
<pool>2.9.0</pool>
<lettuce>6.1.4.RELEASE</lettuce>
<jedis>3.6.3</jedis>
<jedis>3.7.0</jedis>
<multithreadedtc>1.01</multithreadedtc>
<netty>4.1.65.Final</netty>
<java-module-name>spring.data.redis</java-module-name>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@
import redis.clients.jedis.BinaryJedis;
import redis.clients.jedis.MultiKeyPipelineBase;
import redis.clients.jedis.ScanParams;
import redis.clients.jedis.ScanResult;
import redis.clients.jedis.SortingParams;

import java.nio.charset.StandardCharsets;
import java.time.Duration;
import java.util.List;
import java.util.Set;
Expand All @@ -38,6 +40,7 @@
import org.springframework.data.redis.core.ScanOptions;
import org.springframework.lang.Nullable;
import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;

/**
* @author Christoph Strobl
Expand Down Expand Up @@ -172,10 +175,6 @@ public Cursor<byte[]> scan(ScanOptions options) {
*/
public Cursor<byte[]> scan(long cursorId, ScanOptions options) {

if (options instanceof KeyScanOptions && ((KeyScanOptions) options).getType() != null) {
throw new UnsupportedOperationException("'SCAN' with type is not yet supported using the Jedis driver");
}

return new ScanCursor<byte[]>(cursorId, options) {

@Override
Expand All @@ -186,8 +185,25 @@ protected ScanIteration<byte[]> doScan(long cursorId, ScanOptions options) {
}

ScanParams params = JedisConverters.toScanParams(options);
redis.clients.jedis.ScanResult<byte[]> result = connection.getJedis().scan(Long.toString(cursorId).getBytes(),

ScanResult<byte[]> result;
byte[] type = null;

if (options instanceof KeyScanOptions) {
String typeAsString = ((KeyScanOptions) options).getType();

if (!ObjectUtils.isEmpty(typeAsString)) {
type = typeAsString.getBytes(StandardCharsets.US_ASCII);
}
}

if (type != null) {
result = connection.getJedis().scan(Long.toString(cursorId).getBytes(), params, type);
} else {
result = connection.getJedis().scan(Long.toString(cursorId).getBytes(),
params);
}

return new ScanIteration<>(Long.parseLong(result.getCursor()),
result.getResult());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,14 +18,14 @@
import redis.clients.jedis.BinaryJedis;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.MultiKeyPipelineBase;
import redis.clients.jedis.args.SaveMode;

import java.util.List;
import java.util.Properties;
import java.util.concurrent.TimeUnit;

import org.springframework.data.redis.connection.RedisNode;
import org.springframework.data.redis.connection.RedisServerCommands;
import org.springframework.data.redis.connection.ReturnType;
import org.springframework.data.redis.connection.convert.Converters;
import org.springframework.data.redis.core.types.RedisClientInfo;
import org.springframework.lang.Nullable;
Expand Down Expand Up @@ -151,7 +151,9 @@ public void shutdown(ShutdownOption option) {
return;
}

connection.eval(String.format(SHUTDOWN_SCRIPT, option.name()).getBytes(), ReturnType.STATUS, 0);
SaveMode saveMode = (option == ShutdownOption.NOSAVE) ? SaveMode.NOSAVE : SaveMode.SAVE;

connection.getJedis().shutdown(saveMode);
}

/*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2600,8 +2600,7 @@ void scanShouldReadEntireValueRange() {
assertThat(i).isEqualTo(itemCount);
}

@Test // GH-2089
@EnabledOnRedisDriver(RedisDriver.LETTUCE)
@Test // GH-2089, GH-2153
@EnabledOnRedisVersion("6.0")
void scanWithType() {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,6 @@ public void tearDown() {
connection = null;
}

@Disabled("Jedis issue: Pipeline tries to return String instead of List<String>")
public void testGetConfig() {}

@Test
public void testWatch() {
connection.set("testitnow", "willdo");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
import redis.clients.jedis.Jedis;
import redis.clients.jedis.ScanParams;
import redis.clients.jedis.ScanResult;
import redis.clients.jedis.args.SaveMode;
import redis.clients.jedis.exceptions.JedisException;

import java.io.IOException;
import java.util.Collections;
Expand All @@ -30,8 +32,8 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;

import org.springframework.dao.InvalidDataAccessApiUsageException;
import org.springframework.dao.InvalidDataAccessResourceUsageException;
import org.springframework.data.redis.connection.AbstractConnectionUnitTestBase;
import org.springframework.data.redis.connection.RedisServerCommands.ShutdownOption;
Expand All @@ -58,34 +60,32 @@ public void setUp() {
connection = new JedisConnection(jedisSpy);
}

@Test // DATAREDIS-184
@Test // DATAREDIS-184, GH-2153
void shutdownWithNullShouldDelegateCommandCorrectly() {

connection.shutdown(null);
try {
connection.shutdown(null);
} catch (InvalidDataAccessApiUsageException e) {
// all good. Sometimes it throws an Exception.s
}

verifyNativeConnectionInvocation().shutdown();
}

@Test // DATAREDIS-184
public void shutdownNosaveShouldBeSentCorrectlyUsingLuaScript() {
@Test // DATAREDIS-184, GH-2153
void shutdownNosaveShouldBeSentCorrectly() {

connection.shutdown(ShutdownOption.NOSAVE);
assertThatExceptionOfType(JedisException.class).isThrownBy(() -> connection.shutdown(ShutdownOption.NOSAVE));

ArgumentCaptor<byte[]> captor = ArgumentCaptor.forClass(byte[].class);
verifyNativeConnectionInvocation().eval(captor.capture(), any(byte[].class), any(byte[][].class));

assertThat(captor.getValue()).isEqualTo("return redis.call('SHUTDOWN','NOSAVE')".getBytes());
verifyNativeConnectionInvocation().shutdown(SaveMode.NOSAVE);
}

@Test // DATAREDIS-184
public void shutdownSaveShouldBeSentCorrectlyUsingLuaScript() {

connection.shutdown(ShutdownOption.SAVE);
@Test // DATAREDIS-184, GH-2153
void shutdownSaveShouldBeSentCorrectly() {

ArgumentCaptor<byte[]> captor = ArgumentCaptor.forClass(byte[].class);
verifyNativeConnectionInvocation().eval(captor.capture(), any(byte[].class), any(byte[][].class));
assertThatExceptionOfType(JedisException.class).isThrownBy(() -> connection.shutdown(ShutdownOption.SAVE));

assertThat(captor.getValue()).isEqualTo("return redis.call('SHUTDOWN','SAVE')".getBytes());
verifyNativeConnectionInvocation().shutdown(SaveMode.SAVE);
}

@Test // DATAREDIS-267
Expand Down Expand Up @@ -279,22 +279,6 @@ public void setUp() {
connection.openPipeline();
}

@Test
@Override
// DATAREDIS-184
public void shutdownNosaveShouldBeSentCorrectlyUsingLuaScript() {
assertThatExceptionOfType(UnsupportedOperationException.class)
.isThrownBy(() -> super.shutdownNosaveShouldBeSentCorrectlyUsingLuaScript());
}

@Test
@Override
// DATAREDIS-184
public void shutdownSaveShouldBeSentCorrectlyUsingLuaScript() {
assertThatExceptionOfType(UnsupportedOperationException.class)
.isThrownBy(() -> super.shutdownSaveShouldBeSentCorrectlyUsingLuaScript());
}

@Test // DATAREDIS-267
public void killClientShouldDelegateCallCorrectly() {
assertThatExceptionOfType(UnsupportedOperationException.class)
Expand Down