|
|
@ -25,7 +25,7 @@ type (
|
|
|
|
Acceptable func(err error) bool
|
|
|
|
Acceptable func(err error) bool
|
|
|
|
|
|
|
|
|
|
|
|
Breaker interface {
|
|
|
|
Breaker interface {
|
|
|
|
// Name returns the name of the netflixBreaker.
|
|
|
|
// Name returns the name of the Breaker.
|
|
|
|
Name() string
|
|
|
|
Name() string
|
|
|
|
|
|
|
|
|
|
|
|
// Allow checks if the request is allowed.
|
|
|
|
// Allow checks if the request is allowed.
|
|
|
@ -34,34 +34,34 @@ type (
|
|
|
|
// If not allow, ErrServiceUnavailable will be returned.
|
|
|
|
// If not allow, ErrServiceUnavailable will be returned.
|
|
|
|
Allow() (Promise, error)
|
|
|
|
Allow() (Promise, error)
|
|
|
|
|
|
|
|
|
|
|
|
// Do runs the given request if the netflixBreaker accepts it.
|
|
|
|
// Do runs the given request if the Breaker accepts it.
|
|
|
|
// Do returns an error instantly if the netflixBreaker rejects the request.
|
|
|
|
// Do returns an error instantly if the Breaker rejects the request.
|
|
|
|
// If a panic occurs in the request, the netflixBreaker handles it as an error
|
|
|
|
// If a panic occurs in the request, the Breaker handles it as an error
|
|
|
|
// and causes the same panic again.
|
|
|
|
// and causes the same panic again.
|
|
|
|
Do(req func() error) error
|
|
|
|
Do(req func() error) error
|
|
|
|
|
|
|
|
|
|
|
|
// DoWithAcceptable runs the given request if the netflixBreaker accepts it.
|
|
|
|
// DoWithAcceptable runs the given request if the Breaker accepts it.
|
|
|
|
// DoWithAcceptable returns an error instantly if the netflixBreaker rejects the request.
|
|
|
|
// DoWithAcceptable returns an error instantly if the Breaker rejects the request.
|
|
|
|
// If a panic occurs in the request, the netflixBreaker handles it as an error
|
|
|
|
// If a panic occurs in the request, the Breaker handles it as an error
|
|
|
|
// and causes the same panic again.
|
|
|
|
// and causes the same panic again.
|
|
|
|
// acceptable checks if it's a successful call, even if the err is not nil.
|
|
|
|
// acceptable checks if it's a successful call, even if the err is not nil.
|
|
|
|
DoWithAcceptable(req func() error, acceptable Acceptable) error
|
|
|
|
DoWithAcceptable(req func() error, acceptable Acceptable) error
|
|
|
|
|
|
|
|
|
|
|
|
// DoWithFallback runs the given request if the netflixBreaker accepts it.
|
|
|
|
// DoWithFallback runs the given request if the Breaker accepts it.
|
|
|
|
// DoWithFallback runs the fallback if the netflixBreaker rejects the request.
|
|
|
|
// DoWithFallback runs the fallback if the Breaker rejects the request.
|
|
|
|
// If a panic occurs in the request, the netflixBreaker handles it as an error
|
|
|
|
// If a panic occurs in the request, the Breaker handles it as an error
|
|
|
|
// and causes the same panic again.
|
|
|
|
// and causes the same panic again.
|
|
|
|
DoWithFallback(req func() error, fallback func(err error) error) error
|
|
|
|
DoWithFallback(req func() error, fallback func(err error) error) error
|
|
|
|
|
|
|
|
|
|
|
|
// DoWithFallbackAcceptable runs the given request if the netflixBreaker accepts it.
|
|
|
|
// DoWithFallbackAcceptable runs the given request if the Breaker accepts it.
|
|
|
|
// DoWithFallbackAcceptable runs the fallback if the netflixBreaker rejects the request.
|
|
|
|
// DoWithFallbackAcceptable runs the fallback if the Breaker rejects the request.
|
|
|
|
// If a panic occurs in the request, the netflixBreaker handles it as an error
|
|
|
|
// If a panic occurs in the request, the Breaker handles it as an error
|
|
|
|
// and causes the same panic again.
|
|
|
|
// and causes the same panic again.
|
|
|
|
// acceptable checks if it's a successful call, even if the err is not nil.
|
|
|
|
// acceptable checks if it's a successful call, even if the err is not nil.
|
|
|
|
DoWithFallbackAcceptable(req func() error, fallback func(err error) error, acceptable Acceptable) error
|
|
|
|
DoWithFallbackAcceptable(req func() error, fallback func(err error) error, acceptable Acceptable) error
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
BreakerOption func(breaker *circuitBreaker)
|
|
|
|
Option func(breaker *circuitBreaker)
|
|
|
|
|
|
|
|
|
|
|
|
Promise interface {
|
|
|
|
Promise interface {
|
|
|
|
Accept()
|
|
|
|
Accept()
|
|
|
@ -89,7 +89,7 @@ type (
|
|
|
|
}
|
|
|
|
}
|
|
|
|
)
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
func NewBreaker(opts ...BreakerOption) Breaker {
|
|
|
|
func NewBreaker(opts ...Option) Breaker {
|
|
|
|
var b circuitBreaker
|
|
|
|
var b circuitBreaker
|
|
|
|
for _, opt := range opts {
|
|
|
|
for _, opt := range opts {
|
|
|
|
opt(&b)
|
|
|
|
opt(&b)
|
|
|
@ -127,7 +127,7 @@ func (cb *circuitBreaker) Name() string {
|
|
|
|
return cb.name
|
|
|
|
return cb.name
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func WithName(name string) BreakerOption {
|
|
|
|
func WithName(name string) Option {
|
|
|
|
return func(b *circuitBreaker) {
|
|
|
|
return func(b *circuitBreaker) {
|
|
|
|
b.name = name
|
|
|
|
b.name = name
|
|
|
|
}
|
|
|
|
}
|
|
|
|