hashicorp / go-retryablehttp

Retryable HTTP client in Go
Mozilla Public License 2.0
1.99k stars 251 forks source link

A way to skip retrying non-idempotent requests #169

Open d-honeybadger opened 2 years ago

d-honeybadger commented 2 years ago

When non-idempotent requests, e.g. POST, are retried, it can easily lead to data corruption and duplication. One natural way to skip retrying those is with CheckRetry function. But in that function, one only has the response, and not the request, to make the decision based on. Since the response in nil when there are connection errors, one cannot check response.Request.Method in that case.

It would be pretty awesome to have request passed to CheckRetry alongside the response, but any other solution that would allow to skip retrying based on method would be great too.

Right now I'm having to use two separate http clients, one with retries and one without, depending on the method.