From 819d59cd7924c7a022a55e13c75e5836de28d4e2 Mon Sep 17 00:00:00 2001 From: Chris Eager Date: Thu, 24 Jun 2021 18:52:26 -0500 Subject: [PATCH] Update reconciliation crawler to use secondary index --- .../WhisperServerConfiguration.java | 5 ++- .../textsecuregcm/WhisperServerService.java | 2 +- .../DeletedAccountsDynamoDbConfiguration.java | 13 ++++++ .../storage/DeletedAccounts.java | 42 +++++++++---------- .../workers/DeleteUserCommand.java | 2 +- .../storage/DeletedAccountsTest.java | 22 +++++++++- 6 files changed, 58 insertions(+), 28 deletions(-) create mode 100644 service/src/main/java/org/whispersystems/textsecuregcm/configuration/DeletedAccountsDynamoDbConfiguration.java diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerConfiguration.java b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerConfiguration.java index 40819a925..de63cbb94 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerConfiguration.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerConfiguration.java @@ -22,6 +22,7 @@ import org.whispersystems.textsecuregcm.configuration.AwsAttachmentsConfiguratio import org.whispersystems.textsecuregcm.configuration.CdnConfiguration; import org.whispersystems.textsecuregcm.configuration.DatabaseConfiguration; import org.whispersystems.textsecuregcm.configuration.DatadogConfiguration; +import org.whispersystems.textsecuregcm.configuration.DeletedAccountsDynamoDbConfiguration; import org.whispersystems.textsecuregcm.configuration.DirectoryConfiguration; import org.whispersystems.textsecuregcm.configuration.DonationConfiguration; import org.whispersystems.textsecuregcm.configuration.DynamoDbConfiguration; @@ -160,7 +161,7 @@ public class WhisperServerConfiguration extends Configuration { @Valid @NotNull @JsonProperty - private DynamoDbConfiguration deletedAccountsDynamoDb; + private DeletedAccountsDynamoDbConfiguration deletedAccountsDynamoDb; @Valid @NotNull @@ -386,7 +387,7 @@ public class WhisperServerConfiguration extends Configuration { return migrationRetryAccountsDynamoDb; } - public DynamoDbConfiguration getDeletedAccountsDynamoDbConfiguration() { + public DeletedAccountsDynamoDbConfiguration getDeletedAccountsDynamoDbConfiguration() { return deletedAccountsDynamoDb; } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java index 402e38df0..b3f5e3791 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/WhisperServerService.java @@ -355,7 +355,7 @@ public class WhisperServerService extends Application phoneNumbersReconciled) { - writeInBatches(phoneNumbersReconciled, phoneNumbers -> { - final List updates = phoneNumbers.stream() - .map(phoneNumber -> WriteRequest.builder() - .putRequest(PutRequest.builder().item( - Map.of(KEY_ACCOUNT_E164, AttributeValues.fromString(phoneNumber), - ATTR_RECONCILED_IN_CDS, AttributeValues.fromBoolean(true)) - ).build()).build() - ).collect(Collectors.toList()); - - executeTableWriteItemsUntilComplete(Map.of(tableName, updates)); - }); + phoneNumbersReconciled.forEach(number -> db().updateItem( + UpdateItemRequest.builder() + .tableName(tableName) + .key(Map.of( + KEY_ACCOUNT_E164, AttributeValues.fromString(number) + )) + .updateExpression("REMOVE #needs_reconciliation") + .expressionAttributeNames(Map.of( + "#needs_reconciliation", ATTR_NEEDS_CDS_RECONCILIATION + )) + .build() + )); } } diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/workers/DeleteUserCommand.java b/service/src/main/java/org/whispersystems/textsecuregcm/workers/DeleteUserCommand.java index c67c2b051..c31e5b4b5 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/workers/DeleteUserCommand.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/workers/DeleteUserCommand.java @@ -133,7 +133,7 @@ public class DeleteUserCommand extends EnvironmentCommand