package org.dcache.util;
import java.util.concurrent.TimeUnit;
/**
* Short hand predefined {@link TransferRetryPolicy}
*/
public final class TransferRetryPolicies
{
public static final long RETRY_PERIOD = TimeUnit.SECONDS.toMillis(30);
/* no instances allowed */
private TransferRetryPolicies()
{
}
/**
* Create a {@link TransferRetryPolicy} which will let {@link
* Transfer} to try proceed with request on any recoverable errors
* ( like timeouts or pool does not contains the file).
*
* @return policy
*/
public static TransferRetryPolicy neverFailPolicy()
{
return new TransferRetryPolicy(Integer.MAX_VALUE, RETRY_PERIOD, Long.MAX_VALUE);
}
/**
* Create a {@link TransferRetryPolicy} with no retries in case of errors.
*/
public static TransferRetryPolicy tryOncePolicy()
{
return new TransferRetryPolicy(1, 0, Long.MAX_VALUE);
}
/**
* Create a {@link TransferRetryPolicy} this which will let {@link
* Transfer} to start a transfer with in given timeout. No retries
* performed in case of errors.
*/
public static TransferRetryPolicy tryOncePolicy(long millis)
{
return new TransferRetryPolicy(1, 0, millis);
}
public static TransferRetryPolicy tryOncePolicy(long timeout, TimeUnit unit)
{
return tryOncePolicy(unit.toMillis(timeout));
}
/**
* Create a {@link TransferRetryPolicy} this which will let {@link
* Transfer} to start a transfer with in given timeout. Request
* will be retried on any recoverable error.
*/
public static TransferRetryPolicy tryTillTimeout(long millis)
{
return new TransferRetryPolicy(Integer.MAX_VALUE, RETRY_PERIOD, millis);
}
public static TransferRetryPolicy tryTillTimeout(long timeout, TimeUnit unit)
{
return tryTillTimeout(unit.toMillis(timeout));
}
}