retry: reduce total number of retries

Retries in restic try to solve two main problems:
- retry a temporarily failed operation
- tolerate temporary network interruptions

The first problem only requires a few retries, whereas the last one benefits
primarily from spreading the requests over a longer duration.

Increasing the default multiplier and the initial interval works for
both cases. The first few retries only take a few seconds, while later
retries quickly reach the maximum interval of one minute. This ensures
that the total number of retries issued by restic will remain at around
21 retries for a 15 minute period. As the concurrency in restic is
bounded, retries drastically reduce the number of requests sent to a
backend. This helps to prevent overloading the backend.
This commit is contained in:
Michael Eischer 2024-04-29 21:19:15 +02:00
parent 512cd6ef07
commit 98709a4372

View file

@ -108,6 +108,9 @@ func (be *Backend) retry(ctx context.Context, msg string, f func() error) error
bo := backoff.NewExponentialBackOff() bo := backoff.NewExponentialBackOff()
bo.MaxElapsedTime = be.MaxElapsedTime bo.MaxElapsedTime = be.MaxElapsedTime
bo.InitialInterval = 1 * time.Second
bo.Multiplier = 2
if fastRetries { if fastRetries {
// speed up integration tests // speed up integration tests
bo.InitialInterval = 1 * time.Millisecond bo.InitialInterval = 1 * time.Millisecond