Skip to content

Commit

Permalink
use global breaker group instance brks
Browse files Browse the repository at this point in the history
  • Loading branch information
UnderTreeTech committed Sep 6, 2021
1 parent 41291aa commit bc94b48
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 9 deletions.
20 changes: 15 additions & 5 deletions pkg/breaker/breaker.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,16 +61,24 @@ func (p *Proba) TrueOnProba(proba float64) bool {
return reject
}

// brks global breaker group instance
var brks *BreakerGroup

func init() {
brks = &BreakerGroup{
breakers: make(map[string]Breaker),
}
}

// BreakerGroup brks
type BreakerGroup struct {
mutex sync.RWMutex
breakers map[string]Breaker
}

// NewBreakerGroup return a breaker group pointer
// NewBreakerGroup returns global breaker group instance brks
func NewBreakerGroup() *BreakerGroup {
return &BreakerGroup{
breakers: make(map[string]Breaker),
}
return brks
}

// Get return a break associate with the name
Expand All @@ -85,7 +93,9 @@ func (bg *BreakerGroup) Get(name string) Breaker {
bg.mutex.Lock()
breaker, ok = bg.breakers[name]
if !ok {
breaker = newGoogleSreBreaker(nil)
cfg := defaultGoogleSreBreakerConfig()
cfg.Name = name
breaker = newGoogleSreBreaker(cfg)
bg.breakers[name] = breaker
}
bg.mutex.Unlock()
Expand Down
12 changes: 8 additions & 4 deletions pkg/breaker/googlesrebreaker_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,18 +19,24 @@
package breaker

import (
"os"
"testing"

"github.com/UnderTreeTech/waterdrop/pkg/log"

"github.com/stretchr/testify/assert"
)

var bg = NewBreakerGroup()
var bg *BreakerGroup

func TestMain(m *testing.M) {
defer log.New(nil).Sync()
bg = NewBreakerGroup()
os.Exit(m.Run())
}

// TestBreakerAccept test breaker Accept
func TestBreakerAccept(t *testing.T) {
defer log.New(nil).Sync()
breaker := bg.Get("breaker")
for i := 0; i < 100; i++ {
breaker.Accept()
Expand All @@ -40,7 +46,6 @@ func TestBreakerAccept(t *testing.T) {

// TestBreakerReject test breaker Reject
func TestBreakerReject(t *testing.T) {
defer log.New(nil).Sync()
breaker := bg.Get("breaker")
for i := 0; i < 40000; i++ {
breaker.Reject()
Expand All @@ -51,7 +56,6 @@ func TestBreakerReject(t *testing.T) {

// TestBreakerDo test breaker Do
func TestBreakerDo(t *testing.T) {
defer log.New(nil).Sync()
err := bg.Do("do", func() error {
return nil
}, func(e error) bool {
Expand Down

0 comments on commit bc94b48

Please sign in to comment.