WatchCallback

Signed-off-by: Victor Vieux <vieux@docker.com>
This commit is contained in:
Victor Vieux 2014-12-13 01:04:16 +00:00
parent f2ca549f46
commit e2b6f00c23
5 changed files with 11 additions and 8 deletions

View File

@ -87,7 +87,7 @@ simply implements this interface:
type DiscoveryService interface {
Initialize(string, int) error
Fetch() ([]string, error)
Watch(func([]*Node))
Watch(WatchCallback)
Register(string) error
}
```

View File

@ -24,10 +24,12 @@ func (n Node) String() string {
return n.url
}
type WatchCallback func(nodes []*Node)
type DiscoveryService interface {
Initialize(string, int) error
Fetch() ([]*Node, error)
Watch(func(nodes []*Node))
Watch(WatchCallback)
Register(string) error
}

View File

@ -63,14 +63,14 @@ func (s *EtcdDiscoveryService) Fetch() ([]*discovery.Node, error) {
return nodes, nil
}
func (s *EtcdDiscoveryService) Watch(updateNodes func(nodes []*discovery.Node)) {
func (s *EtcdDiscoveryService) Watch(callback discovery.WatchCallback) {
watchChan := make(chan *etcd.Response)
go s.client.Watch(s.path, 0, true, watchChan, nil)
for _ = range watchChan {
log.Debugf("[ETCD] Watch triggered")
nodes, err := s.Fetch()
if err == nil {
updateNodes(nodes)
callback(nodes)
}
}
}

View File

@ -5,6 +5,7 @@ import (
"io/ioutil"
"strings"
"time"
"github.com/docker/swarm/discovery"
)
@ -43,11 +44,11 @@ func (s *FileDiscoveryService) Fetch() ([]*discovery.Node, error) {
return nodes, nil
}
func (s *FileDiscoveryService) Watch(updateNodes func(nodes []*discovery.Node)) {
func (s *FileDiscoveryService) Watch(callback discovery.WatchCallback) {
for _ = range time.Tick(time.Duration(s.heartbeat) * time.Second) {
nodes, err := s.Fetch()
if err == nil {
updateNodes(nodes)
callback(nodes)
}
}
}

View File

@ -66,11 +66,11 @@ func (s *TokenDiscoveryService) Fetch() ([]*discovery.Node, error) {
return nodes, nil
}
func (s *TokenDiscoveryService) Watch(updateNodes func(nodes []*discovery.Node)) {
func (s *TokenDiscoveryService) Watch(callback discovery.WatchCallback) {
for _ = range time.Tick(time.Duration(s.heartbeat) * time.Second) {
nodes, err := s.Fetch()
if err == nil {
updateNodes(nodes)
callback(nodes)
}
}
}