towerops/lib
Graham McIntire 8ff0c44e7b
Add Redis health checks and improved error handling for Exq
Fixes crashes in Exq.Node.Server when Redis connections fail by adding
health checks before startup and wrapping Exq in a custom supervisor
with better resilience.

Problem:
- Valkey pod restarting frequently (24 times in 28h) due to K8s Flannel CNI issues
- When Redis disconnects, Exq.Node.Server crashes trying to process_signals/2
- Gets nil from Redis instead of expected list, crashes on Enum.each/2
- Rapid crash/restart cycles reduce application stability

Changes:

1. RedisHealthCheck module (lib/towerops/redis_health_check.ex)
   - Waits for Redis availability with exponential backoff before starting Exq
   - Prevents Exq from starting when Redis is unavailable
   - Handles connection errors gracefully without crashing caller processes
   - Supports configurable retry attempts, timeouts, and backoff intervals

2. ExqSupervisor module (lib/towerops/exq_supervisor.ex)
   - Custom supervisor that wraps Exq with health checks
   - Uses one_for_one strategy with limited restarts (3 per 60s)
   - Prevents rapid crash loops when Redis is unstable
   - Increased Exq retry/backoff settings for better Redis recovery
   - Allows application to continue functioning without background jobs if Redis unavailable

3. Updated Application.ex
   - Replaced direct Exq start with ExqSupervisor
   - Removed inline exq_config/0 function (moved to supervisor)

4. Tests
   - Comprehensive tests for RedisHealthCheck (health checks, retries, timeouts)
   - Tests for ExqSupervisor (configuration, restart strategy)
   - All 1006 tests passing

Benefits:
- Prevents Exq crashes from propagating when Redis fails
- Application continues running even when Redis is temporarily unavailable
- Better logging of Redis connection issues
- More graceful degradation during infrastructure problems

Infrastructure Issue (to be addressed separately):
- K8s Flannel CNI plugin failing: /run/flannel/subnet.env not found
- Causing Valkey pod network issues and restarts
- Needs investigation of Flannel daemonset and node configuration

🤖 Generated with Claude Code
2026-01-19 15:38:19 -06:00
..
mix/tasks Include MIB files in Docker image instead of using PVC 2026-01-19 14:01:03 -06:00
towerops Add Redis health checks and improved error handling for Exq 2026-01-19 15:38:19 -06:00
towerops_web updated agent code 2026-01-19 14:10:54 -06:00
towerops.ex init 2025-12-21 11:10:43 -06:00
towerops_web.ex separate out marketing layouts 2026-01-06 14:46:39 -06:00