4 Star 6 Fork 5

Humpback / humpback-center

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
enginesfilter.go 2.02 KB
一键复制 编辑 原始数据 按行查看 历史
bolve 提交于 2017-04-15 00:08 . fix code
package cluster
import (
"sync"
)
// EnginesFilter is exported
type EnginesFilter struct {
sync.RWMutex
allocEngines map[string]*Engine
failEngines map[string]*Engine
}
// NewEnginesFilter is exported
func NewEnginesFilter() *EnginesFilter {
return &EnginesFilter{
allocEngines: make(map[string]*Engine),
failEngines: make(map[string]*Engine),
}
}
// Size is exported
func (filter *EnginesFilter) Size() int {
filter.RLock()
defer filter.RUnlock()
return len(filter.allocEngines) + len(filter.failEngines)
}
// SetAllocEngine is exported
func (filter *EnginesFilter) SetAllocEngine(engine *Engine) {
filter.Lock()
if engine != nil {
if _, ret := filter.allocEngines[engine.IP]; !ret {
filter.allocEngines[engine.IP] = engine
}
}
filter.Unlock()
}
// SetFailEngine is exported
func (filter *EnginesFilter) SetFailEngine(engine *Engine) {
filter.Lock()
if engine != nil {
if _, ret := filter.failEngines[engine.IP]; !ret {
filter.failEngines[engine.IP] = engine
}
}
filter.Unlock()
}
// AllocEngines is exported
func (filter *EnginesFilter) AllocEngines() []*Engine {
filter.RLock()
defer filter.RUnlock()
engines := []*Engine{}
for _, engine := range filter.allocEngines {
engines = append(engines, engine)
}
return engines
}
// FailEngines is exported
func (filter *EnginesFilter) FailEngines() []*Engine {
filter.RLock()
defer filter.RUnlock()
engines := []*Engine{}
for _, engine := range filter.failEngines {
engines = append(engines, engine)
}
return engines
}
// Filter is exported
func (filter *EnginesFilter) Filter(engines []*Engine) []*Engine {
if filter.Size() == 0 {
return engines
}
filter.RLock()
filterEngines := make(map[string]*Engine)
for _, engine := range filter.allocEngines {
filterEngines[engine.IP] = engine
}
for _, engine := range filter.failEngines {
filterEngines[engine.IP] = engine
}
out := []*Engine{}
for _, engine := range engines {
if _, ret := filterEngines[engine.IP]; !ret {
out = append(out, engine)
}
}
filter.RUnlock()
return out
}
Go
1
https://gitee.com/humpbacks/humpback-center.git
git@gitee.com:humpbacks/humpback-center.git
humpbacks
humpback-center
humpback-center
b392570bc023

搜索帮助