From f5b83c28c63fa1e9a5ff5e82782967e6bb9cfa96 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 27 May 2026 17:29:28 +0530 Subject: Fix discovery: use fetch_events_from with index_relays only The nostr-sdk pool fetch_events returns empty when most relays are dead. Target only the known-working index relays for discovery queries. --- src/discovery.rs | 13 +++++-------- src/main.rs | 8 +++++++- 2 files changed, 12 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/discovery.rs b/src/discovery.rs index 430509d..fa2a198 100644 --- a/src/discovery.rs +++ b/src/discovery.rs @@ -17,16 +17,13 @@ pub struct DiscoveredRepo { pub async fn discover_repos_from_relays( client: &nostr_sdk::Client, npubs: &[PublicKey], - relay_urls: &[String], + index_relays: &[String], + all_relay_urls: &[String], ) -> Result> { - for url in relay_urls { - if let Err(e) = client.add_relay(url).await { - tracing::warn!(relay = %url, error = %e, "failed to add relay"); - continue; - } + for url in all_relay_urls { + let _ = client.add_relay(url).await; } client.connect().await; - client .wait_for_connection(std::time::Duration::from_secs(5)) .await; @@ -40,7 +37,7 @@ pub async fn discover_repos_from_relays( .limit(50); let events = client - .fetch_events(filter, std::time::Duration::from_secs(30)) + .fetch_events_from(index_relays, filter, std::time::Duration::from_secs(30)) .await .context("failed to fetch events from relays")?; diff --git a/src/main.rs b/src/main.rs index c7fa23a..d28fbe2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -142,6 +142,7 @@ async fn run_daemon(config: config::ResolvedConfig, db: db::MirrorDb) -> Result< let healthy = Arc::new(healthy); let relay_urls = config.relay_urls(); + let index_relays = config.discovery.index_relays.clone(); let nostr_client = build_nostr_client(&relay_urls); nostr_client.connect().await; @@ -149,6 +150,7 @@ async fn run_daemon(config: config::ResolvedConfig, db: db::MirrorDb) -> Result< let nostr_mirror = nostr_mirror::NostrMirror::new(nostr_client.clone()); let nip46_client_ref: Option> = nip46_client.clone(); + let index_relays_ref = Arc::new(index_relays); let mut interval = tokio::time::interval(std::time::Duration::from_secs( config.discovery.poll_interval_secs, @@ -168,6 +170,7 @@ async fn run_daemon(config: config::ResolvedConfig, db: db::MirrorDb) -> Result< &config, &db, &nostr_client, + &index_relays_ref, &mirror, &nostr_mirror, &healthy, @@ -197,6 +200,7 @@ async fn mirror_cycle( config: &Arc, db: &Arc, nostr_client: &nostr_sdk::Client, + index_relays: &Arc>, mirror: &git_mirror::GitMirror, nostr_mirror: &nostr_mirror::NostrMirror, servers: &Arc>, @@ -205,7 +209,7 @@ async fn mirror_cycle( tracing::info!("starting mirror cycle"); let relay_urls = config.relay_urls(); - let repos = discovery::discover_repos_from_relays(nostr_client, &config.npubs, &relay_urls) + let repos = discovery::discover_repos_from_relays(nostr_client, &config.npubs, index_relays, &relay_urls) .await?; tracing::info!(count = repos.len(), "discovered repos"); @@ -337,6 +341,7 @@ async fn run_mirror_once(config: config::ResolvedConfig, db: db::MirrorDb) -> Re .collect(); let relay_urls = config.relay_urls(); + let index_relays = Arc::new(config.discovery.index_relays.clone()); let nostr_client = build_nostr_client(&relay_urls); nostr_client.connect().await; @@ -348,6 +353,7 @@ async fn run_mirror_once(config: config::ResolvedConfig, db: db::MirrorDb) -> Re &config, &db, &nostr_client, + &index_relays, &mirror, &nostr_mirror, &healthy, -- cgit v1.2.3