|
|
@@ -220,18 +220,21 @@ public class RedisService { |
|
|
|
} |
|
|
|
|
|
|
|
public String lock(String key, long lockTimeout, long deadlockTimeout) { |
|
|
|
log.debug("lock("+key+") starting"); |
|
|
|
key = key + LOCK_SUFFIX; |
|
|
|
final String uuid = UUID.randomUUID().toString(); |
|
|
|
String lockVal = get(key); |
|
|
|
final long start = now(); |
|
|
|
while ((lockVal == null || !lockVal.equals(uuid)) && (now() - start < lockTimeout)) { |
|
|
|
set(key, uuid, NX, EX, deadlockTimeout/1000); |
|
|
|
log.debug("lock("+key+") locked with uuid="+uuid); |
|
|
|
lockVal = get(key); |
|
|
|
log.debug("lock("+key+") after locking with uuid="+uuid+", lockVal="+lockVal); |
|
|
|
} |
|
|
|
if (lockVal == null || !lockVal.equals(uuid)) { |
|
|
|
return die("lock: timeout locking "+key); |
|
|
|
} |
|
|
|
log.info("lock: LOCKED "+key); |
|
|
|
log.debug("lock: LOCKED "+key+" = "+lockVal); |
|
|
|
return uuid; |
|
|
|
} |
|
|
|
|
|
|
|