1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package breaker
- import "sync"
- var (
- lock sync.RWMutex
- breakers = make(map[string]Breaker)
- )
- // Do calls Breaker.Do on the Breaker with given name.
- func Do(name string, req func() error) error {
- return do(name, func(b Breaker) error {
- return b.Do(req)
- })
- }
- // DoWithAcceptable calls Breaker.DoWithAcceptable on the Breaker with given name.
- func DoWithAcceptable(name string, req func() error, acceptable Acceptable) error {
- return do(name, func(b Breaker) error {
- 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 {
- return do(name, func(b Breaker) error {
- 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,
- acceptable Acceptable) error {
- return do(name, func(b Breaker) error {
- return b.DoWithFallbackAcceptable(req, fallback, acceptable)
- })
- }
- // GetBreaker returns the Breaker with the given name.
- func GetBreaker(name string) Breaker {
- lock.RLock()
- b, ok := breakers[name]
- lock.RUnlock()
- if ok {
- return b
- }
- lock.Lock()
- b, ok = breakers[name]
- if !ok {
- b = NewBreaker(WithName(name))
- breakers[name] = b
- }
- lock.Unlock()
- return b
- }
- // NoBreakerFor disables the circuit breaker for the given name.
- func NoBreakerFor(name string) {
- lock.Lock()
- breakers[name] = newNoOpBreaker()
- lock.Unlock()
- }
- func do(name string, execute func(b Breaker) error) error {
- return execute(GetBreaker(name))
- }
|