From 795e74bc5011fafc2b2f94a1d30d53141fcbd372 Mon Sep 17 00:00:00 2001 From: Dorian Date: Tue, 31 Mar 2026 05:11:55 +0100 Subject: [PATCH] fix: retry Tor address discovery in background after startup Backend reads Tor address once at startup. If Tor hasn't started yet, the address is null forever until restart. Now retries at 5, 10, 20, 30, 60 seconds in a background task until Tor is available. Co-Authored-By: Claude Opus 4.6 (1M context) --- core/archipelago/src/server.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/core/archipelago/src/server.rs b/core/archipelago/src/server.rs index 391347f0..9180c90f 100644 --- a/core/archipelago/src/server.rs +++ b/core/archipelago/src/server.rs @@ -61,6 +61,26 @@ impl Server { } state_manager.update_data(data.clone()).await; + // Retry Tor address in background — Tor may not be ready at startup + if data.server_info.tor_address.is_none() { + let sm = state_manager.clone(); + let pubkey = identity.pubkey_hex(); + tokio::spawn(async move { + for delay in [5, 10, 20, 30, 60] { + tokio::time::sleep(std::time::Duration::from_secs(delay)).await; + if let Some(tor) = docker_packages::read_tor_address("archipelago").await { + let (mut d, _) = sm.get_snapshot().await; + let addr = format!("archipelago://{}#{}", tor.trim_end_matches('/'), pubkey); + d.server_info.tor_address = Some(tor.clone()); + d.server_info.node_address = Some(addr); + sm.update_data(d).await; + tracing::info!("Tor address discovered after startup: {}", &tor[..20.min(tor.len())]); + break; + } + } + }); + } + // Load persisted messages (Archipelago channel) node_message::init(&config.data_dir).await;