From 5492f4ab825a1fd972714829f1457042ad48ca67 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Sat, 6 Feb 2016 11:49:56 -0800 Subject: [PATCH] remove refresh networks Signed-off-by: Victor Vieux --- cluster/engine.go | 26 +++++++++++++++++++++++--- cluster/swarm/cluster.go | 25 +++++++++++-------------- 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/cluster/engine.go b/cluster/engine.go index c49be1f08a..c5e63ccbfa 100644 --- a/cluster/engine.go +++ b/cluster/engine.go @@ -427,12 +427,32 @@ func (e *Engine) RemoveImage(image *Image, name string, force bool) ([]*dockercl } -// RemoveNetwork deletes a network from the engine. +// RemoveNetwork removes a network from the engine. func (e *Engine) RemoveNetwork(network *Network) error { err := e.client.RemoveNetwork(network.ID) e.CheckConnectionErr(err) - e.RefreshNetworks() - return err + if err != nil { + return err + } + + // Remove the container from the state. Eventually, the state refresh loop + // will rewrite this. + e.DeleteNetwork(network) + return nil +} + +// DeleteNetwork deletes a network from the internal engine state. +func (e *Engine) DeleteNetwork(network *Network) { + e.Lock() + delete(e.networks, network.ID) + e.Unlock() +} + +// AddNetwork adds a network to the internal engine state. +func (e *Engine) AddNetwork(network *Network) { + e.Lock() + e.networks[network.ID] = network + e.Unlock() } // RemoveVolume deletes a volume from the engine. diff --git a/cluster/swarm/cluster.go b/cluster/swarm/cluster.go index 51d78543dc..d9b882f3b8 100644 --- a/cluster/swarm/cluster.go +++ b/cluster/swarm/cluster.go @@ -216,7 +216,11 @@ func (c *Cluster) RemoveContainer(container *cluster.Container, force, volumes b // RemoveNetwork removes a network from the cluster func (c *Cluster) RemoveNetwork(network *cluster.Network) error { err := network.Engine.RemoveNetwork(network) - c.refreshNetworks() + if err == nil { + for _, engine := range c.engines { + engine.DeleteNetwork(network) + } + } return err } @@ -434,18 +438,6 @@ func (c *Cluster) RemoveImages(name string, force bool) ([]*dockerclient.ImageDe return out, err } -func (c *Cluster) refreshNetworks() { - var wg sync.WaitGroup - for _, e := range c.engines { - wg.Add(1) - go func(e *cluster.Engine) { - e.RefreshNetworks() - wg.Done() - }(e) - } - wg.Wait() -} - func (c *Cluster) refreshVolumes() { var wg sync.WaitGroup for _, e := range c.engines { @@ -477,7 +469,12 @@ func (c *Cluster) CreateNetwork(request *dockerclient.NetworkCreate) (response * } if nodes != nil { resp, err := c.engines[nodes[0].ID].CreateNetwork(request) - c.refreshNetworks() + if err == nil { + network := c.engines[nodes[0].ID].Networks().Get(resp.ID) + for _, engine := range c.engines { + engine.AddNetwork(network) + } + } return resp, err } return nil, nil