package com.ctrip.framework.apollo.core.schedule;
/**
* @author Jason Song(song_s@ctrip.com)
*/
public class ExponentialSchedulePolicy implements SchedulePolicy {
private final long delayTimeLowerBound;
private final long delayTimeUpperBound;
private long lastDelayTime;
public ExponentialSchedulePolicy(long delayTimeLowerBound, long delayTimeUpperBound) {
this.delayTimeLowerBound = delayTimeLowerBound;
this.delayTimeUpperBound = delayTimeUpperBound;
}
@Override
public long fail() {
long delayTime = lastDelayTime;
if (delayTime == 0) {
delayTime = delayTimeLowerBound;
} else {
delayTime = Math.min(lastDelayTime << 1, delayTimeUpperBound);
}
lastDelayTime = delayTime;
return delayTime;
}
@Override
public void success() {
lastDelayTime = 0;
}
}