diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/UsernamesManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/UsernamesManager.java index cb414dd7a..a3949ca3d 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/UsernamesManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/UsernamesManager.java @@ -46,7 +46,7 @@ public class UsernamesManager { } if (databasePut(uuid, username)) { - redisSet(uuid, username); + redisSet(uuid, username, true); return true; } @@ -64,7 +64,7 @@ public class UsernamesManager { } Optional retrieved = databaseGet(username); - retrieved.ifPresent(retrievedUuid -> redisSet(retrievedUuid, username)); + retrieved.ifPresent(retrievedUuid -> redisSet(retrievedUuid, username, false)); return retrieved; } @@ -79,7 +79,7 @@ public class UsernamesManager { } Optional retrieved = databaseGet(uuid); - retrieved.ifPresent(retrievedUsername -> redisSet(uuid, retrievedUsername)); + retrieved.ifPresent(retrievedUsername -> redisSet(uuid, retrievedUsername, false)); return retrieved; } @@ -108,7 +108,7 @@ public class UsernamesManager { return usernames.get(uuid); } - private void redisSet(UUID uuid, String username) { + private void redisSet(UUID uuid, String username, boolean required) { try (Jedis jedis = cacheClient.getWriteResource(); Timer.Context ignored = redisSetTimer.time()) { @@ -116,6 +116,9 @@ public class UsernamesManager { jedis.set(getUuidMapKey(uuid), username); jedis.set(getUsernameMapKey(username), uuid.toString()); + } catch (JedisException e) { + if (required) throw e; + else logger.warn("Ignoring jedis failure", e); } } diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/UsernamesManagerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/UsernamesManagerTest.java index 3afda4ec3..0bcf862f8 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/UsernamesManagerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/tests/storage/UsernamesManagerTest.java @@ -92,6 +92,7 @@ public class UsernamesManagerTest { verify(jedis, times(1)).get(eq("UsernameByUsername::n00bkiller")); verify(jedis, times(1)).set(eq("UsernameByUsername::n00bkiller"), eq(uuid.toString())); verify(jedis, times(1)).set(eq("UsernameByUuid::" + uuid.toString()), eq("n00bkiller")); + verify(jedis, times(1)).get(eq("UsernameByUuid::" + uuid.toString())); verify(jedis, times(2)).close(); verifyNoMoreInteractions(jedis); @@ -119,7 +120,7 @@ public class UsernamesManagerTest { assertTrue(retrieved.isPresent()); assertEquals(retrieved.get(), "n00bkiller"); - verify(jedis, times(1)).get(eq("UsernameByUuid::" + uuid)); + verify(jedis, times(2)).get(eq("UsernameByUuid::" + uuid)); verify(jedis, times(1)).set(eq("UsernameByUuid::" + uuid), eq("n00bkiller")); verify(jedis, times(1)).set(eq("UsernameByUsername::n00bkiller"), eq(uuid.toString())); verify(jedis, times(2)).close(); @@ -152,6 +153,7 @@ public class UsernamesManagerTest { verify(jedis, times(1)).get(eq("UsernameByUsername::n00bkiller")); verify(jedis, times(1)).set(eq("UsernameByUsername::n00bkiller"), eq(uuid.toString())); verify(jedis, times(1)).set(eq("UsernameByUuid::" + uuid.toString()), eq("n00bkiller")); + verify(jedis, times(1)).get(eq("UsernameByUuid::" + uuid.toString())); verify(jedis, times(2)).close(); verifyNoMoreInteractions(jedis); @@ -179,9 +181,7 @@ public class UsernamesManagerTest { assertTrue(retrieved.isPresent()); assertEquals(retrieved.get(), "n00bkiller"); - verify(jedis, times(1)).get(eq("UsernameByUuid::" + uuid)); - verify(jedis, times(1)).set(eq("UsernameByUsername::n00bkiller"), eq(uuid.toString())); - verify(jedis, times(1)).set(eq("UsernameByUuid::" + uuid.toString()), eq("n00bkiller")); + verify(jedis, times(2)).get(eq("UsernameByUuid::" + uuid)); verify(jedis, times(2)).close(); verifyNoMoreInteractions(jedis);