in core/circuitbreaker/rule_manager.go [42:87]
func init() {
cbGenFuncMap[SlowRequestRatio] = func(r *Rule, reuseStat interface{}) (CircuitBreaker, error) {
if r == nil {
return nil, errors.New("nil rule")
}
if reuseStat == nil {
return newSlowRtCircuitBreaker(r)
}
stat, ok := reuseStat.(*slowRequestLeapArray)
if !ok || stat == nil {
logging.Warn("[CircuitBreaker RuleManager] Expect to generate circuit breaker with reuse statistic, but fail to do type assertion, expect:*slowRequestLeapArray", "statType", reflect.TypeOf(stat).Name())
return newSlowRtCircuitBreaker(r)
}
return newSlowRtCircuitBreakerWithStat(r, stat), nil
}
cbGenFuncMap[ErrorRatio] = func(r *Rule, reuseStat interface{}) (CircuitBreaker, error) {
if r == nil {
return nil, errors.New("nil rule")
}
if reuseStat == nil {
return newErrorRatioCircuitBreaker(r)
}
stat, ok := reuseStat.(*errorCounterLeapArray)
if !ok || stat == nil {
logging.Warn("[CircuitBreaker RuleManager] Expect to generate circuit breaker with reuse statistic, but fail to do type assertion, expect:*errorCounterLeapArray", "statType", reflect.TypeOf(stat).Name())
return newErrorRatioCircuitBreaker(r)
}
return newErrorRatioCircuitBreakerWithStat(r, stat), nil
}
cbGenFuncMap[ErrorCount] = func(r *Rule, reuseStat interface{}) (CircuitBreaker, error) {
if r == nil {
return nil, errors.New("nil rule")
}
if reuseStat == nil {
return newErrorCountCircuitBreaker(r)
}
stat, ok := reuseStat.(*errorCounterLeapArray)
if !ok || stat == nil {
logging.Warn("[CircuitBreaker RuleManager] Expect to generate circuit breaker with reuse statistic, but fail to do type assertion, expect:*errorCounterLeapArray", "statType", reflect.TypeOf(stat).Name())
return newErrorCountCircuitBreaker(r)
}
return newErrorCountCircuitBreakerWithStat(r, stat), nil
}
}