Documentation Index
Fetch the complete documentation index at: https://mintlify.com/denoland/celld/llms.txt
Use this file to discover all available pages before exploring further.
celld diagnose reads the node leases from the fleet bucket and sends a signed direct probe to each live peer. It does not acquire a lease, does not take ownership of any cell, and does not change state — it is a read-only inspection tool.
Running diagnose
Pointcelld diagnose at your bucket using the same credential variables you use to start nodes:
--peer NODE_ID one or more times:
What it reports
For each node lease found in the bucket,celld diagnose attempts a direct probe and reports:
- Expired records — node leases whose TTL has passed and that no live node has renewed
- Malformed or unsafe advertised addresses — addresses that are structurally invalid or that contain a literal public IP without
CELLD_UNSAFE_PUBLIC_ADVERTISE=1 - Unreachable peers — nodes whose advertised address did not respond within the probe deadline
- Authentication failures — probes that reached a node but failed HMAC verification, indicating a mismatched peer-auth secret or a clock that is too far skewed
- Protocol version mismatches — nodes running a different internal protocol version that is incompatible with the probing node
| Field | Meaning |
|---|---|
restoring | Cold routes currently holding an activation permit or waiting for one |
resident_cells | Cells currently resident in memory |
websockets | Open WebSocket connections |
rss_bytes | Resident set size of the node process in bytes |
cpu_percent | CPU utilisation sample |
fds | Open and limit file-descriptor counts |
pressured | Whether the node is currently under memory pressure |
shed_cells | Number of cells shed due to pressure |
The restoring field and rolling updates
The restoring value counts each cold route that holds an activation permit or is waiting for one. Because a capacity waiter already holds a permit, each cold route is counted exactly once — there is no double counting.
During a rolling update you must wait for every node to report restoring=0 before restarting the next node. This ensures that the cold work that began on the current node finishes before the next restart removes more warm capacity from the fleet.
A node with
restoring > 0 is still activating cells from cold storage. Restarting it before that number reaches zero shortens the warm-capacity window for the fleet and forces those cells to activate from scratch on another node.Internal operator API
The internal listener exposes an unauthenticated operator API. All paths below are on the--internal-listen address.
| Path | Description |
|---|---|
/state | Reports current occupancy, eviction, and restoration values. Remains available throughout a graceful shutdown drain. |
/cell/NAME | Resolves or activates a named cell for an operator check. |
/evict/NAME | Evicts a resident cell. |
/do/NAME | Sends a direct Durable Object request to the named cell. |
POST /shutdown | Starts a graceful ownership handoff, identical to SIGTERM. |
POST /shutdown?handoff=preserve | Prepares a clean same-node reload and keeps the ownership records intact. |
GET /__celld/probe | Serves the signed diagnostic probe consumed by celld diagnose. Also available during graceful shutdown drain. |
/state response looks like this:
The operator API is an alpha interface. A release can change its paths or response formats without notice. Keep your operator tooling and the celld release at the same version.