package com.linkedin.parseq.retry.backoff;
import java.util.function.Function;
/**
* A policy that delegates to another policy that is selected based on the most recent error.
*
* @author Oleg Anashkin (oleg.anashkin@gmail.com)
*/
public class SelectedBackoff implements BackoffPolicy {
protected final Function<Throwable, BackoffPolicy> _policyFunction;
/**
* A policy that delegates to another policy that is selected based on the most recent error.
*
* @param policyFunction The function that maps from errors to backoff policies.
*/
public SelectedBackoff(Function<Throwable, BackoffPolicy> policyFunction) {
_policyFunction = policyFunction;
}
/**
* {@inheritDoc}
*/
@Override
public long nextBackoff(int attempts, Throwable error) {
return _policyFunction.apply(error).nextBackoff(attempts, error);
}
}