in safeguard-impl/src/main/java/org/apache/safeguard/impl/circuitbreaker/CircuitBreakerInterceptor.java [311:328]
private CheckResult performStateCheck(final CheckType type) {
CheckIntervalData currentData;
CheckIntervalData nextData;
State currentState;
do {
final long time = now();
currentState = state.get();
currentData = checkIntervalData.get();
nextData = nextCheckIntervalData(type, currentData, currentState, time);
} while (!updateCheckIntervalData(currentData, nextData));
final State newState = currentState.isStateTransition(this, currentData, nextData);
if (newState != currentState) {
state.compareAndSet(currentState, newState);
checkIntervalData.set(new CheckIntervalData(volumeThreshold, 0, 0, EMPTY_ARRAY, now()));
return newState != State.OPEN ? CheckResult.CLOSED_CHANGED : CheckResult.OPEN;
}
return newState != State.OPEN ? CheckResult.CLOSED : CheckResult.OPEN;
}