in core/circuitbreaker/rule_manager.go [449:475]
func IsValidRule(r *Rule) error {
if r == nil {
return errors.New("nil Rule")
}
if len(r.Resource) == 0 {
return errors.New("empty resource name")
}
if r.StatIntervalMs <= 0 {
return errors.New("invalid StatIntervalMs")
}
if r.RetryTimeoutMs <= 0 {
return errors.New("invalid RetryTimeoutMs")
}
if r.Threshold < 0.0 {
return errors.New("invalid Threshold")
}
if r.Strategy == SlowRequestRatio && r.Threshold > 1.0 {
return errors.New("invalid slow request ratio threshold (valid range: [0.0, 1.0])")
}
if r.Strategy == ErrorRatio && r.Threshold > 1.0 {
return errors.New("invalid error ratio threshold (valid range: [0.0, 1.0])")
}
if r.StatSlidingWindowBucketCount != 0 && r.StatIntervalMs%r.StatSlidingWindowBucketCount != 0 {
logging.Warn("[CircuitBreaker IsValidRule] The following must be true: StatIntervalMs % StatSlidingWindowBucketCount == 0. StatSlidingWindowBucketCount will be replaced by 1", "rule", r)
}
return nil
}