From 63da2e5b71449ff2cfa284b848e8f1f7a18f8864 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 18 Jun 2026 14:31:07 +0000 Subject: [PATCH] debug(relay): log per-assembler relay count on invalidation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit After fixing the stale connected-count, the background footprint settles at ~25 relays (desired=22) — higher than the inbox+DM target. Add a per-EoseManager log (assembler name -> key count + distinct relay count) so we can attribute the 25 to specific always-on loaders (metadata/drafts on homeRelays, gift-wrap history, marmot groups, notifications) and trim precisely instead of guessing. Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_01Ukw6FJPFh3JKGXL532p3ae --- .../commons/relayClient/eoseManagers/BaseEoseManager.kt | 2 ++ .../relay/client/subscriptions/SubscriptionController.kt | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/relayClient/eoseManagers/BaseEoseManager.kt b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/relayClient/eoseManagers/BaseEoseManager.kt index a16d3734e7..54ed7e8d98 100644 --- a/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/relayClient/eoseManagers/BaseEoseManager.kt +++ b/commons/src/commonMain/kotlin/com/vitorpamplona/amethyst/commons/relayClient/eoseManagers/BaseEoseManager.kt @@ -22,6 +22,7 @@ package com.vitorpamplona.amethyst.commons.relayClient.eoseManagers import com.vitorpamplona.amethyst.commons.service.BundledUpdate import com.vitorpamplona.quartz.nip01Core.relay.client.INostrClient +import com.vitorpamplona.quartz.utils.Log import com.vitorpamplona.quartz.nip01Core.relay.client.reqs.SubscriptionListener import com.vitorpamplona.quartz.nip01Core.relay.client.single.newSubId import com.vitorpamplona.quartz.nip01Core.relay.client.subscriptions.SubscriptionController @@ -53,6 +54,7 @@ abstract class BaseEoseManager( fun forceInvalidate() { updateSubscriptions(allKeys()) orchestrator.updateRelays() + Log.d("BgRelayTrace") { "${this::class.simpleName} — keys=${allKeys().size}, relays=${orchestrator.activeRelays().size}" } } override fun destroy() { diff --git a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/subscriptions/SubscriptionController.kt b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/subscriptions/SubscriptionController.kt index 6e0f4883e4..1ad2f3fac9 100644 --- a/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/subscriptions/SubscriptionController.kt +++ b/quartz/src/commonMain/kotlin/com/vitorpamplona/quartz/nip01Core/relay/client/subscriptions/SubscriptionController.kt @@ -51,6 +51,13 @@ class SubscriptionController( fun getSub(subId: String) = subscriptions.get(subId) + /** Distinct relays across all active subscriptions managed by this controller. */ + fun activeRelays(): Set { + val relays = mutableSetOf() + subscriptions.forEach { _, sub -> sub.filters()?.keys?.let { relays.addAll(it) } } + return relays + } + fun requestNewSubscription( subId: String, listener: SubscriptionListener,