From d47ff9b7c78da8de5e1cc7619aa0bbc185dd6e4a Mon Sep 17 00:00:00 2001 From: Jonathan Klabunde Tomer <125505367+jkt-signal@users.noreply.github.com> Date: Thu, 2 Nov 2023 16:20:19 -0700 Subject: [PATCH] don't make empty transactions --- .../textsecuregcm/storage/RepeatedUseSignedPreKeyStore.java | 4 ++++ .../whispersystems/textsecuregcm/storage/KeysManagerTest.java | 3 +++ 2 files changed, 7 insertions(+) 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