All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.bazaarvoice.ostrich.retry.RetryNTimes Maven / Gradle / Ivy

There is a newer version: 2.1.0
Show newest version
package com.bazaarvoice.ostrich.retry;

import java.util.concurrent.TimeUnit;

import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;

/** A retry policy that permits a fixed number of attempts at executing an operation. */
public class RetryNTimes extends SleepingRetry {
    private final long _sleepTimeBetweenAttemptsMillis;

    /**
     * Attempt the operation at most {@code maxNumAttempts} times without any delay between each attempt.
     * @param maxNumAttempts The maximum number of attempts.  This is equal one plus the maximum number of retries.
     *                       This should be greater than zero.  For backward compatibility zero is accepted, but one
     *                       attempt is always made.
     */
    public RetryNTimes(int maxNumAttempts) {
        this(maxNumAttempts, 0, TimeUnit.MILLISECONDS);
    }

    /**
     * Attempt the operation at most {@code maxNumAttempts} times, sleeping the specified time duration before each
     * retry attempt.
     * @param maxNumAttempts The maximum number of attempts.  This is equal one plus the maximum number of retries.
     *                       This should be greater than zero.  For backward compatibility zero is accepted, but one
     *                       attempt is always made.
     * @param sleepTimeBetweenRetries The amount of time to sleep before each retry attempt.  If zero, there will be no
     *                                delay between attempts.
     * @param unit The units (milliseconds, seconds, etc.) of {@code sleepTimeBetweenRetries}.
     */
    public RetryNTimes(int maxNumAttempts, long sleepTimeBetweenRetries, TimeUnit unit) {
        super(maxNumAttempts);

        checkArgument(sleepTimeBetweenRetries >= 0);
        checkNotNull(unit);
        _sleepTimeBetweenAttemptsMillis = unit.toMillis(sleepTimeBetweenRetries);
    }

    @Override
    protected long getSleepTimeMs(int numAttempts, long elapsedTimeMs) {
        return _sleepTimeBetweenAttemptsMillis;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy