Remove the "send message" timeout

This commit is contained in:
Jon Chambers
2025-08-04 09:58:56 -04:00
committed by GitHub
parent f6a87b2ec0
commit 8d3781db90
3 changed files with 15 additions and 186 deletions

View File

@@ -102,8 +102,6 @@ public class WebSocketConnection implements MessageAvailabilityListener, Disconn
@VisibleForTesting
static final int MESSAGE_SENDER_MAX_CONCURRENCY = 256;
static final Duration DEFAULT_SEND_FUTURES_TIMEOUT = Duration.ofMinutes(5);
private static final Duration CLOSE_WITH_PENDING_MESSAGES_NOTIFICATION_DELAY = Duration.ofMinutes(1);
private static final Logger logger = LoggerFactory.getLogger(WebSocketConnection.class);
@@ -120,8 +118,6 @@ public class WebSocketConnection implements MessageAvailabilityListener, Disconn
private final Device authenticatedDevice;
private final WebSocketClient client;
private final Duration sendFuturesTimeout;
private final Semaphore processStoredMessagesSemaphore = new Semaphore(1);
private final AtomicReference<StoredMessageState> storedMessageState = new AtomicReference<>(
StoredMessageState.PERSISTED_NEW_MESSAGES_AVAILABLE);
@@ -140,47 +136,18 @@ public class WebSocketConnection implements MessageAvailabilityListener, Disconn
PERSISTED_NEW_MESSAGES_AVAILABLE
}
public WebSocketConnection(ReceiptSender receiptSender,
MessagesManager messagesManager,
MessageMetrics messageMetrics,
PushNotificationManager pushNotificationManager,
PushNotificationScheduler pushNotificationScheduler,
Account authenticatedAccount,
Device authenticatedDevice,
WebSocketClient client,
Scheduler messageDeliveryScheduler,
ClientReleaseManager clientReleaseManager,
MessageDeliveryLoopMonitor messageDeliveryLoopMonitor,
ExperimentEnrollmentManager experimentEnrollmentManager) {
this(receiptSender,
messagesManager,
messageMetrics,
pushNotificationManager,
pushNotificationScheduler,
authenticatedAccount,
authenticatedDevice,
client,
DEFAULT_SEND_FUTURES_TIMEOUT,
messageDeliveryScheduler,
clientReleaseManager,
messageDeliveryLoopMonitor, experimentEnrollmentManager);
}
@VisibleForTesting
WebSocketConnection(ReceiptSender receiptSender,
MessagesManager messagesManager,
MessageMetrics messageMetrics,
PushNotificationManager pushNotificationManager,
PushNotificationScheduler pushNotificationScheduler,
Account authenticatedAccount,
Device authenticatedDevice,
WebSocketClient client,
Duration sendFuturesTimeout,
Scheduler messageDeliveryScheduler,
ClientReleaseManager clientReleaseManager,
MessageDeliveryLoopMonitor messageDeliveryLoopMonitor,
ExperimentEnrollmentManager experimentEnrollmentManager) {
public WebSocketConnection(final ReceiptSender receiptSender,
final MessagesManager messagesManager,
final MessageMetrics messageMetrics,
final PushNotificationManager pushNotificationManager,
final PushNotificationScheduler pushNotificationScheduler,
final Account authenticatedAccount,
final Device authenticatedDevice,
final WebSocketClient client,
final Scheduler messageDeliveryScheduler,
final ClientReleaseManager clientReleaseManager,
final MessageDeliveryLoopMonitor messageDeliveryLoopMonitor,
final ExperimentEnrollmentManager experimentEnrollmentManager) {
this.receiptSender = receiptSender;
this.messagesManager = messagesManager;
@@ -190,7 +157,6 @@ public class WebSocketConnection implements MessageAvailabilityListener, Disconn
this.authenticatedAccount = authenticatedAccount;
this.authenticatedDevice = authenticatedDevice;
this.client = client;
this.sendFuturesTimeout = sendFuturesTimeout;
this.messageDeliveryScheduler = messageDeliveryScheduler;
this.clientReleaseManager = clientReleaseManager;
this.messageDeliveryLoopMonitor = messageDeliveryLoopMonitor;
@@ -384,10 +350,7 @@ public class WebSocketConnection implements MessageAvailabilityListener, Disconn
"websocket");
}
})
.flatMapSequential(envelope ->
Mono.fromFuture(() -> sendMessage(envelope)).timeout(sendFuturesTimeout)
// Note that this will retry both for "send to client" timeouts and failures to delete messages on
// acknowledgement
.flatMapSequential(envelope -> Mono.fromFuture(() -> sendMessage(envelope))
.retryWhen(Retry.backoff(4, Duration.ofSeconds(1)).filter(throwable -> !isConnectionClosedException(throwable))),
MESSAGE_SENDER_MAX_CONCURRENCY)
.doOnError(this::measureSendMessageErrors)