From 9afb7d324b037318308e1b0e16e58632aef82cae Mon Sep 17 00:00:00 2001 From: Xian Chaobo Date: Thu, 17 Sep 2015 05:18:42 -0400 Subject: [PATCH 1/2] fix connect event Signed-off-by: Xian Chaobo --- cluster/swarm/cluster.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cluster/swarm/cluster.go b/cluster/swarm/cluster.go index a8c60e29cd..1184c54acd 100644 --- a/cluster/swarm/cluster.go +++ b/cluster/swarm/cluster.go @@ -161,9 +161,13 @@ func (c *Cluster) addEngine(addr string) bool { return false } + engine := cluster.NewEngine(addr, c.overcommitRatio) + if err := engine.RegisterEventHandler(c); err != nil { + log.Error(err) + } + // Attempt a connection to the engine. Since this is slow, don't get a hold // of the lock yet. - engine := cluster.NewEngine(addr, c.overcommitRatio) if err := engine.Connect(c.TLSConfig); err != nil { log.Error(err) return false @@ -186,10 +190,6 @@ func (c *Cluster) addEngine(addr string) bool { // Finally register the engine. c.engines[engine.ID] = engine - if err := engine.RegisterEventHandler(c); err != nil { - log.Error(err) - } - log.Infof("Registered Engine %s at %s", engine.Name, addr) return true } From 8fa6420e11a1446f1bc5af3e1fa1bdef5f5d9b99 Mon Sep 17 00:00:00 2001 From: Xian Chaobo Date: Fri, 18 Sep 2015 05:13:52 -0400 Subject: [PATCH 2/2] add integration test for connect/disconnect events Signed-off-by: Xian Chaobo --- test/integration/discovery/etcd.bats | 34 ++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/test/integration/discovery/etcd.bats b/test/integration/discovery/etcd.bats index 5e585b854b..d5edf9c9ad 100644 --- a/test/integration/discovery/etcd.bats +++ b/test/integration/discovery/etcd.bats @@ -115,3 +115,37 @@ function teardown() { retry 5 1 discovery_check_swarm_list "$DISCOVERY" retry 5 1 discovery_check_swarm_info } + +@test "etcd discovery: check engine connect/disconnect events" { + # Start the store + start_store + + # Start a manager + swarm_manage "$DISCOVERY" + + # Start events, report real time events to $log_file + local log_file=$(mktemp) + docker_swarm events > "$log_file" & + local events_pid="$!" + + # Start 2 engines and make them join the cluster. + start_docker 2 + swarm_join "$DISCOVERY" + retry 5 1 discovery_check_swarm_list "$DISCOVERY" + + # Check connect events + retry 5 1 grep -q "engine_connect" "$log_file" + + # Removes all the swarm agents + swarm_join_cleanup + + # Check if previously registered engines are all gone + retry 15 1 discovery_check_swarm_info 0 + + # Check disconnect events + retry 5 1 grep -q "engine_disconnect" "$log_file" + + # Finally, clean up `docker events` and remove the log file + kill "$events_pid" + rm -f "$log_file" +}