From 1b5dc0e434d38b17daeb03e51874b31a468e60c1 Mon Sep 17 00:00:00 2001 From: Jon Chambers Date: Sun, 7 Jun 2020 12:55:39 -0400 Subject: [PATCH] Fixed a potential issue where locks could get out of sync between Redis instances. --- .../textsecuregcm/limits/LockingRateLimiter.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/limits/LockingRateLimiter.java b/service/src/main/java/org/whispersystems/textsecuregcm/limits/LockingRateLimiter.java index 361414713..30c0396b9 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/limits/LockingRateLimiter.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/limits/LockingRateLimiter.java @@ -56,7 +56,11 @@ public class LockingRateLimiter extends RateLimiter { final String lockName = getLockName(key); final boolean acquiredLock = jedis.set(lockName, "L", "NX", "EX", 10) != null; - cacheCluster.useWriteCluster(connection -> connection.async().set(lockName, "L", SetArgs.Builder.nx().ex(10))); + + if (acquiredLock) { + // TODO Restore the NX flag when the cluster becomes the primary source of truth + cacheCluster.useWriteCluster(connection -> connection.async().set(lockName, "L", SetArgs.Builder.ex(10))); + } return acquiredLock; }