diff --git a/discovery/README.md b/discovery/README.md index 39e46774ab..7215c57487 100644 --- a/discovery/README.md +++ b/discovery/README.md @@ -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 } ``` diff --git a/discovery/discovery.go b/discovery/discovery.go index 34c81e833f..84d339a3a3 100644 --- a/discovery/discovery.go +++ b/discovery/discovery.go @@ -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 } diff --git a/discovery/etcd/etcd.go b/discovery/etcd/etcd.go index 35dd594f3d..80f3f87460 100644 --- a/discovery/etcd/etcd.go +++ b/discovery/etcd/etcd.go @@ -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) } } } diff --git a/discovery/file/file.go b/discovery/file/file.go index 2f8da0bb89..39ac7af32b 100644 --- a/discovery/file/file.go +++ b/discovery/file/file.go @@ -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) } } } diff --git a/discovery/token/token.go b/discovery/token/token.go index 7bc9cae1c0..3fb0995413 100644 --- a/discovery/token/token.go +++ b/discovery/token/token.go @@ -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) } } }