Skip to content

Commit 297ee41

Browse files
committed
Polishing.
Enable SCRIPT FLUSH and SCRIPT KILL for pipelining/transaction usage. Use lambdas where possible. Original pull request: #2988 See #1455
1 parent b22f1ab commit 297ee41

File tree

4 files changed

+14
-54
lines changed

4 files changed

+14
-54
lines changed

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

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@
1616
package org.springframework.data.redis.connection.jedis;
1717

1818
import redis.clients.jedis.Jedis;
19+
import redis.clients.jedis.commands.ScriptingKeyPipelineBinaryCommands;
1920

2021
import java.util.List;
2122

22-
import org.springframework.dao.InvalidDataAccessApiUsageException;
2323
import org.springframework.data.redis.connection.RedisScriptingCommands;
2424
import org.springframework.data.redis.connection.ReturnType;
2525
import org.springframework.util.Assert;
@@ -31,6 +31,7 @@
3131
*/
3232
class JedisScriptingCommands implements RedisScriptingCommands {
3333

34+
private static final byte[] SAMPLE_KEY = new byte[0];
3435
private final JedisConnection connection;
3536

3637
JedisScriptingCommands(JedisConnection connection) {
@@ -39,37 +40,35 @@ class JedisScriptingCommands implements RedisScriptingCommands {
3940

4041
@Override
4142
public void scriptFlush() {
42-
43-
assertDirectMode();
44-
45-
connection.invoke().just(Jedis::scriptFlush);
43+
connection.invoke().just(Jedis::scriptFlush, it -> it.scriptFlush(SAMPLE_KEY));
4644
}
4745

4846
@Override
4947
public void scriptKill() {
50-
51-
assertDirectMode();
52-
53-
connection.invoke().just(Jedis::scriptKill);
48+
connection.invoke().just(Jedis::scriptKill, it -> it.scriptKill(SAMPLE_KEY));
5449
}
5550

5651
@Override
5752
public String scriptLoad(byte[] script) {
5853

5954
Assert.notNull(script, "Script must not be null");
60-
assertDirectMode();
6155

62-
return connection.invoke().from(it -> it.scriptLoad(script)).get(JedisConverters::toString);
56+
return connection.invoke().from(it -> it.scriptLoad(script), it -> it.scriptLoad(script, SAMPLE_KEY))
57+
.get(JedisConverters::toString);
6358
}
6459

6560
@Override
6661
public List<Boolean> scriptExists(String... scriptSha1) {
6762

6863
Assert.notNull(scriptSha1, "Script digests must not be null");
6964
Assert.noNullElements(scriptSha1, "Script digests must not contain null elements");
70-
assertDirectMode();
7165

72-
return connection.invoke().just(it -> it.scriptExists(scriptSha1));
66+
byte[][] sha1 = new byte[scriptSha1.length][];
67+
for (int i = 0; i < scriptSha1.length; i++) {
68+
sha1[i] = JedisConverters.toBytes(scriptSha1[i]);
69+
}
70+
71+
return connection.invoke().just(it -> it.scriptExists(scriptSha1), it -> it.scriptExists(SAMPLE_KEY, sha1));
7372
}
7473

7574
@Override
@@ -80,7 +79,7 @@ public <T> T eval(byte[] script, ReturnType returnType, int numKeys, byte[]... k
8079

8180
JedisScriptReturnConverter converter = new JedisScriptReturnConverter(returnType);
8281
return (T) connection.invoke()
83-
.from(it -> it.eval(script, numKeys, keysAndArgs), t -> t.eval(script, numKeys, keysAndArgs))
82+
.from(Jedis::eval, ScriptingKeyPipelineBinaryCommands::eval, script, numKeys, keysAndArgs)
8483
.getOrElse(converter, () -> converter.convert(null));
8584
}
8685

@@ -97,15 +96,9 @@ public <T> T evalSha(byte[] scriptSha, ReturnType returnType, int numKeys, byte[
9796

9897
JedisScriptReturnConverter converter = new JedisScriptReturnConverter(returnType);
9998
return (T) connection.invoke()
100-
.from(it -> it.evalsha(scriptSha, numKeys, keysAndArgs), t -> t.evalsha(scriptSha, numKeys, keysAndArgs))
99+
.from(Jedis::evalsha, ScriptingKeyPipelineBinaryCommands::evalsha, scriptSha, numKeys, keysAndArgs)
101100
.getOrElse(converter, () -> converter.convert(null)
102101
);
103102
}
104103

105-
private void assertDirectMode() {
106-
if (connection.isQueueing() || connection.isPipelined()) {
107-
throw new InvalidDataAccessApiUsageException("Scripting commands not supported in pipelining/transaction mode");
108-
}
109-
}
110-
111104
}

src/test/java/org/springframework/data/redis/connection/AbstractConnectionTransactionIntegrationTests.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -134,13 +134,6 @@ public void testWatchWhileInTx() {
134134
.isThrownBy(() -> connection.watch("foo".getBytes()));
135135
}
136136

137-
@Test
138-
public void testScriptKill() {
139-
// Impossible to call script kill in a tx because you can't issue the
140-
// exec command while Redis is running a script
141-
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(() -> connection.scriptKill());
142-
}
143-
144137
@Test // DATAREDIS-417
145138
@Disabled
146139
@Override

src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionPipelineIntegrationTests.java

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -76,20 +76,6 @@ public void testClosePoolPipelinedDbSelect() {
7676
}
7777

7878
// Unsupported Ops
79-
@Test
80-
public void testScriptExists() {
81-
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::testScriptExists);
82-
}
83-
84-
@Test
85-
public void testScriptKill() {
86-
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(() -> connection.scriptKill());
87-
}
88-
89-
@Test
90-
@Disabled
91-
public void testScriptFlush() {}
92-
9379
@Test // DATAREDIS-269
9480
public void clientSetNameWorksCorrectly() {
9581
assertThatExceptionOfType(InvalidDataAccessApiUsageException.class).isThrownBy(super::clientSetNameWorksCorrectly);

src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionTransactionIntegrationTests.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -95,18 +95,6 @@ public void testEvalReturnSingleError() {
9595

9696

9797
// Unsupported Ops
98-
@Test
99-
@Disabled
100-
public void testScriptExists() {}
101-
102-
@Test
103-
@Disabled
104-
public void testScriptKill() {}
105-
106-
@Test
107-
@Disabled
108-
public void testScriptFlush() {}
109-
11098
@Test
11199
@Disabled
112100
public void testInfoBySection() {}

0 commit comments

Comments
 (0)