apache / apache/shenyu

[BUG] FixedRetryStrategy retries on ALL errors with no filter and no idempotency guard

Open
#6,575 1 comment 0 reactions 0 assignees View on GitHub
plugin: http-client priority: high type: performance
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.