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

com.aliyun.openservices.ots.internal.OTSAlwaysRetryStrategy Maven / Gradle / Ivy

package com.aliyun.openservices.ots.internal;

public class OTSAlwaysRetryStrategy implements OTSRetryStrategy {

    private int retryPauseInMillis = 50; // milliseconds
    private int maxRetryTimes = 3;
    private int maxRetryPauseInMillis = 1000; // one second

    public int getRetryPauseInMillis() {
        return retryPauseInMillis;
    }

    public void setRetryPauseInMillis(int retryPauseInMillis) {
        this.retryPauseInMillis = retryPauseInMillis;
    }

    public int getMaxRetryTimes() {
        return maxRetryTimes;
    }

    public void setMaxRetryTimes(int maxRetryTimes) {
        this.maxRetryTimes = maxRetryTimes;
    }

    public int getMaxRetryPauseInMillis() {
        return maxRetryPauseInMillis;
    }

    public void setMaxRetryPauseInMillis(int maxRetryPauseInMillis) {
        this.maxRetryPauseInMillis = maxRetryPauseInMillis;
    }

    /**
     * 若重试次数未超过上限,则重试。
     *
     * @param action  操作名,比如"ListTable"、"GetRow"、"PutRow"等
     * @param ex      上次访问失败的错误信息、为ClientException或OTSException
     * @param retries 表示本次判断的为第retries次重试,retries 大于 0
     * @return
     */
    @Override
    public boolean shouldRetry(String action, Exception ex, int retries) {
        if (retries > maxRetryTimes) {
            return false;
        }

        return true;
    }

    /**
     * 获取重试的时间间隔,重试时间间隔的计算公式为:Math.min(Match.pow(2, reties) * {@link #retryPauseInMillis}, {@link #maxRetryPauseInMillis})
     *
     * @param action  操作名,比如"ListTable"、"GetRow"、"PutRow"等
     * @param ex      上次访问失败的错误信息、为ClientException或OTSException
     * @param retries 表示将要发起第retries次重试, retries 大于 0
     * @return
     */
    @Override
    public long getPauseDelay(String action, Exception ex, int retries) {
        // make the pause time increase exponentially
        // based on an assumption that the more times it retries,
        // the less probability it succeeds.
        int scale = retryPauseInMillis;
        long delay = (long) Math.pow(2, retries) * scale;
        return Math.min(delay, maxRetryPauseInMillis);
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy