From ac931aa1e03c14ad7b3044812c2fd404528c9c31 Mon Sep 17 00:00:00 2001 From: Jack Francis Date: Tue, 6 Jun 2017 11:19:29 -0700 Subject: [PATCH] rate limiting on all azure sdk GET requests --- pkg/cloudprovider/providers/azure/azure.go | 2 +- pkg/cloudprovider/providers/azure/azure_instances.go | 2 ++ pkg/cloudprovider/providers/azure/azure_loadbalancer.go | 4 ++++ pkg/cloudprovider/providers/azure/azure_storageaccount.go | 2 ++ pkg/cloudprovider/providers/azure/azure_util.go | 1 + pkg/cloudprovider/providers/azure/azure_wrap.go | 5 +++++ 6 files changed, 15 insertions(+), 1 deletion(-) diff --git a/pkg/cloudprovider/providers/azure/azure.go b/pkg/cloudprovider/providers/azure/azure.go index eb8a92c16ef..8532e0a3f5b 100644 --- a/pkg/cloudprovider/providers/azure/azure.go +++ b/pkg/cloudprovider/providers/azure/azure.go @@ -218,7 +218,7 @@ func NewCloud(configReader io.Reader) (cloudprovider.Interface, error) { az.operationPollRateLimiter = flowcontrol.NewTokenBucketRateLimiter( float32(az.CloudProviderRateLimitQPS), az.CloudProviderRateLimitBucket) - glog.V(2).Infof("Azure cloudprovider using rate limits: QPS=%d, bucket=%d", + glog.V(2).Infof("Azure cloudprovider using rate limit config: QPS=%d, bucket=%d", az.CloudProviderRateLimitQPS, az.CloudProviderRateLimitBucket) } else { diff --git a/pkg/cloudprovider/providers/azure/azure_instances.go b/pkg/cloudprovider/providers/azure/azure_instances.go index c4c40884208..13ec02170f9 100644 --- a/pkg/cloudprovider/providers/azure/azure_instances.go +++ b/pkg/cloudprovider/providers/azure/azure_instances.go @@ -116,6 +116,7 @@ func (az *Cloud) CurrentNodeName(hostname string) (types.NodeName, error) { func (az *Cloud) listAllNodesInResourceGroup() ([]compute.VirtualMachine, error) { allNodes := []compute.VirtualMachine{} + az.operationPollRateLimiter.Accept() result, err := az.VirtualMachinesClient.List(az.ResourceGroup) if err != nil { glog.Errorf("error: az.listAllNodesInResourceGroup(), az.VirtualMachinesClient.List(%s), err=%v", az.ResourceGroup, err) @@ -127,6 +128,7 @@ func (az *Cloud) listAllNodesInResourceGroup() ([]compute.VirtualMachine, error) for morePages { allNodes = append(allNodes, *result.Value...) + az.operationPollRateLimiter.Accept() result, err = az.VirtualMachinesClient.ListAllNextResults(result) if err != nil { glog.Errorf("error: az.listAllNodesInResourceGroup(), az.VirtualMachinesClient.ListAllNextResults(%s), err=%v", result, err) diff --git a/pkg/cloudprovider/providers/azure/azure_loadbalancer.go b/pkg/cloudprovider/providers/azure/azure_loadbalancer.go index 7e9f151e004..d7da541ec9c 100644 --- a/pkg/cloudprovider/providers/azure/azure_loadbalancer.go +++ b/pkg/cloudprovider/providers/azure/azure_loadbalancer.go @@ -92,6 +92,7 @@ func (az *Cloud) getPublicIPName(clusterName string, service *v1.Service) (strin return fmt.Sprintf("%s-%s", clusterName, cloudprovider.GetLoadBalancerName(service)), nil } + az.operationPollRateLimiter.Accept() list, err := az.PublicIPAddressesClient.List(az.ResourceGroup) if err != nil { return "", err @@ -135,6 +136,7 @@ func (az *Cloud) EnsureLoadBalancer(clusterName string, service *v1.Service, nod serviceName := getServiceName(service) glog.V(5).Infof("ensure(%s): START clusterName=%q lbName=%q", serviceName, clusterName, lbName) + az.operationPollRateLimiter.Accept() sg, err := az.SecurityGroupsClient.Get(az.ResourceGroup, az.SecurityGroupName, "") if err != nil { return nil, err @@ -445,6 +447,7 @@ func (az *Cloud) ensurePublicIPExists(serviceName, pipName string) (*network.Pub return nil, err } + az.operationPollRateLimiter.Accept() pip, err = az.PublicIPAddressesClient.Get(az.ResourceGroup, *pip.Name, "") if err != nil { return nil, err @@ -875,6 +878,7 @@ func (az *Cloud) ensureHostInPool(serviceName string, nodeName types.NodeName, b } } + az.operationPollRateLimiter.Accept() nic, err := az.InterfacesClient.Get(az.ResourceGroup, nicName, "") if err != nil { return err diff --git a/pkg/cloudprovider/providers/azure/azure_storageaccount.go b/pkg/cloudprovider/providers/azure/azure_storageaccount.go index 4d33fb21e66..fa436eedf05 100644 --- a/pkg/cloudprovider/providers/azure/azure_storageaccount.go +++ b/pkg/cloudprovider/providers/azure/azure_storageaccount.go @@ -27,6 +27,7 @@ type accountWithLocation struct { // getStorageAccounts gets the storage accounts' name, type, location in a resource group func (az *Cloud) getStorageAccounts() ([]accountWithLocation, error) { + az.operationPollRateLimiter.Accept() result, err := az.StorageAccountClient.ListByResourceGroup(az.ResourceGroup) if err != nil { return nil, err @@ -56,6 +57,7 @@ func (az *Cloud) getStorageAccounts() ([]accountWithLocation, error) { // getStorageAccesskey gets the storage account access key func (az *Cloud) getStorageAccesskey(account string) (string, error) { + az.operationPollRateLimiter.Accept() result, err := az.StorageAccountClient.ListKeys(az.ResourceGroup, account) if err != nil { return "", err diff --git a/pkg/cloudprovider/providers/azure/azure_util.go b/pkg/cloudprovider/providers/azure/azure_util.go index bebea9a64ab..9ddeaca8ffa 100644 --- a/pkg/cloudprovider/providers/azure/azure_util.go +++ b/pkg/cloudprovider/providers/azure/azure_util.go @@ -259,6 +259,7 @@ func (az *Cloud) getIPForMachine(nodeName types.NodeName) (string, error) { return "", err } + az.operationPollRateLimiter.Accept() nic, err := az.InterfacesClient.Get(az.ResourceGroup, nicName, "") if err != nil { glog.Errorf("error: az.getIPForMachine(%s), az.InterfacesClient.Get(%s, %s, %s), err=%v", nodeName, az.ResourceGroup, nicName, "", err) diff --git a/pkg/cloudprovider/providers/azure/azure_wrap.go b/pkg/cloudprovider/providers/azure/azure_wrap.go index 2eb5f6d9e3c..613e59a439d 100644 --- a/pkg/cloudprovider/providers/azure/azure_wrap.go +++ b/pkg/cloudprovider/providers/azure/azure_wrap.go @@ -61,6 +61,7 @@ func (az *Cloud) getVirtualMachine(nodeName types.NodeName) (vm compute.VirtualM func (az *Cloud) getRouteTable() (routeTable network.RouteTable, exists bool, err error) { var realErr error + az.operationPollRateLimiter.Accept() routeTable, err = az.RouteTablesClient.Get(az.ResourceGroup, az.RouteTableName, "") exists, realErr = checkResourceExistsFromError(err) @@ -78,6 +79,7 @@ func (az *Cloud) getRouteTable() (routeTable network.RouteTable, exists bool, er func (az *Cloud) getSecurityGroup() (sg network.SecurityGroup, exists bool, err error) { var realErr error + az.operationPollRateLimiter.Accept() sg, err = az.SecurityGroupsClient.Get(az.ResourceGroup, az.SecurityGroupName, "") exists, realErr = checkResourceExistsFromError(err) @@ -95,6 +97,7 @@ func (az *Cloud) getSecurityGroup() (sg network.SecurityGroup, exists bool, err func (az *Cloud) getAzureLoadBalancer(name string) (lb network.LoadBalancer, exists bool, err error) { var realErr error + az.operationPollRateLimiter.Accept() lb, err = az.LoadBalancerClient.Get(az.ResourceGroup, name, "") exists, realErr = checkResourceExistsFromError(err) @@ -112,6 +115,7 @@ func (az *Cloud) getAzureLoadBalancer(name string) (lb network.LoadBalancer, exi func (az *Cloud) getPublicIPAddress(name string) (pip network.PublicIPAddress, exists bool, err error) { var realErr error + az.operationPollRateLimiter.Accept() pip, err = az.PublicIPAddressesClient.Get(az.ResourceGroup, name, "") exists, realErr = checkResourceExistsFromError(err) @@ -129,6 +133,7 @@ func (az *Cloud) getPublicIPAddress(name string) (pip network.PublicIPAddress, e func (az *Cloud) getSubnet(virtualNetworkName string, subnetName string) (subnet network.Subnet, exists bool, err error) { var realErr error + az.operationPollRateLimiter.Accept() subnet, err = az.SubnetsClient.Get(az.ResourceGroup, virtualNetworkName, subnetName, "") exists, realErr = checkResourceExistsFromError(err)