fix golint issues in core/breaker (#466)

This commit is contained in:
Kevin Wan
2021-02-17 10:45:55 +08:00
committed by GitHub
parent 6f92daae12
commit 8ebf6750b9
3 changed files with 18 additions and 3 deletions

View File

@@ -18,12 +18,14 @@ const (
timeFormat = "15:04:05" timeFormat = "15:04:05"
) )
// ErrServiceUnavailable is returned when the CB state is open // ErrServiceUnavailable is returned when the Breaker state is open.
var ErrServiceUnavailable = errors.New("circuit breaker is open") var ErrServiceUnavailable = errors.New("circuit breaker is open")
type ( type (
// Acceptable is the func to check if the error can be accepted.
Acceptable func(err error) bool Acceptable func(err error) bool
// A Breaker represents a circuit breaker.
Breaker interface { Breaker interface {
// Name returns the name of the Breaker. // Name returns the name of the Breaker.
Name() string Name() string
@@ -61,10 +63,14 @@ type (
DoWithFallbackAcceptable(req func() error, fallback func(err error) error, acceptable Acceptable) error DoWithFallbackAcceptable(req func() error, fallback func(err error) error, acceptable Acceptable) error
} }
// Option defines the method to customize a Breaker.
Option func(breaker *circuitBreaker) Option func(breaker *circuitBreaker)
// Promise interface defines the callbacks that returned by Breaker.Allow.
Promise interface { Promise interface {
// Accept tells the Breaker that the call is successful.
Accept() Accept()
// Reject tells the Breaker that the call is failed.
Reject(reason string) Reject(reason string)
} }
@@ -89,6 +95,8 @@ type (
} }
) )
// NewBreaker returns a Breaker object.
// opts can be used to customize the Breaker.
func NewBreaker(opts ...Option) Breaker { func NewBreaker(opts ...Option) Breaker {
var b circuitBreaker var b circuitBreaker
for _, opt := range opts { for _, opt := range opts {
@@ -127,6 +135,7 @@ func (cb *circuitBreaker) Name() string {
return cb.name return cb.name
} }
// WithName returns a function to set the name of a Breaker.
func WithName(name string) Option { func WithName(name string) Option {
return func(b *circuitBreaker) { return func(b *circuitBreaker) {
b.name = name b.name = name

View File

@@ -7,24 +7,28 @@ var (
breakers = make(map[string]Breaker) breakers = make(map[string]Breaker)
) )
// Do calls Breaker.Do on the Breaker with given name.
func Do(name string, req func() error) error { func Do(name string, req func() error) error {
return do(name, func(b Breaker) error { return do(name, func(b Breaker) error {
return b.Do(req) return b.Do(req)
}) })
} }
// DoWithAcceptable calls Breaker.DoWithAcceptable on the Breaker with given name.
func DoWithAcceptable(name string, req func() error, acceptable Acceptable) error { func DoWithAcceptable(name string, req func() error, acceptable Acceptable) error {
return do(name, func(b Breaker) error { return do(name, func(b Breaker) error {
return b.DoWithAcceptable(req, acceptable) return b.DoWithAcceptable(req, acceptable)
}) })
} }
// DoWithFallback calls Breaker.DoWithFallback on the Breaker with given name.
func DoWithFallback(name string, req func() error, fallback func(err error) error) error { func DoWithFallback(name string, req func() error, fallback func(err error) error) error {
return do(name, func(b Breaker) error { return do(name, func(b Breaker) error {
return b.DoWithFallback(req, fallback) return b.DoWithFallback(req, fallback)
}) })
} }
// DoWithFallbackAcceptable calls Breaker.DoWithFallbackAcceptable on the Breaker with given name.
func DoWithFallbackAcceptable(name string, req func() error, fallback func(err error) error, func DoWithFallbackAcceptable(name string, req func() error, fallback func(err error) error,
acceptable Acceptable) error { acceptable Acceptable) error {
return do(name, func(b Breaker) error { return do(name, func(b Breaker) error {
@@ -32,6 +36,7 @@ func DoWithFallbackAcceptable(name string, req func() error, fallback func(err e
}) })
} }
// GetBreaker returns the Breaker with the given name.
func GetBreaker(name string) Breaker { func GetBreaker(name string) Breaker {
lock.RLock() lock.RLock()
b, ok := breakers[name] b, ok := breakers[name]
@@ -51,7 +56,8 @@ func GetBreaker(name string) Breaker {
return b return b
} }
func NoBreakFor(name string) { // NoBreakerFor disables the circuit breaker for the given name.
func NoBreakerFor(name string) {
lock.Lock() lock.Lock()
breakers[name] = newNoOpBreaker() breakers[name] = newNoOpBreaker()
lock.Unlock() lock.Unlock()

View File

@@ -55,7 +55,7 @@ func TestBreakersDoWithAcceptable(t *testing.T) {
} }
func TestBreakersNoBreakerFor(t *testing.T) { func TestBreakersNoBreakerFor(t *testing.T) {
NoBreakFor("any") NoBreakerFor("any")
errDummy := errors.New("any") errDummy := errors.New("any")
for i := 0; i < 10000; i++ { for i := 0; i < 10000; i++ {
assert.Equal(t, errDummy, GetBreaker("any").Do(func() error { assert.Equal(t, errDummy, GetBreaker("any").Do(func() error {