From 5cb53ade6610dcf1265ad65ec7491eb4a02ca116 Mon Sep 17 00:00:00 2001 From: archipelago Date: Thu, 16 Jul 2026 10:06:03 -0400 Subject: [PATCH] fix(health): stop raw-probing ports of containers with own healthchecks MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The health monitor opened a bare TCP connection to every published host port each cycle. Against TLS listeners that connect+close logs noise on the app side — LND printed 'http: TLS handshake error … EOF' endlessly. Containers that define a podman healthcheck (LND uses lncli getinfo) now rely on it alone; bare containers keep the port probe. Co-Authored-By: Claude Fable 5 --- core/archipelago/src/health_monitor.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/core/archipelago/src/health_monitor.rs b/core/archipelago/src/health_monitor.rs index 613db8e4..fbcdc2cd 100644 --- a/core/archipelago/src/health_monitor.rs +++ b/core/archipelago/src/health_monitor.rs @@ -475,7 +475,12 @@ async fn check_containers() -> Vec { let podman_health = parse_podman_health(c, &state); let host_ports = host_tcp_ports_from_container(c); - let host_port_ready = if host_ports.is_empty() { + // Only raw-probe published ports for containers WITHOUT their own + // podman healthcheck. The healthcheck is the better signal, and the + // bare TCP connect+close is noisy against TLS listeners — LND logged + // "http: TLS handshake error … EOF" on every monitor cycle because + // this probe hit its REST/gRPC ports and hung up mid-handshake. + let host_port_ready = if host_ports.is_empty() || podman_health.is_some() { None } else { Some(host_ports_ready(&host_ports).await)