A mechanism for selectively retrying methods that throw exceptions under certain circumstances.

Typical usage is

UnreliableImplementation unreliableImpl = new UnreliableImplementation();
UnreliableInterface unreliable = (UnreliableInterface)
  RetryProxy.create(UnreliableInterface.class, unreliableImpl,
    RetryPolicies.retryUpToMaximumCountWithFixedSleep(4, 10, TimeUnit.SECONDS));
unreliable.call();

This will retry any method called on unreliable four times - in this case the call() method - sleeping 10 seconds between each retry. There are a number of {@link org.apache.hadoop.io.retry.RetryPolicies retry policies} available, or you can implement a custom one by implementing {@link org.apache.hadoop.io.retry.RetryPolicy}. It is also possible to specify retry policies on a {@link org.apache.hadoop.io.retry.RetryProxy#create(Class, Object, Map) per-method basis}.