Skip to content

chore: replace always-on faraday-retry with opt-in RetryConfig#73

Merged
mogita merged 2 commits into
masterfrom
feat/cha-2959-retry
Jul 24, 2026
Merged

chore: replace always-on faraday-retry with opt-in RetryConfig#73
mogita merged 2 commits into
masterfrom
feat/cha-2959-retry

Conversation

@mogita

@mogita mogita commented Jul 23, 2026

Copy link
Copy Markdown
Collaborator

Ticket

https://linear.app/stream/issue/CHA-2959/rate-limits-and-retry

Summary

Adds an opt-in auto-retry policy. RetryConfig is disabled by default (maxAttempts=3, maxBackoff=30s). When enabled, retries ONLY GET/HEAD requests that fail with HTTP 429 or a transport error, honoring Retry-After (clamped to maxBackoff) otherwise exponential backoff with full jitter. Never retries writes or 5xx; always honors the backend unrecoverable flag; surfaces the last attempt's error. Config surface: retry_config: GetStreamRuby::RetryConfig.new(...)

Notes

  • Behavior change: removes the always-on faraday-retry middleware (and its gemspec dependency); retries are now opt-in only.
  • Retry attempts are observable via the existing http.request.failed log event with a retry.attempt field (transport retries carry error.type; 429 retries omit it, since that field is the transport-only enum).
  • Titled chore: intentionally so the merge does not auto-publish. Publish later via the manual Release workflow (workflow_dispatch, minor); the release notes should flag the behavior change.

The HardDeleteChannels spec waits on an async hard-delete task, but under shared-backend async-queue latency it can miss the 60-attempt poll window and fail. Add an opt-in skip_on_timeout to wait_for_task so the hard-delete example skips rather than fails on timeout, mirroring the getstream-go/php fix; a genuine task failure still returns with status 'failed', and other callers keep the default raise-on-timeout.
@mogita
mogita merged commit 5f7ffb4 into master Jul 24, 2026
7 checks passed
@mogita
mogita deleted the feat/cha-2959-retry branch July 24, 2026 14:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant