Make `MessagesManager#clear` asynchronous
This commit is contained in:
parent
2c835b5c51
commit
ccd860207b
|
@ -142,10 +142,10 @@ public class DeviceController {
|
||||||
|
|
||||||
final CompletableFuture<Void> deleteKeysFuture = keys.delete(account.getUuid(), deviceId);
|
final CompletableFuture<Void> 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));
|
account = accounts.update(account, a -> a.removeDevice(deviceId));
|
||||||
// ensure any messages that came in after the first clear() are also removed
|
// 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();
|
deleteKeysFuture.join();
|
||||||
}
|
}
|
||||||
|
@ -419,7 +419,7 @@ public class DeviceController {
|
||||||
keys.delete(a.getUuid(), device.getId()),
|
keys.delete(a.getUuid(), device.getId()),
|
||||||
keys.delete(a.getPhoneNumberIdentifier(), device.getId()));
|
keys.delete(a.getPhoneNumberIdentifier(), device.getId()));
|
||||||
|
|
||||||
messages.clear(a.getUuid(), device.getId());
|
messages.clear(a.getUuid(), device.getId()).join();
|
||||||
|
|
||||||
deleteKeysFuture.join();
|
deleteKeysFuture.join();
|
||||||
|
|
||||||
|
|
|
@ -235,7 +235,7 @@ public class AccountsManager {
|
||||||
keysManager.delete(actualUuid),
|
keysManager.delete(actualUuid),
|
||||||
keysManager.delete(account.getPhoneNumberIdentifier()));
|
keysManager.delete(account.getPhoneNumberIdentifier()));
|
||||||
|
|
||||||
messagesManager.clear(actualUuid);
|
messagesManager.clear(actualUuid).join();
|
||||||
profilesManager.deleteAll(actualUuid);
|
profilesManager.deleteAll(actualUuid);
|
||||||
|
|
||||||
deleteKeysFuture.join();
|
deleteKeysFuture.join();
|
||||||
|
@ -877,12 +877,15 @@ public class AccountsManager {
|
||||||
keysManager.delete(account.getUuid()),
|
keysManager.delete(account.getUuid()),
|
||||||
keysManager.delete(account.getPhoneNumberIdentifier()));
|
keysManager.delete(account.getPhoneNumberIdentifier()));
|
||||||
|
|
||||||
|
final CompletableFuture<Void> deleteMessagesFuture = CompletableFuture.allOf(
|
||||||
|
messagesManager.clear(account.getUuid()),
|
||||||
|
messagesManager.clear(account.getPhoneNumberIdentifier()));
|
||||||
|
|
||||||
profilesManager.deleteAll(account.getUuid());
|
profilesManager.deleteAll(account.getUuid());
|
||||||
messagesManager.clear(account.getUuid());
|
|
||||||
messagesManager.clear(account.getPhoneNumberIdentifier());
|
|
||||||
registrationRecoveryPasswordsManager.removeForNumber(account.getNumber());
|
registrationRecoveryPasswordsManager.removeForNumber(account.getNumber());
|
||||||
|
|
||||||
deleteKeysFuture.join();
|
deleteKeysFuture.join();
|
||||||
|
deleteMessagesFuture.join();
|
||||||
deleteStorageServiceDataFuture.join();
|
deleteStorageServiceDataFuture.join();
|
||||||
deleteBackupServiceDataFuture.join();
|
deleteBackupServiceDataFuture.join();
|
||||||
deleteSecureValueRecoveryServiceDataFuture.join();
|
deleteSecureValueRecoveryServiceDataFuture.join();
|
||||||
|
|
|
@ -102,14 +102,16 @@ public class MessagesManager {
|
||||||
.tap(Micrometer.metrics(Metrics.globalRegistry));
|
.tap(Micrometer.metrics(Metrics.globalRegistry));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clear(UUID destinationUuid) {
|
public CompletableFuture<Void> clear(UUID destinationUuid) {
|
||||||
messagesCache.clear(destinationUuid).join();
|
return CompletableFuture.allOf(
|
||||||
messagesDynamoDb.deleteAllMessagesForAccount(destinationUuid).join();
|
messagesCache.clear(destinationUuid),
|
||||||
|
messagesDynamoDb.deleteAllMessagesForAccount(destinationUuid));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clear(UUID destinationUuid, long deviceId) {
|
public CompletableFuture<Void> clear(UUID destinationUuid, long deviceId) {
|
||||||
messagesCache.clear(destinationUuid, deviceId).join();
|
return CompletableFuture.allOf(
|
||||||
messagesDynamoDb.deleteAllMessagesForDevice(destinationUuid, deviceId).join();
|
messagesCache.clear(destinationUuid, deviceId),
|
||||||
|
messagesDynamoDb.deleteAllMessagesForDevice(destinationUuid, deviceId));
|
||||||
}
|
}
|
||||||
|
|
||||||
public CompletableFuture<Optional<Envelope>> delete(UUID destinationUuid, long destinationDeviceId, UUID guid,
|
public CompletableFuture<Optional<Envelope>> delete(UUID destinationUuid, long destinationDeviceId, UUID guid,
|
||||||
|
|
|
@ -68,7 +68,7 @@ public class UnlinkDeviceCommand extends EnvironmentCommand<WhisperServerConfigu
|
||||||
deps.keysManager().delete(account.getUuid(), deviceId).join();
|
deps.keysManager().delete(account.getUuid(), deviceId).join();
|
||||||
|
|
||||||
System.out.format("Clearing additional messages for %s::%d\n", aci, deviceId);
|
System.out.format("Clearing additional messages for %s::%d\n", aci, deviceId);
|
||||||
deps.messagesManager().clear(account.getUuid(), deviceId);
|
deps.messagesManager().clear(account.getUuid(), deviceId).join();
|
||||||
|
|
||||||
System.out.format("Clearing presence state for %s::%d\n", aci, deviceId);
|
System.out.format("Clearing presence state for %s::%d\n", aci, deviceId);
|
||||||
deps.clientPresenceManager().disconnectPresence(aci, deviceId);
|
deps.clientPresenceManager().disconnectPresence(aci, deviceId);
|
||||||
|
|
|
@ -128,6 +128,8 @@ class DeviceControllerTest {
|
||||||
|
|
||||||
when(keysManager.storePqLastResort(any(), any())).thenReturn(CompletableFuture.completedFuture(null));
|
when(keysManager.storePqLastResort(any(), any())).thenReturn(CompletableFuture.completedFuture(null));
|
||||||
when(keysManager.delete(any(), anyLong())).thenReturn(CompletableFuture.completedFuture(null));
|
when(keysManager.delete(any(), anyLong())).thenReturn(CompletableFuture.completedFuture(null));
|
||||||
|
|
||||||
|
when(messagesManager.clear(any(), anyLong())).thenReturn(CompletableFuture.completedFuture(null));
|
||||||
}
|
}
|
||||||
|
|
||||||
@AfterEach
|
@AfterEach
|
||||||
|
|
|
@ -103,6 +103,9 @@ class AccountsManagerChangeNumberIntegrationTest {
|
||||||
final KeysManager keysManager = mock(KeysManager.class);
|
final KeysManager keysManager = mock(KeysManager.class);
|
||||||
when(keysManager.delete(any())).thenReturn(CompletableFuture.completedFuture(null));
|
when(keysManager.delete(any())).thenReturn(CompletableFuture.completedFuture(null));
|
||||||
|
|
||||||
|
final MessagesManager messagesManager = mock(MessagesManager.class);
|
||||||
|
when(messagesManager.clear(any())).thenReturn(CompletableFuture.completedFuture(null));
|
||||||
|
|
||||||
accountsManager = new AccountsManager(
|
accountsManager = new AccountsManager(
|
||||||
accounts,
|
accounts,
|
||||||
phoneNumberIdentifiers,
|
phoneNumberIdentifiers,
|
||||||
|
@ -110,7 +113,7 @@ class AccountsManagerChangeNumberIntegrationTest {
|
||||||
accountLockManager,
|
accountLockManager,
|
||||||
deletedAccounts,
|
deletedAccounts,
|
||||||
keysManager,
|
keysManager,
|
||||||
mock(MessagesManager.class),
|
messagesManager,
|
||||||
mock(ProfilesManager.class),
|
mock(ProfilesManager.class),
|
||||||
secureStorageClient,
|
secureStorageClient,
|
||||||
secureBackupClient,
|
secureBackupClient,
|
||||||
|
|
|
@ -188,6 +188,7 @@ class AccountsManagerTest {
|
||||||
}).when(accountLockManager).withLock(any(), any());
|
}).when(accountLockManager).withLock(any(), any());
|
||||||
|
|
||||||
when(keysManager.delete(any())).thenReturn(CompletableFuture.completedFuture(null));
|
when(keysManager.delete(any())).thenReturn(CompletableFuture.completedFuture(null));
|
||||||
|
when(messagesManager.clear(any())).thenReturn(CompletableFuture.completedFuture(null));
|
||||||
|
|
||||||
accountsManager = new AccountsManager(
|
accountsManager = new AccountsManager(
|
||||||
accounts,
|
accounts,
|
||||||
|
|
Loading…
Reference in New Issue