From 3c9e4ba6e779de9df03af3eadfe45c119bb85bbc Mon Sep 17 00:00:00 2001 From: "Rodrigo Rodriguez (Pragmatismo)" Date: Wed, 1 Apr 2026 20:06:13 -0300 Subject: [PATCH] fix: cache_health_check uses ss instead of nc (nc missing in prod container) - Root cause: prod container lacks nc (netcat), causing fallback to valkey-cli ping - valkey-cli ping hangs indefinitely when Valkey requires password auth - Fix: use ss -tlnp as primary check (always available), nc as fallback - Testing: verified ss is available in prod, nc is not --- src/core/bootstrap/bootstrap_utils.rs | 35 ++++++++++++--------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/src/core/bootstrap/bootstrap_utils.rs b/src/core/bootstrap/bootstrap_utils.rs index 8e90977f..3b4f4f94 100644 --- a/src/core/bootstrap/bootstrap_utils.rs +++ b/src/core/bootstrap/bootstrap_utils.rs @@ -119,34 +119,29 @@ pub fn vault_health_check() -> bool { /// Check if Valkey/Redis cache is healthy pub fn cache_health_check() -> bool { - match SafeCommand::new("nc") - .and_then(|c| c.args(&["-z", "-w", "1", "127.0.0.1", "6379"])) - .and_then(|c| c.execute()) - { - Ok(output) => { - if output.status.success() { - return true; - } - } - Err(_) => {} - } - - let stack_path = - std::env::var("BOTSERVER_STACK_PATH").unwrap_or_else(|_| "./botserver-stack".to_string()); - let valkey_cli = format!("{}/bin/cache/bin/valkey-cli", stack_path); - - if let Ok(output) = SafeCommand::new(&valkey_cli) - .and_then(|c| c.args(&["-h", "127.0.0.1", "-p", "6379", "ping"])) + // Primary: use ss to check if port 6379 is listening + if let Ok(output) = SafeCommand::new("ss") + .and_then(|c| c.args(&["-tlnp"])) .and_then(|c| c.execute()) { if output.status.success() { - let response = String::from_utf8_lossy(&output.stdout); - if response.trim().to_uppercase() == "PONG" { + let stdout = String::from_utf8_lossy(&output.stdout); + if stdout.contains(":6379") { return true; } } } + // Fallback: nc if available + if let Ok(output) = SafeCommand::new("nc") + .and_then(|c| c.args(&["-z", "-w", "1", "127.0.0.1", "6379"])) + .and_then(|c| c.execute()) + { + if output.status.success() { + return true; + } + } + false }