implement a proper zookeeper watcher

Signed-off-by: Chanwit Kaewkasi <chanwit@gmail.com>
This commit is contained in:
Chanwit Kaewkasi 2015-01-07 12:31:19 +07:00
parent 5d5d7bf430
commit f530d0886f
1 changed files with 17 additions and 6 deletions

View File

@ -65,13 +65,24 @@ func (s *ZkDiscoveryService) Fetch() ([]*discovery.Node, error) {
}
func (s *ZkDiscoveryService) Watch(callback discovery.WatchCallback) {
for _ = range time.Tick(time.Duration(s.heartbeat) * time.Second) {
log.Debugf("[ZK] Watch triggered")
nodes, err := s.Fetch()
if err == nil {
callback(nodes)
}
_, _, eventChan, err := s.conn.ChildrenW(s.path)
if err != nil {
log.Debugf("[ZK] Watch aborted")
return
}
for e := range eventChan {
if e.Type == zk.EventNodeChildrenChanged {
log.Debugf("[ZK] Watch triggered")
nodes, err := s.Fetch()
if err == nil {
callback(nodes)
}
}
}
}
func (s *ZkDiscoveryService) Register(addr string) error {