From d17c7aaba6b5d2b424ade78e76a85af67ffa6bdd Mon Sep 17 00:00:00 2001 From: Jon Chambers Date: Wed, 12 Jul 2023 17:21:23 -0400 Subject: [PATCH] Add support for clearing accounts from Redis asynchronously --- .../textsecuregcm/storage/AccountsManager.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java index d948cceae..1828355ee 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java @@ -23,6 +23,7 @@ import java.io.IOException; import java.io.UncheckedIOException; import java.time.Clock; import java.time.Duration; +import java.util.ArrayList; import java.util.Arrays; import java.util.Base64; import java.util.Collections; @@ -987,4 +988,19 @@ public class AccountsManager { }); } } + + private CompletableFuture redisDeleteAsync(final Account account) { + @SuppressWarnings("resource") final Timer.Context timerContext = redisDeleteTimer.time(); + + final List keysToDelete = new ArrayList<>(4); + keysToDelete.add(getAccountMapKey(account.getNumber())); + keysToDelete.add(getAccountMapKey(account.getPhoneNumberIdentifier().toString())); + keysToDelete.add(getAccountEntityKey(account.getUuid())); + + account.getUsernameHash().ifPresent(usernameHash -> keysToDelete.add(getUsernameHashAccountMapKey(usernameHash))); + + return cacheCluster.withCluster(connection -> connection.async().del(keysToDelete.toArray(new String[0]))) + .toCompletableFuture() + .thenRun(timerContext::close); + } }