[BUG] FixedRetryStrategy retries on ALL errors with no filter and no idempotency guard
- Dominant language
- Java
- Stars
- 8.8k
- Forks
- 3.1k
- Avg merge
- 7d 1h
- Merged PRs (30d)
- 85
Description
## Description
`Retry.fixedDelay(retryTimes, Duration.ofSeconds(2))` has no `.filter(...)`. Reactor's `Retry.fixedDelay` retries on every `Throwable` by default: 4xx permanent failures, 5xx, any IOException/NPE, and POST/PUT/DELETE (non-idempotent). With `retryTimes=3` and an upstream returning 500 for a POST, the gateway sends 3 more POSTs to a failing server.
## Location
```
shenyu-plugin-httpclient/.../FixedRetryStrategy.java:57-59
```
## Impact
Retry storm amplifying load by (N+1)x during an upstream outage, with 2s delays occupying connections. 1000 concurrent requests to a failing upstream = 4000 requests/s.
## Suggested fix
Add a `.filter()` limiting retries to transient/network exceptions (ConnectTimeoutException, ReadTimeoutException, TimeoutException); add an idempotency guard skipping non-GET methods unless explicitly configured.
## Related existing issue(s)
#6413 is retry sending an empty body (functional); this is retry-on-everything amplification (perf/scalability). #6464 (non-default retry backoff strategies can't be selected) is a selection bug; this is the Fixed strategy's missing filter.
_Identified during the 2026-08-02 audit; full list in [`docs/issue-candidates-2026-08-02.md`](docs/issue-candidates-2026-08-02.md)._
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by reading shenyu-plugin-httpclient/.../FixedRetryStrategy.java at lines 57-59 and trace how Reactor's Retry.fixedDelay is configured. Check the existing retry and HTTP method handling around this strategy. Done means retries are limited to transient/network exceptions and non-GET methods are guarded unless explicitly configured, without the retry amplification described in the issue.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- api, backend, networking
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Clearly specified
- Newbie friendliness
- 55/100