package com.linkedin.parseq.retry; import com.linkedin.parseq.retry.backoff.BackoffPolicy; import com.linkedin.parseq.retry.termination.TerminationPolicy; import java.util.function.Function; /** * A policy builder that enables customizable retries for arbitrary parseq tasks. * * @author Oleg Anashkin (oleg.anashkin@gmail.com) */ final class RetryPolicyImpl implements RetryPolicy { /** A name of this policy. It is used to configure parseq tasks. */ private String _name; /** The strategy for determining when to abort a retry operation. */ private TerminationPolicy _terminationPolicy; /** The strategy used to calculate delays between retries. */ private BackoffPolicy _backoffPolicy; /** The classifier for errors raised during retry operations. */ private Function<Throwable, ErrorClassification> _errorClassifier; /** * {@inheritDoc} */ @Override public String getName() { return _name; } /** * Set a name of this policy. It is used to configure parseq tasks. */ RetryPolicyImpl setName(String name) { _name = name; return this; } /** * {@inheritDoc} */ @Override public TerminationPolicy getTerminationPolicy() { return _terminationPolicy; } /** * Set a strategy for determining when to abort a retry operation. */ RetryPolicyImpl setTerminationPolicy(TerminationPolicy terminationPolicy) { _terminationPolicy = terminationPolicy; return this; } /** * {@inheritDoc} */ @Override public BackoffPolicy getBackoffPolicy() { return _backoffPolicy; } /** * Set a strategy used to calculate delays between retries. */ RetryPolicyImpl setBackoffPolicy(BackoffPolicy backoffPolicy) { _backoffPolicy = backoffPolicy; return this; } /** * {@inheritDoc} */ @Override public Function<Throwable, ErrorClassification> getErrorClassifier() { return _errorClassifier; } /** * Set a classifier for errors raised during retry operations. */ RetryPolicyImpl setErrorClassifier(Function<Throwable, ErrorClassification> errorClassifier) { _errorClassifier = errorClassifier; return this; } }