From 667287c09b20e4f7b7f5d328d36e9567de780224 Mon Sep 17 00:00:00 2001 From: clockwork-labs-bot Date: Mon, 15 Jun 2026 15:35:02 -0400 Subject: [PATCH] Track outgoing queue disconnects --- crates/core/src/client/client_connection.rs | 8 ++++++++ crates/core/src/worker_metrics/mod.rs | 5 +++++ 2 files changed, 13 insertions(+) diff --git a/crates/core/src/client/client_connection.rs b/crates/core/src/client/client_connection.rs index 8f19156d6bb..85c7d97a620 100644 --- a/crates/core/src/client/client_connection.rs +++ b/crates/core/src/client/client_connection.rs @@ -313,6 +313,7 @@ pub struct ClientConnectionSender { pub struct ClientConnectionMetrics { pub websocket_request_msg_size: Histogram, pub websocket_requests: IntCounter, + pub outgoing_queue_disconnects: IntCounter, /// The `total_outgoing_queue_length` metric labeled with this database's `Identity`, /// which we'll increment whenever sending a message. @@ -333,6 +334,9 @@ impl ClientConnectionMetrics { let websocket_requests = WORKER_METRICS .websocket_requests .with_label_values(&database_identity, message_kind); + let outgoing_queue_disconnects = WORKER_METRICS + .client_outgoing_queue_disconnects + .with_label_values(&database_identity); let sendtx_queue_size = WORKER_METRICS .total_outgoing_queue_length .with_label_values(&database_identity); @@ -340,6 +344,7 @@ impl ClientConnectionMetrics { Self { websocket_request_msg_size, websocket_requests, + outgoing_queue_disconnects, sendtx_queue_size, } } @@ -442,6 +447,9 @@ impl ClientConnectionSender { self.id, self.sendtx.capacity(), ); + if let Some(metrics) = &self.metrics { + metrics.outgoing_queue_disconnects.inc(); + } self.abort_handle.abort(); self.cancelled.store(true, Ordering::Relaxed); return Err(ClientSendError::Cancelled); diff --git a/crates/core/src/worker_metrics/mod.rs b/crates/core/src/worker_metrics/mod.rs index 690afdd8c94..b485af4e2aa 100644 --- a/crates/core/src/worker_metrics/mod.rs +++ b/crates/core/src/worker_metrics/mod.rs @@ -375,6 +375,11 @@ metrics_group!( #[labels(db: Identity)] pub total_outgoing_queue_length: IntGaugeVec, + #[name = spacetime_client_outgoing_queue_disconnects_total] + #[help = "The number of clients disconnected because their outgoing WebSocket message queue filled up"] + #[labels(db: Identity)] + pub client_outgoing_queue_disconnects: IntCounterVec, + #[name = spacetime_replay_total_time_seconds] #[help = "Total time spent replaying a database upon restart, including snapshot read, snapshot restore and commitlog replay"] #[labels(db: Identity)]