Skip to content

Commit

Permalink
feat: circuitbreaker.panel use skipmap (bytedance#78)
Browse files Browse the repository at this point in the history
  • Loading branch information
zhangyunhao116 authored Aug 10, 2021
1 parent acbf5a2 commit 4ff9dac
Showing 1 changed file with 7 additions and 5 deletions.
12 changes: 7 additions & 5 deletions cloud/circuitbreaker/panel.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,13 @@ package circuitbreaker
import (
"sync"
"time"

"github.com/bytedance/gopkg/collection/skipmap"
)

// panel manages a batch of circuitbreakers
type panel struct {
breakers sync.Map
breakers *skipmap.StringMap
defaultOptions Options
changeHandler PanelStateChangeHandler
}
Expand Down Expand Up @@ -59,7 +61,7 @@ func NewPanel(changeHandler PanelStateChangeHandler,
return nil, err
}
p := &panel{
breakers: sync.Map{},
breakers: skipmap.NewString(),
defaultOptions: defaultOptions,
changeHandler: changeHandler,
}
Expand Down Expand Up @@ -103,8 +105,8 @@ func (p *panel) RemoveBreaker(key string) {
// DumpBreakers .
func (p *panel) DumpBreakers() map[string]Breaker {
breakers := make(map[string]Breaker)
p.breakers.Range(func(key, value interface{}) bool {
breakers[key.(string)] = value.(*breaker)
p.breakers.Range(func(key string, value interface{}) bool {
breakers[key] = value.(*breaker)
return true
})
return breakers
Expand Down Expand Up @@ -176,7 +178,7 @@ func (t *sharedTicker) tick(ticker *time.Ticker) {
case <-ticker.C:
t.Lock()
for p := range t.panels {
p.breakers.Range(func(key, value interface{}) bool {
p.breakers.Range(func(_ string, value interface{}) bool {
if b, ok := value.(*breaker); ok {
b.metricer.tick()
}
Expand Down

0 comments on commit 4ff9dac

Please sign in to comment.