Azure cloudprovider retry using flowcontrol

An initial attempt at engaging exponential backoff for API error responses.

Uses k8s.io/client-go/util/flowcontrol; implementation inspired by GCE
cloudprovider backoff.
This commit is contained in:
Jack Francis
2017-05-26 14:13:41 -07:00
parent db5c21f328
commit f200f9a1e8
5 changed files with 252 additions and 23 deletions

View File

@@ -64,7 +64,13 @@ func (az *Cloud) AttachDisk(diskName, diskURI string, nodeName types.NodeName, l
},
}
vmName := mapNodeNameToVMName(nodeName)
_, err = az.VirtualMachinesClient.CreateOrUpdate(az.ResourceGroup, vmName, newVM, nil)
resp, err := az.VirtualMachinesClient.CreateOrUpdate(az.ResourceGroup, vmName, newVM, nil)
if shouldRetryAPIRequest(resp, err) {
retryErr := az.CreateOrUpdateVMWithRetry(vmName, newVM)
if retryErr != nil {
return retryErr
}
}
if err != nil {
glog.Errorf("azure attach failed, err: %v", err)
detail := err.Error()
@@ -135,7 +141,13 @@ func (az *Cloud) DetachDiskByName(diskName, diskURI string, nodeName types.NodeN
},
}
vmName := mapNodeNameToVMName(nodeName)
_, err = az.VirtualMachinesClient.CreateOrUpdate(az.ResourceGroup, vmName, newVM, nil)
resp, err := az.VirtualMachinesClient.CreateOrUpdate(az.ResourceGroup, vmName, newVM, nil)
if shouldRetryAPIRequest(resp, err) {
retryErr := az.CreateOrUpdateVMWithRetry(vmName, newVM)
if retryErr != nil {
return retryErr
}
}
if err != nil {
glog.Errorf("azure disk detach failed, err: %v", err)
} else {