diff --git a/redisson/src/main/java/org/redisson/executor/TasksRunnerService.java b/redisson/src/main/java/org/redisson/executor/TasksRunnerService.java index c2744f0db..4d0c2b5a6 100644 --- a/redisson/src/main/java/org/redisson/executor/TasksRunnerService.java +++ b/redisson/src/main/java/org/redisson/executor/TasksRunnerService.java @@ -392,6 +392,7 @@ public class TasksRunnerService implements RemoteExecutorService { script += "local scheduled = redis.call('zscore', KEYS[5], ARGV[3]);" + "if scheduled == false then " + "redis.call('hdel', KEYS[4], ARGV[3]); " + + "redis.call('zrem', KEYS[7], ARGV[3]); " + "end;"; } script += "redis.call('zrem', KEYS[5], 'ff:' .. ARGV[3]);" + @@ -406,7 +407,7 @@ public class TasksRunnerService implements RemoteExecutorService { RFuture f = commandExecutor.evalWriteNoRetryAsync(name, StringCodec.INSTANCE, RedisCommands.EVAL_VOID, script, - Arrays.asList(tasksCounterName, statusName, terminationTopicName, tasksName, schedulerQueueName, tasksRetryIntervalName), + Arrays.asList(tasksCounterName, statusName, terminationTopicName, tasksName, schedulerQueueName, tasksRetryIntervalName, tasksExpirationTimeName), RedissonExecutorService.SHUTDOWN_STATE, RedissonExecutorService.TERMINATED_STATE, requestId); commandExecutor.get(f); } diff --git a/redisson/src/test/java/org/redisson/executor/RedissonExecutorServiceTest.java b/redisson/src/test/java/org/redisson/executor/RedissonExecutorServiceTest.java index 6930ba357..7e0034917 100644 --- a/redisson/src/test/java/org/redisson/executor/RedissonExecutorServiceTest.java +++ b/redisson/src/test/java/org/redisson/executor/RedissonExecutorServiceTest.java @@ -611,6 +611,19 @@ public class RedissonExecutorServiceTest extends RedisDockerTest { assertThat(redisson.getKeys().countExists("testparam")).isEqualTo(0); } + @Test + public void testExpiration() throws InterruptedException, ExecutionException { + RScheduledExecutorService executor = redisson.getExecutorService("test"); + Future future = executor.submit(new ScheduledRunnableTask("testparam"), 10, TimeUnit.SECONDS); + + future.get(); + + assertThat(redisson.getKeys().countExists("testparam")).isEqualTo(1); + String tasksExpirationTimeName = Reflect.on(executor).get("tasksExpirationTimeName"); + RScoredSortedSet set = redisson.getScoredSortedSet(tasksExpirationTimeName); + assertThat(set.size()).isEqualTo(0); + } + @Test public void testAnonymousRunnable() { Assertions.assertThrows(IllegalArgumentException.class, () -> {