code: public void onFail()
    {
      _lastFailTime = CurrentTime.currentTime();
      
      if (_firstFailTime == 0) {
        _firstFailTime = _lastFailTime;
      }
      _firstSuccessTime = 0;
      
      toState(State.FAIL);
      
      long recoverTimeout = _dynamicRecoverTimeout.get();
      
      long nextRecoverTimeout = Math.min(recoverTimeout + 1000L, _recoverTimeout);
      
      _dynamicRecoverTimeout.compareAndSet(recoverTimeout, nextRecoverTimeout);
    }
docs: Called when the connection fails.