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) <noreply@anthropic.com>
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user