From 1b8166c7a5a041e4de8464749f10c25426eba392 Mon Sep 17 00:00:00 2001 From: Chanwit Kaewkasi Date: Sat, 10 Jan 2015 00:52:49 +0700 Subject: [PATCH 1/2] callback 1 time before looping over the zookeeper's event channel Signed-off-by: Chanwit Kaewkasi --- discovery/zookeeper/zookeeper.go | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/discovery/zookeeper/zookeeper.go b/discovery/zookeeper/zookeeper.go index 67fda8d6d1..d133d9c227 100644 --- a/discovery/zookeeper/zookeeper.go +++ b/discovery/zookeeper/zookeeper.go @@ -56,21 +56,30 @@ func (s *ZkDiscoveryService) Fetch() ([]*discovery.Node, error) { return nil, err } - var nodes []*discovery.Node + return s.createNodes(addrs), nil +} + +func (s *ZkDiscoveryService) createNodes(addrs []string) (nodes []*discovery.Node) { + nodes = make([]*discovery.Node, 0) + if addrs == nil { + return + } + for _, addr := range addrs { nodes = append(nodes, discovery.NewNode(addr)) } - - return nodes, nil + return } func (s *ZkDiscoveryService) Watch(callback discovery.WatchCallback) { - _, _, eventChan, err := s.conn.ChildrenW(s.path) + addrs, _, eventChan, err := s.conn.ChildrenW(s.path) if err != nil { log.Debugf("[ZK] Watch aborted") return } + nodes := s.createNodes(addrs) + callback(nodes) for e := range eventChan { if e.Type == zk.EventNodeChildrenChanged { From 03f4650ac7467b5003a6070de7b9eb498af3fbf6 Mon Sep 17 00:00:00 2001 From: Chanwit Kaewkasi Date: Sat, 10 Jan 2015 00:53:16 +0700 Subject: [PATCH 2/2] add unit test for the cleanup Signed-off-by: Chanwit Kaewkasi --- discovery/zookeeper/zookeeper_test.go | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/discovery/zookeeper/zookeeper_test.go b/discovery/zookeeper/zookeeper_test.go index 5e5a0b3258..dd84b19a2b 100644 --- a/discovery/zookeeper/zookeeper_test.go +++ b/discovery/zookeeper/zookeeper_test.go @@ -3,14 +3,23 @@ package zookeeper import ( "testing" + "github.com/docker/swarm/discovery" "github.com/stretchr/testify/assert" ) func TestInitialize(t *testing.T) { - discovery := &ZkDiscoveryService{} - assert.Error(t, discovery.Initialize("127.0.0.1/path", 0)) - assert.Equal(t, discovery.path, "/path") + service := &ZkDiscoveryService{} + assert.Error(t, service.Initialize("127.0.0.1/path", 0)) + assert.Equal(t, service.path, "/path") - assert.Error(t, discovery.Initialize("127.0.0.1,127.0.0.2,127.0.0.3/path", 0)) - assert.Equal(t, discovery.path, "/path") + assert.Error(t, service.Initialize("127.0.0.1,127.0.0.2,127.0.0.3/path", 0)) + assert.Equal(t, service.path, "/path") +} + +func TestCreateNodes(t *testing.T) { + service := &ZkDiscoveryService{} + assert.Equal(t, service.createNodes(nil), []*discovery.Node{}) + nodes := service.createNodes([]string{"127.0.0.1", "127.0.0.2"}) + assert.Equal(t, nodes[0].String(), "http://127.0.0.1") + assert.Equal(t, nodes[1].String(), "http://127.0.0.2") }