From 07383edd47d67f66a41f250d3df4ff83e3e7be12 Mon Sep 17 00:00:00 2001 From: Victor Vieux Date: Tue, 18 Nov 2014 23:04:11 +0000 Subject: [PATCH] improve locks --- .gitignore | 1 + cluster/node.go | 5 +++-- scheduler/scheduler.go | 6 +++--- 3 files changed, 7 insertions(+), 5 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..acf599143a --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +swarm \ No newline at end of file diff --git a/cluster/node.go b/cluster/node.go index b1c2a44cf2..bfe25974d3 100644 --- a/cluster/node.go +++ b/cluster/node.go @@ -113,6 +113,9 @@ func (n *Node) updateContainers() error { return err } + n.Lock() + defer n.Unlock() + merged := make(map[string]*Container) for _, c := range containers { if current, exists := n.containers[c.Id]; exists { @@ -136,9 +139,7 @@ func (n *Node) updateContainers() error { } } - n.Lock() n.containers = merged - n.Unlock() log.Debugf("[%s] Updated state", n.ID) return nil diff --git a/scheduler/scheduler.go b/scheduler/scheduler.go index 471112a02e..744b870ea6 100644 --- a/scheduler/scheduler.go +++ b/scheduler/scheduler.go @@ -43,13 +43,13 @@ func (s *Scheduler) selectNodeForContainer(config *dockerclient.ContainerConfig) // Schedule a brand new container into the cluster. func (s *Scheduler) CreateContainer(config *dockerclient.ContainerConfig, name string) (*cluster.Container, error) { - s.Lock() - defer s.Unlock() - if config.Memory == 0 || config.CpuShares == 0 { return nil, fmt.Errorf("Creating containers in clustering mode requires resource constraints (-c and -m) to be set") } + s.Lock() + defer s.Unlock() + node, err := s.selectNodeForContainer(config) if err != nil { return nil, err