Suppose you have the following code which invokes a gRPC request and may fail due to various network conditions.
How to retry this call until no exception raised? Wrap the call in an inner(inline) named function and use the provided retry function.
Thanks to closures, we can use any variable in the scope outer to the inner function.
This retry function supports the following features:
- Returns the value of the invoked function when it succeeds
- Raises the exception of the invoked function if attempts exhausted
- Limit for the number of attempts (0 for unlimited)
- Wait (linear or exponential) between attempts
- Retry only if the exception is an instance of a specific exception type.
- Optional logging of attempts
Retry function code:
So, keep trying!