mirror of
https://github.com/duanhf2012/origin.git
synced 2026-05-21 09:07:30 +08:00
优化origin默认模式的服务发现
This commit is contained in:
71
cluster/nodettl.go
Normal file
71
cluster/nodettl.go
Normal file
@@ -0,0 +1,71 @@
|
||||
package cluster
|
||||
|
||||
import (
|
||||
"time"
|
||||
"container/list"
|
||||
)
|
||||
|
||||
type nodeTTL struct {
|
||||
nodeId string
|
||||
refreshTime time.Time
|
||||
}
|
||||
|
||||
type nodeSetTTL struct {
|
||||
l *list.List
|
||||
mapElement map[string]*list.Element
|
||||
ttl time.Duration
|
||||
}
|
||||
|
||||
func (ns *nodeSetTTL) init(ttl time.Duration) {
|
||||
ns.ttl = ttl
|
||||
ns.mapElement = make(map[string]*list.Element,32)
|
||||
ns.l = list.New()
|
||||
}
|
||||
|
||||
func (ns *nodeSetTTL) removeNode(nodeId string) {
|
||||
ele,ok:=ns.mapElement[nodeId]
|
||||
if ok == false {
|
||||
return
|
||||
}
|
||||
|
||||
ns.l.Remove(ele)
|
||||
delete(ns.mapElement,nodeId)
|
||||
}
|
||||
|
||||
func (ns *nodeSetTTL) addAndRefreshNode(nodeId string){
|
||||
ele,ok:=ns.mapElement[nodeId]
|
||||
if ok == false {
|
||||
ele = ns.l.PushBack(nodeId)
|
||||
ele.Value = &nodeTTL{nodeId,time.Now()}
|
||||
ns.mapElement[nodeId] = ele
|
||||
return
|
||||
}
|
||||
|
||||
ele.Value.(*nodeTTL).refreshTime = time.Now()
|
||||
ns.l.MoveToBack(ele)
|
||||
}
|
||||
|
||||
func (ns *nodeSetTTL) checkTTL(cb func(nodeIdList []string)){
|
||||
nodeIdList := []string{}
|
||||
for{
|
||||
f := ns.l.Front()
|
||||
if f == nil {
|
||||
break
|
||||
}
|
||||
|
||||
nt := f.Value.(*nodeTTL)
|
||||
if time.Now().Sub(nt.refreshTime) > ns.ttl {
|
||||
nodeIdList = append(nodeIdList,nt.nodeId)
|
||||
}else{
|
||||
break
|
||||
}
|
||||
|
||||
//删除结点
|
||||
ns.l.Remove(f)
|
||||
delete(ns.mapElement,nt.nodeId)
|
||||
}
|
||||
|
||||
if len(nodeIdList) >0 {
|
||||
cb(nodeIdList)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user