Overview

When the core retry functionality was introduced (see #34716), it had a built-in MaxRetryDurationPolicy. In #35058, that was migrated to a withMaxDuration() factory method, and in #35110 that was renamed to withMaxElapsedTime() (with a corresponding maxElapsedTime() method on the builder) in order to align with the maxElapsedTime feature of ExponentialBackOff.

However, @Retryable does not provide a maxElapsedTime attribute.

In addition, the maxElapsedTime feature is a bit misleading, since it does not actually track wall-clock time but rather only the sum of individual, accumulated back-off intervals/delays, which is likely not very useful. Furthermore, the maxElapsedTime will never apply to a zero-valued delay/interval.

In light of the above, we should remove the maxElapsedTime feature from the built-in RetryPolicy.

Users can still implement a custom BackOff strategy if they find they need some form of "max elapsed time" or "max duration".

Related Issues

  • 34716

  • 35058

  • 34529

  • 35110