diff --git a/cluster/node.go b/cluster/node.go index 201de9688c..fde982fe8f 100644 --- a/cluster/node.go +++ b/cluster/node.go @@ -178,6 +178,11 @@ func (n *Node) refreshContainer(ID string) error { } func (n *Node) ForceRefreshContainer(c dockerclient.Container) error { + return n.inspectContainer(c, n.containers, true) +} + +func (n *Node) inspectContainer(c dockerclient.Container, containers map[string]*Container, lock bool) error { + container := &Container{} container.Container = c container.node = n @@ -191,9 +196,11 @@ func (n *Node) ForceRefreshContainer(c dockerclient.Container) error { // real CpuShares -> nb of CPUs container.Info.Config.CpuShares = container.Info.Config.CpuShares / 100.0 * n.Cpus - n.Lock() - n.containers[container.Id] = container - n.Unlock() + if lock { + n.Lock() + defer n.Unlock() + } + containers[container.Id] = container return nil } @@ -205,20 +212,9 @@ func (n *Node) updateContainer(c dockerclient.Container, containers map[string]* containers[current.Id] = current } else { // This is a brand new container. - container := &Container{} - container.Container = c - container.node = n - - info, err := n.client.InspectContainer(c.Id) - if err != nil { - return containers, err + if err := n.inspectContainer(c, containers, false); err != nil { + return nil, err } - container.Info = *info - - // real CpuShares -> nb of CPUs - container.Info.Config.CpuShares = container.Info.Config.CpuShares / 100.0 * n.Cpus - - containers[container.Id] = container } return containers, nil }