-
Notifications
You must be signed in to change notification settings - Fork 0
Troubleshooting
Every message below is one warden actually prints. Find yours and read across.
Nothing is listening there. Either it is not running, or it is running somewhere else.
warden ports --port 7010 # is anything on it at all?
curl localhost:7010/health # is it answering?If your warden listens elsewhere, point the client at it:
warden ls --url http://hub:7010
# or, once
export WARDEN_URL=http://hub:7010Note that warden ports and warden kill never need a server. If those work and
everything else does not, the registry simply is not running.
Something already holds port 7010. Find it and decide:
warden ports --port 7010
warden serve --port 7011 # or move out of its way--pool 8999-8000 the wrong way round, or a WARDEN_POOL_START above
WARDEN_POOL_END.
A node pointing at a hub on another machine while advertising a loopback address. The hub would record an address it can never open, so warden refuses at startup rather than letting it fail silently weeks later.
WARDEN_ADVERTISE=http://build-01:7010 # a name or address the hub can useTwo wardens on the same machine may both use loopback; the check only applies when the hub is elsewhere.
You asked for that exact port with --require-port and another registration has
it. Either take what you are given:
warden register shop-web --kind frontend --preferred-port 8000or free it first, if the holder is finished with it:
warden release shop-apiNothing in the registry holds it, but something on the machine is bound to it. See what:
warden ports --port 8000It is in WARDEN_RESERVED, or it is the registry's own port. Reserved ports are
never handed out, whatever is asked.
The pool is genuinely full. Look for registrations nothing is using any more:
warden ls
warden poolOld entries stay until released, which is what makes ports stick across restarts. Release the dead ones, or widen the pool:
warden serve --pool 8000-9999For things that will not clean up after themselves, register with --ttl so the
entry expires by itself.
They mean opposite things. --preferred-port is a wish, --require-port is a
demand.
The request body did not hold up. Common causes:
- a name with a capital letter or a space — names are lowercase letters, digits,
._and-, starting with a letter or digit - a misspelled field. Unknown fields are rejected rather than ignored, so
prefered_portfails loudly instead of quietly giving you a different port
That socket belongs to another user. The operating system does not hand over another account's process details, which is normal rather than a fault. warden counts them:
3 of 42 belong to another user - run warden as administrator to see them
Run elevated — administrator on Windows, sudo on Linux and macOS — if you need
those rows.
warden asked politely and waited five seconds. Some processes trap that signal.
warden kill 3000 --forceRefused on purpose. Pids 0 to 4 belong to the system, and warden will not end its own process.
Your account may not touch it. Run elevated, or stop it however its owner normally would.
DELETE /v1/listeners/{pid} is off unless you ask for it:
WARDEN_ALLOW_KILL=true warden serveIt is off by default because a warden reachable from the network would otherwise
let anyone holding the token end processes on that machine. warden kill on the
command line is unaffected — it acts locally and never asks the API.
Work down this list on the node:
-
Is
WARDEN_UPSTREAMset?curl localhost:7010/health—rolemust sayedge. If it sayshub, the node does not know it should report to anyone. -
Look at the node's log. It says so on every attempt:
could not reach the warden at http://hub:7010: All connection attempts failed -
Can it reach the hub at all?
curl http://hub:7010/healthfrom the node. -
Do the cluster tokens match? A mismatch shows as a
401in the node's log.WARDEN_CLUSTER_TOKENmust be identical on both, and it is not the same setting asWARDEN_TOKEN. -
Give it a moment. A node reports three times per
WARDEN_NODE_TTL, so up to 30 seconds with the default of 90.
The node is sending the wrong secret, or none. Announcing takes
WARDEN_CLUSTER_TOKEN; the human WARDEN_TOKEN does not work in its place, and
that is deliberate.
Neither token matched. Reading accepts either WARDEN_TOKEN or
WARDEN_CLUSTER_TOKEN; anything that changes something takes WARDEN_TOKEN.
warden nodes --url http://hub:7010 --token "$WARDEN_TOKEN"It has not reported within its lease. Either it is down, or it cannot reach the hub. Its row is deliberately kept rather than deleted — a server that stopped answering is worth seeing. When it is gone for good:
warden nodes --forget build-01Nothing. They keep handing out ports, warn in their logs on each attempt, and report back on their own once it returns. That is the whole point of the arrangement: a node's own work never depends on the network.
warden ls asks one warden. Add --all to ask the whole fleet:
warden ls --all --url http://hub:7010It does not leave it out silently. Look at standard error:
build-01 (http://build-01:7010) could not be reached
The reason says which of these it is:
| Reason | Means |
|---|---|
could not be reached |
Nothing answered at the address the node advertised. Check WARDEN_ADVERTISE on the node — the hub uses that address, not the one you typed |
refused the token - check WARDEN_CLUSTER_TOKEN matches |
The hub's cluster token is not the node's |
did not answer within 3s |
The node is reachable but too slow |
answered 500 |
The node is up but its own registry failed |
The console is running a legacy code page that cannot encode the block character. warden falls back rather than aborting the command over a decoration. To get the blocks on Windows:
chcp 65001
The terminal is under 30 rows tall, so the banner gives way to the table. Make the window taller.
No node has announced itself to this warden. If you expected some, work through the fleet section above.
| System | Path |
|---|---|
| Windows | %LOCALAPPDATA%\warden\registry.db |
| Linux | ~/.local/share/warden/registry.db |
| macOS | ~/Library/Application Support/warden/registry.db |
Override with WARDEN_DATABASE or --database. Two wardens on one machine need
separate files.
Stop warden, delete the database, start it again. Every registration and every known node goes with it; nothing else is affected.
No. A schema change adds what it needs when the database is next opened. A database written by an older warden keeps its registrations.
curl -s localhost:7010/health is the fastest single check — it tells you the
version, the node name, whether this warden reports to another, and how much it
is holding, without a token.
If something looks like a defect, the repository is at https://github.com/vxnsin/warden/issues.
warden — nothing binds a port without asking ·
uv tool install warden-ports
Repository · Issues · Releases · PyPI · MIT
Getting started
While it runs
Several machines
Reference