From c690ab8cd0b7d669df3895ed2c8452fdfc80da3c Mon Sep 17 00:00:00 2001 From: Pengfei Ni Date: Wed, 27 Dec 2017 13:40:33 +0800 Subject: [PATCH 1/2] Fix typo of compute.VirtualMachinesClient --- pkg/cloudprovider/providers/azure/azure.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/cloudprovider/providers/azure/azure.go b/pkg/cloudprovider/providers/azure/azure.go index 844651d6fc3..eab6b95f047 100644 --- a/pkg/cloudprovider/providers/azure/azure.go +++ b/pkg/cloudprovider/providers/azure/azure.go @@ -132,7 +132,7 @@ type Config struct { MaximumLoadBalancerRuleCount int `json:"maximumLoadBalancerRuleCount"` } -// VirtualMachinesClient defines needed functions for azure network.VirtualMachinesClient +// VirtualMachinesClient defines needed functions for azure compute.VirtualMachinesClient type VirtualMachinesClient interface { CreateOrUpdate(resourceGroupName string, VMName string, parameters compute.VirtualMachine, cancel <-chan struct{}) (<-chan compute.VirtualMachine, <-chan error) Get(resourceGroupName string, VMName string, expand compute.InstanceViewTypes) (result compute.VirtualMachine, err error) From 80d89e022158d16d40f48e3f1e827581ef1af5a6 Mon Sep 17 00:00:00 2001 From: Pengfei Ni Date: Wed, 27 Dec 2017 13:50:49 +0800 Subject: [PATCH 2/2] Reduce VirtualMachineScaleSetsClient#List calls --- .../providers/azure/azure_util_vmss.go | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/pkg/cloudprovider/providers/azure/azure_util_vmss.go b/pkg/cloudprovider/providers/azure/azure_util_vmss.go index 71a881c9fef..01a4d928767 100644 --- a/pkg/cloudprovider/providers/azure/azure_util_vmss.go +++ b/pkg/cloudprovider/providers/azure/azure_util_vmss.go @@ -76,15 +76,17 @@ type scaleSet struct { cacheMutex sync.Mutex // A local cache of scale sets. The key is scale set name and the value is a // list of virtual machines belonging to the scale set. - cache map[string][]scaleSetVMInfo + cache map[string][]scaleSetVMInfo + availabilitySetNodesCache sets.String } // newScaleSet creates a new scaleSet. func newScaleSet(az *Cloud) VMSet { ss := &scaleSet{ - Cloud: az, - availabilitySet: newAvailabilitySet(az), - cache: make(map[string][]scaleSetVMInfo), + Cloud: az, + availabilitySet: newAvailabilitySet(az), + availabilitySetNodesCache: sets.NewString(), + cache: make(map[string][]scaleSetVMInfo), } go wait.Until(func() { @@ -179,6 +181,11 @@ func (ss *scaleSet) getCachedVirtualMachine(nodeName string) (scaleSetVMInfo, er return vm, nil } + // Known node not managed by scale sets. + if ss.availabilitySetNodesCache.Has(nodeName) { + return scaleSetVMInfo{}, cloudprovider.InstanceNotFound + } + // Update cache and try again. if err = ss.updateCache(); err != nil { return scaleSetVMInfo{}, err @@ -188,6 +195,8 @@ func (ss *scaleSet) getCachedVirtualMachine(nodeName string) (scaleSetVMInfo, er return vm, nil } + // Node still not found, assuming it is not managed by scale sets. + ss.availabilitySetNodesCache.Insert(nodeName) return scaleSetVMInfo{}, cloudprovider.InstanceNotFound }