diff --git a/reload_dshackle.sh b/reload_dshackle.sh index 217bdd36..eeb4d8ec 100755 --- a/reload_dshackle.sh +++ b/reload_dshackle.sh @@ -51,7 +51,14 @@ for CID in $(docker ps -q -f "name=dshackle"); do elif echo "$LOGS" | grep -qF "$DROP_MARK"; then REASON="concurrent HUP dropped (reload skipped)" fi - [ -z "$REASON" ] && continue # SIGHUP applied the config — done + [ -z "$REASON" ] && { + # Drop established gateway gRPC connections to force dRPC edge to reconnect + # and re-read the advertised chain/method list. Gateways only re-initialize + # advertisements on reconnection. Best-effort: failure does NOT fail the script. + PID=$(docker inspect -f '{{.State.Pid}}' "$CID" 2>/dev/null) && \ + nsenter -t "$PID" -n ss -K state established '( sport = :2449 )' >/dev/null 2>&1 + continue + } echo "reload_dshackle: $NAME reload did NOT apply ($REASON) — restarting to load config fresh" >&2 if ! docker restart "$CID" >/dev/null 2>&1; then echo "reload_dshackle: ERROR: restart failed for $NAME — config NOT applied, manual intervention" >&2