From 2e28fb97a44ce71762f86b41f6879552dde06709 Mon Sep 17 00:00:00 2001 From: Chris Eager Date: Thu, 12 Aug 2021 16:47:51 -0500 Subject: [PATCH] Delete DynamoDB accounts with invalid UUIDs in AccountsManager#create --- .../textsecuregcm/storage/AccountsDynamoDb.java | 8 +++++--- .../textsecuregcm/storage/AccountsManager.java | 5 +++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsDynamoDb.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsDynamoDb.java index 83a89bf2f..ade666b1a 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsDynamoDb.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsDynamoDb.java @@ -260,9 +260,11 @@ public class AccountsDynamoDb extends AbstractDynamoDbStore implements AccountSt @Override public void delete(UUID uuid) { - DELETE_TIMER.record(() -> { - delete(uuid, true); - }); + DELETE_TIMER.record(() -> delete(uuid, true)); + } + + public void deleteInvalidMigration(UUID uuid) { + DELETE_TIMER.record(() -> delete(uuid, false)); } public AccountCrawlChunk getAllFrom(final UUID from, final int maxCount, final int pageSize) { 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 8062a607f..dc56282da 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java @@ -185,7 +185,12 @@ public class AccountsManager { (databaseResult, dynamoResult) -> { if (!account.getUuid().equals(actualUuid)) { + // This is expected towards the beginning of the background migration, as Dynamo won’t + // have many accounts available for re-registration logger.warn("dynamoCreate() did not return correct UUID"); + accountsDynamoDb.deleteInvalidMigration(account.getUuid()); + return Optional.of("dynamoIncorrectUUID"); + } if (databaseResult.equals(dynamoResult)) {