diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/RepeatedUseSignedPreKeyStore.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/RepeatedUseSignedPreKeyStore.java index f1ec9b961..2e61e2fc7 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/RepeatedUseSignedPreKeyStore.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/RepeatedUseSignedPreKeyStore.java @@ -88,6 +88,10 @@ public abstract class RepeatedUseSignedPreKeyStore> { * @return a future that completes once all keys have been stored */ public CompletableFuture store(final UUID identifier, final Map signedPreKeysByDeviceId) { + if (signedPreKeysByDeviceId.isEmpty()) { + return CompletableFuture.completedFuture(null); + } + final Timer.Sample sample = Timer.start(); return dynamoDbAsyncClient.transactWriteItems(TransactWriteItemsRequest.builder() diff --git a/service/src/test/java/org/whispersystems/textsecuregcm/storage/KeysManagerTest.java b/service/src/test/java/org/whispersystems/textsecuregcm/storage/KeysManagerTest.java index 54d8118ad..da6a5ef04 100644 --- a/service/src/test/java/org/whispersystems/textsecuregcm/storage/KeysManagerTest.java +++ b/service/src/test/java/org/whispersystems/textsecuregcm/storage/KeysManagerTest.java @@ -265,6 +265,9 @@ class KeysManagerTest { "storing new last-resort keys should leave untouched ones alone"); assertEquals(4L, keysManager.getLastResort(ACCOUNT_UUID, deviceId3).join().get().keyId(), "storing new last-resort keys should overwrite old ones"); + + keysManager.storePqLastResort(ACCOUNT_UUID, Map.of()).join(); + assertEquals(3, keysManager.getPqEnabledDevices(ACCOUNT_UUID).join().size(), "storing zero last-resort keys should be a no-op"); } @Test