Say max_retries is the total attempt count, not a retry count (closes #316)
check / check (push) Failing after 1s
check / check (push) Failing after 1s
The delivery core makes max_retries attempts in total: a fresh delivery starts at attempt one and gives up once the attempt number reaches max_retries, so 3 is three attempts, not four, and 0 is special-cased to a single fire-and-forget attempt with no retries and no circuit breaker. The create and edit target forms called it "Max retries" with no total, and the README data-model row called it "maximum retry attempts", so an operator wanting "try, then retry twice" would enter the wrong number. Both forms and the README rows now state the number is the total number of delivery attempts, with the 0 case spelled out. The delivery arithmetic is unchanged. A UI copy test renders both forms and pins the shared wording so it cannot drift back to a retry count. Model: opus-4-8
This commit is contained in:
@@ -1507,7 +1507,7 @@ events should be forwarded.
|
||||
| `type` | TargetType | One of: `http`, `slack`, `database`, `log` |
|
||||
| `active` | boolean | Whether deliveries are enabled (default: true) |
|
||||
| `config` | JSON text | Type-specific configuration |
|
||||
| `max_retries` | integer | Maximum retry attempts for `http` and `slack` targets (0 = fire-and-forget, >0 = retries with backoff and a circuit breaker). Ignored by `database` and `log` targets |
|
||||
| `max_retries` | integer | Total delivery attempts for `http` and `slack` targets, not retries on top of the first: 0 is a single fire-and-forget attempt with no retries and no circuit breaker, and a value of N makes N attempts in all, with exponential backoff and a per-target circuit breaker. Ignored by `database` and `log` targets |
|
||||
| `max_queue_size` | integer | Stored and shown on the target's detail view, but not enforced anywhere yet: nothing in the delivery engine consults it. Queue depth is set by the two fixed 10,000-entry channels |
|
||||
|
||||
**Relations:** Belongs to Webhook. Has many Deliveries.
|
||||
@@ -1515,12 +1515,12 @@ events should be forwarded.
|
||||
**Target types:**
|
||||
|
||||
- **`http`** — Forward the event as an HTTP POST to a configured URL.
|
||||
Behavior depends on `max_retries`: when `max_retries` is 0 (the
|
||||
default), the target operates in fire-and-forget mode — a single
|
||||
attempt with no retries and no circuit breaker. When `max_retries` is
|
||||
greater than 0, failed deliveries are retried with exponential backoff
|
||||
up to `max_retries` attempts, protected by a per-target circuit
|
||||
breaker.
|
||||
`max_retries` is the total number of delivery attempts, not retries on
|
||||
top of the first: when `max_retries` is 0 (the default), the target
|
||||
operates in fire-and-forget mode, a single attempt with no retries and
|
||||
no circuit breaker; a value of N makes up to N attempts in all,
|
||||
retrying failed deliveries with exponential backoff and protecting them
|
||||
with a per-target circuit breaker.
|
||||
- **`slack`** — Post the event as a formatted message to a
|
||||
Slack-compatible incoming webhook URL (`webhookUrl` in `config`). It
|
||||
is built on the same HTTP core as `http` and honours `max_retries`
|
||||
|
||||
Reference in New Issue
Block a user