From 8190b432ecb815a8484ed911e0daf60bc3d6b8c8 Mon Sep 17 00:00:00 2001 From: Jonathan Cobb Date: Tue, 14 Jul 2020 02:25:05 -0400 Subject: [PATCH] add redis expire command, use when confirming lock --- .../wizard/cache/redis/RedisService.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/wizard-server/src/main/java/org/cobbzilla/wizard/cache/redis/RedisService.java b/wizard-server/src/main/java/org/cobbzilla/wizard/cache/redis/RedisService.java index ba59933..0f9af92 100644 --- a/wizard-server/src/main/java/org/cobbzilla/wizard/cache/redis/RedisService.java +++ b/wizard-server/src/main/java/org/cobbzilla/wizard/cache/redis/RedisService.java @@ -153,6 +153,7 @@ public class RedisService { public void setObject(String key, T thing) { __set(key, toJsonOrDie(thing), 0, MAX_RETRIES); } public Long touch(String key) { return __touch(key, 0, MAX_RETRIES); } + public Long expire(String key, long ttl) { return __expire(key, (int) ttl, 0, MAX_RETRIES); } public List list(String key) { return lrange(key, 0, -1); } public Long llen(String key) { return __llen(key, 0, MAX_RETRIES); } @@ -238,11 +239,11 @@ public class RedisService { public static final String LOCK_SUFFIX = "._lock"; - public boolean confirmLock(String key, String lock) { + public boolean confirmLock(String key, String lock, long lockTimeout) { key = key + LOCK_SUFFIX; final String lockVal = get(key); if (lockVal != null && lockVal.equals(lock)) { - touch(key); + expire(key, lockTimeout); return true; } return false; @@ -456,6 +457,18 @@ public class RedisService { } } + private Long __expire(String key, int ttl, int attempt, int maxRetries) { + try { + synchronized (redis) { + return getRedis().expire(prefix(key), ttl); + } + } catch (RuntimeException e) { + if (attempt > maxRetries) throw e; + resetForRetry(attempt, "retrying RedisService.__expire"); + return __expire(key, ttl, attempt+1, maxRetries); + } + } + private Long __lpush(String key, String value, int attempt, int maxRetries) { try { synchronized (redis) {