From 292d33e33c12161c687257fc470298f49680ba72 Mon Sep 17 00:00:00 2001 From: CJ Cullen Date: Tue, 5 May 2015 14:28:36 -0700 Subject: [PATCH] Add synchronization around nodeMap --- pkg/cloudprovider/gce/gce.go | 1 + pkg/cloudprovider/nodecontroller/nodecontroller.go | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/pkg/cloudprovider/gce/gce.go b/pkg/cloudprovider/gce/gce.go index f6057f3902c..14e60ca453c 100644 --- a/pkg/cloudprovider/gce/gce.go +++ b/pkg/cloudprovider/gce/gce.go @@ -44,6 +44,7 @@ import ( ) var ErrMetadataConflict = errors.New("Metadata already set at the same key") + const podCIDRMetadataKey string = "node-ip-range" // GCECloud is an implementation of Interface, TCPLoadBalancer and Instances for Google Compute Engine. diff --git a/pkg/cloudprovider/nodecontroller/nodecontroller.go b/pkg/cloudprovider/nodecontroller/nodecontroller.go index 1af4c958df5..1b7f444e64d 100644 --- a/pkg/cloudprovider/nodecontroller/nodecontroller.go +++ b/pkg/cloudprovider/nodecontroller/nodecontroller.go @@ -304,9 +304,12 @@ func (nc *NodeController) syncCloudNodes() error { return err } nodeMap := make(map[string]*api.Node) + nodeMapLock := sync.Mutex{} for i := range nodes.Items { node := nodes.Items[i] + nodeMapLock.Lock() nodeMap[node.Name] = &node + nodeMapLock.Unlock() } if nc.allocateNodeCIDRs { nc.reconcilePodCIDRs(matches, nodes) @@ -318,7 +321,10 @@ func (nc *NodeController) syncCloudNodes() error { for i := range matches.Items { go func(node *api.Node) { defer wg.Done() - if _, ok := nodeMap[node.Name]; !ok { + nodeMapLock.Lock() + _, ok := nodeMap[node.Name] + nodeMapLock.Unlock() + if !ok { glog.V(3).Infof("Querying addresses for new node: %s", node.Name) nodeList := &api.NodeList{} nodeList.Items = []api.Node{*node} @@ -337,7 +343,9 @@ func (nc *NodeController) syncCloudNodes() error { glog.Errorf("Create node %s error: %v", node.Name, err) } } + nodeMapLock.Lock() delete(nodeMap, node.Name) + nodeMapLock.Unlock() }(&matches.Items[i]) } wg.Wait()