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.
This commit is contained in:
@@ -613,7 +613,9 @@ detect_hosts() {
|
|||||||
resolve_remote_ip() {
|
resolve_remote_ip() {
|
||||||
log "Resolving remote IP for $REMOTE_SERVER_NAME..."
|
log "Resolving remote IP for $REMOTE_SERVER_NAME..."
|
||||||
local ts_name="${REMOTE_SERVER_NAME,,}"
|
local ts_name="${REMOTE_SERVER_NAME,,}"
|
||||||
|
local attempts=3
|
||||||
|
|
||||||
|
for ((i=1; i<=attempts; i++)); do
|
||||||
# Direct lookup — works when MagicDNS short-name resolution is active
|
# Direct lookup — works when MagicDNS short-name resolution is active
|
||||||
REMOTE_SERVER=$(tailscale ip -4 "$ts_name" 2>/dev/null)
|
REMOTE_SERVER=$(tailscale ip -4 "$ts_name" 2>/dev/null)
|
||||||
|
|
||||||
@@ -622,8 +624,12 @@ resolve_remote_ip() {
|
|||||||
REMOTE_SERVER=$(tailscale status 2>/dev/null | awk -v name="$ts_name" '$2 ~ "^" name { print $1; exit }')
|
REMOTE_SERVER=$(tailscale status 2>/dev/null | awk -v name="$ts_name" '$2 ~ "^" name { print $1; exit }')
|
||||||
fi
|
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
|
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"
|
error "Check: tailscale status | grep $ts_name"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user