Skip to content

Commit

Permalink
PR Feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
travis-minke-sap committed Nov 30, 2021
1 parent 031faad commit a974489
Showing 1 changed file with 20 additions and 21 deletions.
41 changes: 20 additions & 21 deletions docs/eventing/experimental-features.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,28 +121,28 @@ headers are handled when calculating backoff times for retrying **429** and
Subscriptions, Brokers, Triggers, and any other resource spec that accepts the
`delivery` field.

The `retryAfterMax` field will only take effect if the `delivery` spec is
configured to perform retries, and will only pertain to retry attempts on
**429** and **503** response codes. The field provides an override to prevent
large **Retry-After** durations from impacting throughput, and must be specified
using the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601#Times) format. The
largest of the normal backoff duration and the Retry-After header value will be
used for the subsequent retry attempt. Specifying a "zero" value of "PT0S" will
effectively disable **Retry-After** support.
The `retryAfterMax` field only takes effect if you configure the `delivery` spec
to perform retries, and only pertains to retry attempts on **429** and **503**
response codes. The field provides an override to prevent large **Retry-After**
durations from impacting throughput, and must be specified using
the [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601#Times) format. The largest
of the normal backoff duration and the Retry-After header value will be used for
the subsequent retry attempt. Specifying a "zero" value of `PT0S` effectively
disables **Retry-After** support.

Prior to this experimental feature, Knative Eventing implementations have not
supported **Retry-After** headers, and this is an attempt to provide a path
for standardizing that support. To begin the feature will be **opt-in**, but
the final state will be **opt-out** as follows...
for standardizing that support. To begin, the feature is **opt-in**, but the
final state will be **opt-out** as follows:

| Feature Stage | Feature Flag | retryAfterMax Field Absent | retryAfterMax Field Present |
| --- | --- | --- | --- |
| Alpha / Beta | Disabled | Accepted by Webhook Validation & Retry-After headers NOT enforced | Rejected by WebHook Validation |
| Alpha / Beta | Enabled | Accepted by Webhook Validation & Retry-After headers NOT enforced | Accepted by Webhook Validation & Retry-After headers enforced if max override > 0 |
| Stable / GA | n/a | Retry-After headers enforced without max override | Retry-After headers enforced if max override > 0 |

The following example shows a Subscription that retries sending an event 3
times, and respects **Retry-After** headers while imposing a max backoff of
The following example shows a Subscription that retries sending an event three
times, and respects **Retry-After** headers while imposing a maximum backoff of
120 seconds:

```yaml
Expand All @@ -165,15 +165,14 @@ spec:
```

!!! note
While the experimental feature flag will enforce all DeliverySpec usage of
the `retryAfterMax` field via Webhook validation, it does not guarantee all
implementations (Channels, Sources, etc.) will actually implement support
for the field. The shared `HTTPMessageSender.SendWithRetries()` logic
has been enhanced to support this feature, and all implementations using it
to perform retries will automatically benefit. Sandbox implementations NOT
based on this shared library (e.g. RabbitMQ, Google Pub/Sub, etc.) would
require additional development effort to respect/enforce the new
`retryAfterMax`field.
While the experimental feature flag enforces all DeliverySpec usage of the
`retryAfterMax` field through Webhook validation, it does not guarantee all
implementations, such as Channels or Sources, actually implement support
for the field. The shared `HTTPMessageSender.SendWithRetries()` logic has
been enhanced to support this feature, and all implementations using it to
perform retries will automatically benefit. Sandbox implementations not
based on this shared library, for example RabbitMQ or Google Pub/Sub, would
require additional development effort to respect the `retryAfterMax` field.

### DeliverySpec.Timeout field

Expand Down

0 comments on commit a974489

Please sign in to comment.