diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/DeviceController.java b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/DeviceController.java index c907f2783..c8df221ce 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/controllers/DeviceController.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/controllers/DeviceController.java @@ -142,10 +142,10 @@ public class DeviceController { final CompletableFuture deleteKeysFuture = keys.delete(account.getUuid(), deviceId); - messages.clear(account.getUuid(), deviceId); + messages.clear(account.getUuid(), deviceId).join(); account = accounts.update(account, a -> a.removeDevice(deviceId)); // ensure any messages that came in after the first clear() are also removed - messages.clear(account.getUuid(), deviceId); + messages.clear(account.getUuid(), deviceId).join(); deleteKeysFuture.join(); } @@ -419,7 +419,7 @@ public class DeviceController { keys.delete(a.getUuid(), device.getId()), keys.delete(a.getPhoneNumberIdentifier(), device.getId())); - messages.clear(a.getUuid(), device.getId()); + messages.clear(a.getUuid(), device.getId()).join(); deleteKeysFuture.join(); 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 267154c04..510a15501 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/AccountsManager.java @@ -235,7 +235,7 @@ public class AccountsManager { keysManager.delete(actualUuid), keysManager.delete(account.getPhoneNumberIdentifier())); - messagesManager.clear(actualUuid); + messagesManager.clear(actualUuid).join(); profilesManager.deleteAll(actualUuid); deleteKeysFuture.join(); @@ -877,12 +877,15 @@ public class AccountsManager { keysManager.delete(account.getUuid()), keysManager.delete(account.getPhoneNumberIdentifier())); + final CompletableFuture deleteMessagesFuture = CompletableFuture.allOf( + messagesManager.clear(account.getUuid()), + messagesManager.clear(account.getPhoneNumberIdentifier())); + profilesManager.deleteAll(account.getUuid()); - messagesManager.clear(account.getUuid()); - messagesManager.clear(account.getPhoneNumberIdentifier()); registrationRecoveryPasswordsManager.removeForNumber(account.getNumber()); deleteKeysFuture.join(); + deleteMessagesFuture.join(); deleteStorageServiceDataFuture.join(); deleteBackupServiceDataFuture.join(); deleteSecureValueRecoveryServiceDataFuture.join(); diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagesManager.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagesManager.java index 94c37dc8f..27b13b868 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagesManager.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/MessagesManager.java @@ -102,14 +102,16 @@ public class MessagesManager { .tap(Micrometer.metrics(Metrics.globalRegistry)); } - public void clear(UUID destinationUuid) { - messagesCache.clear(destinationUuid).join(); - messagesDynamoDb.deleteAllMessagesForAccount(destinationUuid).join(); + public CompletableFuture clear(UUID destinationUuid) { + return CompletableFuture.allOf( + messagesCache.clear(destinationUuid), + messagesDynamoDb.deleteAllMessagesForAccount(destinationUuid)); } - public void clear(UUID destinationUuid, long deviceId) { - messagesCache.clear(destinationUuid, deviceId).join(); - messagesDynamoDb.deleteAllMessagesForDevice(destinationUuid, deviceId).join(); + public CompletableFuture clear(UUID destinationUuid, long deviceId) { + return CompletableFuture.allOf( + messagesCache.clear(destinationUuid, deviceId), + messagesDynamoDb.deleteAllMessagesForDevice(destinationUuid, deviceId)); } public CompletableFuture> delete(UUID destinationUuid, long destinationDeviceId, UUID guid, diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/workers/UnlinkDeviceCommand.java b/service/src/main/java/org/whispersystems/textsecuregcm/workers/UnlinkDeviceCommand.java index f47d80e24..288df0905 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/workers/UnlinkDeviceCommand.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/workers/UnlinkDeviceCommand.java @@ -68,7 +68,7 @@ public class UnlinkDeviceCommand extends EnvironmentCommand