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

com.aliyuncs.policy.retry.backoff.EqualJitterBackoffStrategy Maven / Gradle / Ivy

package com.aliyuncs.policy.retry.backoff;

import com.aliyuncs.policy.retry.RetryPolicyContext;

import java.util.Random;


public final class EqualJitterBackoffStrategy extends BackoffStrategy {

    private static final int BASE_DELAY_CEILING = 24 * 60 * 60 * 1000;
    private static final int MAX_BACKOFF_CEILING = 24 * 60 * 60 * 1000;

    private final int baseDelay;
    private final int maxBackoffTime;
    private final Random random;

    public EqualJitterBackoffStrategy(final Integer baseDelay, final int maxBackoffTime, final Random random) {
        this.baseDelay = Math.min(baseDelay, BASE_DELAY_CEILING);
        this.maxBackoffTime = Math.min(maxBackoffTime, MAX_BACKOFF_CEILING);
        this.random = random;
    }

    @Override
    public int computeDelayBeforeNextRetry(RetryPolicyContext context) {
        int ceil = calculateExponentialDelay(context.retriesAttempted(), baseDelay, maxBackoffTime);
        return (ceil / 2) + random.nextInt((ceil / 2) + 1);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy