Retry queue without backoff

warningretry-without-backoff

Retrying a transient failure at full speed turns one slow dependency into a retry storm. A retry queue backs off, preferably exponentially and with jitter.

Severity
warning
Selects
every node of kind queue
Components in scope
24
What it checks

It looks at every node of kind queue, and fires when:

  • — all of these hold:
  • — the node's `role` is "retry"
  • — any of these hold:
  • — the node's `backoff` has no value
  • — the node's `backoff` is "none"
Message
Retry queue '{{node.id}}' declares no backoff. Retries without backoff amplify the outage they are retrying through.

{{node.id}} style paths are filled in from the node, the edge or the design the finding is about.

Applies to · 24 components
Tripped by · 4

Reference designs whose broken twin names this rule in its header. The gate reads the same header, and fails when a rule no design trips.

Source
# yaml-language-server: $schema=../schema/rule.schema.json
# Retrying a transient failure at full speed turns one slow dependency into a retry
# storm. A retry queue must back off, preferably exponentially with jitter.
# Tripped by: designs/payment-system.broken.yaml
schemaVersion: "1"
type: "rule"
id: "retry-without-backoff"
severity: "warning"
select:
  node:
    kind: "queue"
when:
  all:
    - prop: "role"
      equals: "retry"
    - any:
        - prop: "backoff"
          exists: false
        - prop: "backoff"
          equals: "none"
message: "Retry queue '{{node.id}}' declares no backoff. Retries without backoff amplify the outage they are retrying through."

The same page as markdown, for an agent: /catalogue/rules/retry-without-backoff.md