org.apache.rocketmq.shaded.ch.qos.logback.core.recovery.RecoveryCoordinator Maven / Gradle / Ivy
/**
* Logback: the reliable, generic, fast and flexible logging framework.
* Copyright (C) 1999-2015, QOS.ch. All rights reserved.
*
* This program and the accompanying materials are dual-licensed under
* either the terms of the Eclipse Public License v1.0 as published by
* the Eclipse Foundation
*
* or (per the licensee's choosing)
*
* under the terms of the GNU Lesser General Public License version 2.1
* as published by the Free Software Foundation.
*/
package org.apache.rocketmq.shaded.ch.qos.logback.core.recovery;
public class RecoveryCoordinator {
public final static long BACKOFF_COEFFICIENT_MIN = 20;
public final static long BACKOFF_MULTIPLIER = 4;
static long BACKOFF_COEFFICIENT_MAX = 327680; // BACKOFF_COEFFICIENT_MIN * 4^7
private long backOffCoefficient = BACKOFF_COEFFICIENT_MIN;
private static long UNSET = -1;
// tests can set the time directly independently of system clock
private long currentTime = UNSET;
private long next;
public RecoveryCoordinator() {
next = getCurrentTime() + getBackoffCoefficient();
}
public RecoveryCoordinator(long currentTime) {
this.currentTime = currentTime;
next = getCurrentTime() + getBackoffCoefficient();
}
public boolean isTooSoon() {
long now = getCurrentTime();
if (now > next) {
next = now + getBackoffCoefficient();
return false;
} else {
return true;
}
}
void setCurrentTime(long forcedTime) {
currentTime = forcedTime;
}
private long getCurrentTime() {
if (currentTime != UNSET) {
return currentTime;
}
return System.currentTimeMillis();
}
private long getBackoffCoefficient() {
long currentCoeff = backOffCoefficient;
if (backOffCoefficient < BACKOFF_COEFFICIENT_MAX) {
backOffCoefficient *= BACKOFF_MULTIPLIER;
}
return currentCoeff;
}
}