From e62e2abd32c35c704a7eacfbb27b04a7625653ac Mon Sep 17 00:00:00 2001 From: Awiteb Date: Fri, 21 Aug 2026 20:59:50 +0000 Subject: [PATCH] sdk(local_relay): add LocalRelay::connections_left Returns the number of remaining connections the relay can handle. Useful for relays that use `LocalRelay::take_connection` with an already upgraded connection, avoiding CPU waste on connections that would be rejected due to capacity limits. Refs https://github.com/nostrdevkit/nostr/pull/1458 Pull-Request: https://github.com/nostrdevkit/nostr/pull/1459 Signed-off-by: Awiteb --- nostr-sdk/CHANGELOG.md | 4 ++++ nostr-sdk/src/local_relay/local/inner.rs | 2 +- nostr-sdk/src/local_relay/local/mod.rs | 6 ++++++ 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/nostr-sdk/CHANGELOG.md b/nostr-sdk/CHANGELOG.md index 822d77b4f..9d8e05bcd 100644 --- a/nostr-sdk/CHANGELOG.md +++ b/nostr-sdk/CHANGELOG.md @@ -29,6 +29,10 @@ ## Unreleased +### Added + +- Add `LocalRelay::connections_left` (https://github.com/nostrdevkit/nostr/pull/1459) + ### Deprecated - Deprecate `LocalRelayBuilder::max_query_results` and `LocalRelayBuilder::default_filter_limit` (https://github.com/nostrdevkit/nostr/pull/1461) diff --git a/nostr-sdk/src/local_relay/local/inner.rs b/nostr-sdk/src/local_relay/local/inner.rs index 51b0d5102..e407e4e2d 100644 --- a/nostr-sdk/src/local_relay/local/inner.rs +++ b/nostr-sdk/src/local_relay/local/inner.rs @@ -59,7 +59,7 @@ pub(super) struct InnerLocalRelay { auth_events_per_minute: u32, messages_per_minute: u32, pending_handshakes_limit: Arc, - connections_limit: Arc, + pub(crate) connections_limit: Arc, max_websocket_message_size: usize, max_event_size: usize, websocket_handshake_timeout: Duration, diff --git a/nostr-sdk/src/local_relay/local/mod.rs b/nostr-sdk/src/local_relay/local/mod.rs index 525d4acea..74f99e8b4 100644 --- a/nostr-sdk/src/local_relay/local/mod.rs +++ b/nostr-sdk/src/local_relay/local/mod.rs @@ -95,6 +95,12 @@ impl LocalRelay { self.inner.url().await } + /// Returns the remaining connection capacity before the limit is reached. + #[inline] + pub fn connections_left(&self) -> usize { + self.inner.connections_limit.available_permits() + } + /// Sync events with other relay(s). #[inline] pub async fn sync_with<'a, I, U>(