From 688d3a22129ee0718860e7ee4e636a51ded2fc1d Mon Sep 17 00:00:00 2001 From: Jon Chambers <63609320+jon-signal@users.noreply.github.com> Date: Fri, 10 Jul 2026 17:29:44 -0400 Subject: [PATCH] Log exceptions when fetching end-of-queue keys --- .../foundationdb/FoundationDbMessageStream.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/service/src/main/java/org/whispersystems/textsecuregcm/storage/foundationdb/FoundationDbMessageStream.java b/service/src/main/java/org/whispersystems/textsecuregcm/storage/foundationdb/FoundationDbMessageStream.java index b9c57d222..fa1c2f8db 100644 --- a/service/src/main/java/org/whispersystems/textsecuregcm/storage/foundationdb/FoundationDbMessageStream.java +++ b/service/src/main/java/org/whispersystems/textsecuregcm/storage/foundationdb/FoundationDbMessageStream.java @@ -18,6 +18,8 @@ import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Flow; import java.util.concurrent.ScheduledExecutorService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.whispersystems.textsecuregcm.entities.MessageProtos; import org.whispersystems.textsecuregcm.identity.AciServiceIdentifier; import org.whispersystems.textsecuregcm.storage.MessageStream; @@ -62,6 +64,8 @@ public class FoundationDbMessageStream implements MessageStream { private static final Comparator STREAM_ENTRY_TIMESTAMP_COMPARATOR = Comparator.comparingLong(streamEntry -> streamEntry.partialEnvelope().getServerTimestamp()); + private static final Logger logger = LoggerFactory.getLogger(FoundationDbMessageStream.class); + FoundationDbMessageStream(final FoundationDbMessageStore foundationDbMessageStore, final AciServiceIdentifier aciServiceIdentifier, final byte deviceId, @@ -240,12 +244,17 @@ public class FoundationDbMessageStream implements MessageStream { private CompletableFuture> getEndOfQueueKeyExclusive(final Database database) { return database.runAsync(transaction -> transaction.getRange(deviceQueueSubspace.range(), 1, true, StreamingMode.EXACT).asList()) - .thenApply(items -> { + .>thenApply(items -> { if (items.isEmpty()) { return Optional.empty(); } assert items.size() == 1; return Optional.of(KeySelector.firstGreaterThan(items.getFirst().getKey())); + }) + .whenComplete((_, throwable) -> { + if (throwable != null) { + logger.warn("Failed to fetch end-of-queue key", throwable); + } }); }