Package-level declarations
Types
The health of one component of a node, named: its status, what it is made of (components, each with its own health), and details an operator reads, plain values only (numbers, strings, booleans, lists and maps of them), never a message that may name a host or hold a secret.
The thresholds of a node's health, conservative by default: a probe that fails too soon takes nodes out of service, or restarts them, for what a retry would have absorbed.
How healthy a component of a node is, from the best to the worst.
The fatal errors of one node's own work (isFatal): an OutOfMemoryError, an InternalError or an UnknownError of the virtual machine that one of its loops met. After one, the JVM's state is not to be trusted (the heap is the whole process's), and a retry could loop on the same error, so nothing retries that work in the process: the first fatal error makes the node fatal for good (first). NodeHealth then reports its liveness and readiness DOWN until the process ends, so its orchestrator restarts it, and the node hands off what it holds (listen), so the other nodes take the work over from its checkpoints even where nothing restarts it.
The health of a node, host-agnostic: a host maps it to its probes (Spring Boot's Actuator, say).
What a node saw of one store it calls: when a call last succeeded, since when the calls fail, and how many failed lately. The node records it on every call of its event logs and lease stores (trackedLog, trackedLeases); NodeHealth reads it, so a probe never calls a store itself.
The append latency of one store, as the node's logs on it measure each call of append and appendAll (the backend's own time, the wait for a connection included; not the partition append queue's): a sample is the 90th percentile of the period's latencies against a baseline of the earlier periods.