Make key deletion operations asynchronous

This commit is contained in:
Jon Chambers
2023-06-26 11:48:21 -04:00
committed by Jon Chambers
parent f709b00be3
commit a0d6146ff5
8 changed files with 49 additions and 23 deletions

View File

@@ -111,11 +111,14 @@ public class DeviceController {
throw new WebApplicationException(Response.Status.UNAUTHORIZED);
}
final CompletableFuture<Void> deleteKeysFuture = keys.delete(account.getUuid(), deviceId);
messages.clear(account.getUuid(), deviceId);
account = accounts.update(account, a -> a.removeDevice(deviceId));
keys.delete(account.getUuid(), deviceId);
// ensure any messages that came in after the first clear() are also removed
messages.clear(account.getUuid(), deviceId);
deleteKeysFuture.join();
}
@Timed
@@ -336,10 +339,13 @@ public class DeviceController {
final Account updatedAccount = accounts.update(account, a -> {
device.setId(a.getNextDeviceId());
final CompletableFuture<Void> deleteKeysFuture = CompletableFuture.allOf(
keys.delete(a.getUuid(), device.getId()),
keys.delete(a.getPhoneNumberIdentifier(), device.getId()));
messages.clear(a.getUuid(), device.getId());
keys.delete(a.getUuid(), device.getId());
keys.delete(a.getPhoneNumberIdentifier(), device.getId());
deleteKeysFuture.join();
maybeDeviceActivationRequest.ifPresent(deviceActivationRequest -> CompletableFuture.allOf(
keys.storeEcSignedPreKeys(a.getUuid(),