From b754842da2341ebb3df37a7d3ea0b1bc9e8cfc30 Mon Sep 17 00:00:00 2001 From: gmer4lfe Date: Sun, 24 May 2026 18:56:41 -0400 Subject: [PATCH] fix(common): retry Tailscale IP resolution up to 3 times before failing The first cron run of critical_sync_maintenance failed because Tailscale had a transient moment at startup. resolve_remote_ip() now retries 3 times with a 5s delay before giving up, making it resilient to brief daemon hiccups without masking real peer-offline conditions. --- common.sh | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) mode change 100644 => 100755 common.sh diff --git a/common.sh b/common.sh old mode 100644 new mode 100755 index 582d486..86262b7 --- a/common.sh +++ b/common.sh @@ -613,17 +613,23 @@ detect_hosts() { resolve_remote_ip() { log "Resolving remote IP for $REMOTE_SERVER_NAME..." local ts_name="${REMOTE_SERVER_NAME,,}" + local attempts=3 - # Direct lookup — works when MagicDNS short-name resolution is active - REMOTE_SERVER=$(tailscale ip -4 "$ts_name" 2>/dev/null) + for ((i=1; i<=attempts; i++)); do + # Direct lookup — works when MagicDNS short-name resolution is active + REMOTE_SERVER=$(tailscale ip -4 "$ts_name" 2>/dev/null) - # Fallback — parse tailscale status for FQDN entries (e.g. hostname.tailXXXX.ts.net) - if [[ -z "$REMOTE_SERVER" ]]; then - REMOTE_SERVER=$(tailscale status 2>/dev/null | awk -v name="$ts_name" '$2 ~ "^" name { print $1; exit }') - fi + # Fallback — parse tailscale status for FQDN entries (e.g. hostname.tailXXXX.ts.net) + if [[ -z "$REMOTE_SERVER" ]]; then + REMOTE_SERVER=$(tailscale status 2>/dev/null | awk -v name="$ts_name" '$2 ~ "^" name { print $1; exit }') + fi + + [[ -n "$REMOTE_SERVER" ]] && break + [[ $i -lt $attempts ]] && { warn "Tailscale resolution attempt $i/$attempts failed — retrying in 5s..."; sleep 5; } + done if [[ -z "$REMOTE_SERVER" ]]; then - error "Failed to resolve Tailscale IP for $REMOTE_SERVER_NAME" + error "Failed to resolve Tailscale IP for $REMOTE_SERVER_NAME after $attempts attempts" error "Check: tailscale status | grep $ts_name" exit 1 fi