From 4d4b82e63f381ffa94abd675f5f0c27cf7f8411e Mon Sep 17 00:00:00 2001 From: Kubernetes Prow Robot Date: Wed, 8 Nov 2023 18:05:20 +0100 Subject: [PATCH] Merge pull request #16081 from sl1pm4t/fix-panic fix: concurrent map write panic --- upup/pkg/fi/cloudup/gce/gce_cloud.go | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/upup/pkg/fi/cloudup/gce/gce_cloud.go b/upup/pkg/fi/cloudup/gce/gce_cloud.go index 348f72cdbeb12..3ff5b0316fcee 100644 --- a/upup/pkg/fi/cloudup/gce/gce_cloud.go +++ b/upup/pkg/fi/cloudup/gce/gce_cloud.go @@ -23,6 +23,7 @@ import ( "os" "os/exec" "strings" + "sync" "golang.org/x/oauth2/google" "google.golang.org/api/cloudresourcemanager/v1" @@ -86,6 +87,7 @@ func (c *gceCloudImplementation) ProviderID() kops.CloudProviderID { } var gceCloudInstances map[string]GCECloud = make(map[string]GCECloud) +var gceCloudInstancesMapMutex = sync.RWMutex{} // DefaultProject returns the current project configured in the gcloud SDK, ("", nil) if no project was set func DefaultProject() (string, error) { @@ -119,7 +121,9 @@ func DefaultProject() (string, error) { } func NewGCECloud(region string, project string, labels map[string]string) (GCECloud, error) { + gceCloudInstancesMapMutex.RLock() i := gceCloudInstances[region+"::"+project] + gceCloudInstancesMapMutex.RUnlock() if i != nil { return i.(gceCloudInternal).WithLabels(labels), nil } @@ -179,6 +183,8 @@ func NewGCECloud(region string, project string, labels map[string]string) (GCECl } func CacheGCECloudInstance(region string, project string, c GCECloud) { + gceCloudInstancesMapMutex.Lock() + defer gceCloudInstancesMapMutex.Unlock() gceCloudInstances[region+"::"+project] = c }