Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Failures, Retries, and Drain

Errors retain causal chains

Most stack boundaries normalize to a boxed shared error while concrete marker types identify policy rejection, failfast, timeout, TLS, routing, and discovery causes. Helpers inspect the source chain for metrics and HTTP/gRPC response mapping without requiring one monolithic error enum.

Retry requires replayability and permission

An HTTP request body may be a stream that cannot be cloned. Linkerd buffers only up to a configured replay limit; exceeding it disables replay. Route policy classifies failures, retry budgets limit additional traffic, and timeouts bound the whole operation. A retry is therefore a conjunction: policy says retryable, body is replayable, budget is available, and deadline remains.

Reconnect is a state machine

Reconnect moves through disconnected, backoff, connecting, and connected service states. Readiness drives reconnection rather than spawning an unbounded retry loop.

Shutdown drains ownership

SIGTERM completes a drain signal watched by servers. Listeners stop admitting new connections; active connection/request tasks receive drain context and are given time to finish. Readiness, queues, bodies, and connection handles already encode outstanding ownership, so graceful shutdown follows the same boundaries as normal traffic rather than maintaining a separate request registry.