Skip to content

Commit 0cc6a1b

Browse files
author
codeba
committed
fix(support): Fix RScriptAsync not executing evalAsync when executing evalShaAsync fails
1 parent aa6ea5c commit 0cc6a1b

File tree

4 files changed

+38
-16
lines changed

4 files changed

+38
-16
lines changed

redis-keeper-support/src/main/java/org/codeba/redis/keeper/support/DefaultRedissonTemplate.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2118,13 +2118,13 @@ public CompletableFuture<Void> setObjectEXAsync(String key, Object value, Durati
21182118

21192119
@Override
21202120
public Map<String, Object> mGet(String... keys) {
2121-
log("mGet", keys);
2121+
log("mGet", Arrays.toString(keys));
21222122
return kString.mGet(keys);
21232123
}
21242124

21252125
@Override
21262126
public CompletableFuture<Map<String, Object>> mGetAsync(String... keys) {
2127-
log("mGetAsync", keys);
2127+
log("mGetAsync", Arrays.toString(keys));
21282128
return kString.mGetAsync(keys);
21292129
}
21302130

@@ -2334,13 +2334,13 @@ public CompletableFuture<Object> executeScriptAsync(String script, List<Object>
23342334

23352335
@Override
23362336
public long exists(String... keys) {
2337-
log("exists", keys);
2337+
log("exists", Arrays.toString(keys));
23382338
return kGeneric.exists(keys);
23392339
}
23402340

23412341
@Override
23422342
public CompletableFuture<Long> existsAsync(String... keys) {
2343-
log("existsAsync", keys);
2343+
log("existsAsync", Arrays.toString(keys));
23442344
return kGeneric.existsAsync(keys);
23452345
}
23462346

@@ -2370,25 +2370,25 @@ public CompletableFuture<Boolean> expireAtAsync(String key, long timestamp) {
23702370

23712371
@Override
23722372
public long del(String... keys) {
2373-
log("del", keys);
2373+
log("del", Arrays.toString(keys));
23742374
return kGeneric.del(keys);
23752375
}
23762376

23772377
@Override
23782378
public CompletableFuture<Long> delAsync(String... keys) {
2379-
log("delAsync", keys);
2379+
log("delAsync", Arrays.toString(keys));
23802380
return kGeneric.delAsync(keys);
23812381
}
23822382

23832383
@Override
23842384
public long unlink(String... keys) {
2385-
log("unlink", keys);
2385+
log("unlink", Arrays.toString(keys));
23862386
return kGeneric.unlink(keys);
23872387
}
23882388

23892389
@Override
23902390
public CompletableFuture<Long> unlinkAsync(String... keys) {
2391-
log("unlinkAsync", keys);
2391+
log("unlinkAsync", Arrays.toString(keys));
23922392
return kGeneric.unlinkAsync(keys).toCompletableFuture();
23932393
}
23942394

redis-keeper-support/src/main/java/org/codeba/redis/keeper/support/KRedissonScriptAsync.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,16 @@ public CompletableFuture<Object> executeScriptAsync(String script, List<Object>
5959
/* evalSha: 此处必须加上 StringCodec.INSTANCE */
6060
final RScriptAsync rScript = getRScript();
6161
String shaDigests = sha1DigestAsHex(script);
62-
try {
63-
return rScript.evalShaAsync(RScript.Mode.READ_WRITE, shaDigests, RScript.ReturnType.VALUE, keys, values).toCompletableFuture();
64-
} catch (RedisException e) {
65-
return rScript.evalAsync(RScript.Mode.READ_WRITE, script, RScript.ReturnType.VALUE, keys, values).toCompletableFuture();
66-
}
62+
return rScript.evalShaAsync(RScript.Mode.READ_WRITE, shaDigests, RScript.ReturnType.VALUE, keys, values)
63+
.handle((result, error) -> {
64+
if (error instanceof RedisException) {
65+
return rScript.evalAsync(RScript.Mode.READ_WRITE, script, RScript.ReturnType.VALUE, keys, values)
66+
.toCompletableFuture()
67+
.join();
68+
}
69+
return result;
70+
})
71+
.toCompletableFuture();
6772
}
6873

6974
/**

redis-keeper-support/src/main/java/org/codeba/redis/keeper/support/KRedissonStringAsync.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public CompletableFuture<Object> getAsync(String key) {
6767
return getRBucket(key, getCodec()).getAsync()
6868
.handle((object, throwable) -> {
6969
if (null != throwable) {
70-
return getRBucket(key).getAsync().join();
70+
return getRBucket(key).getAsync().toCompletableFuture().join();
7171
}
7272
return object;
7373
}).toCompletableFuture();
@@ -78,7 +78,7 @@ public CompletableFuture<Object> getObjectAsync(String key) {
7878
return getRBucket(key).getAsync()
7979
.handle((object, throwable) -> {
8080
if (null != throwable) {
81-
return getRBucket(key, getCodec()).getAsync().join();
81+
return getRBucket(key, getCodec()).getAsync().toCompletableFuture().join();
8282
}
8383
return object;
8484
}).toCompletableFuture();

redis-keeper-support/src/test/java/org/codeba/redis/keeper/support/AppTest.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.codeba.redis.keeper.core.KStringAsync;
3636
import org.codeba.redis.keeper.core.KZSetAsync;
3737
import org.codeba.redis.keeper.core.KeyType;
38+
import org.redisson.api.RedissonClient;
3839
import org.redisson.codec.JsonJacksonCodec;
3940
import org.slf4j.Logger;
4041
import org.slf4j.LoggerFactory;
@@ -4799,7 +4800,7 @@ public void testExecuteScript() throws NoSuchAlgorithmException {
47994800
* @throws NoSuchAlgorithmException the no such algorithm exception
48004801
*/
48014802
public void testExecuteScriptAsync() throws NoSuchAlgorithmException {
4802-
String saddNxLua = "local added = {};" +
4803+
String saddNxLua = "local pp = {};local added = {};" +
48034804
"for i, v in ipairs(ARGV) do" +
48044805
" local addResult = redis.call('SADD', KEYS[1], ARGV[i]);" +
48054806
" if( addResult < 1 ) then" +
@@ -5090,4 +5091,20 @@ public void testTryAcquire2Async() {
50905091
CACHE_TEMPLATE.del(key, "{" + key + "}:permits", "{" + key + "}:value");
50915092
}
50925093

5094+
public void testDefaultRedissonTemplate() {
5095+
String key = "my-key-adapter";
5096+
Object value = KeyType.LIST;
5097+
5098+
DefaultRedissonTemplate defaultRedissonTemplate = (DefaultRedissonTemplate) CACHE_TEMPLATE;
5099+
final RedissonClient redissonClient = defaultRedissonTemplate.getRedissonClient();
5100+
final boolean add = redissonClient.getScoredSortedSet(key).add(1, value);
5101+
assertTrue(add);
5102+
5103+
final boolean zRem = CACHE_TEMPLATE.zRem(key, Collections.singletonList(value));
5104+
assertFalse(zRem);
5105+
5106+
CACHE_TEMPLATE.del(key);
5107+
5108+
}
5109+
50935110
}

0 commit comments

Comments
 (0)