Skip to content

Commit 8c53db0

Browse files
committed
add retry for detach azure disk
add more logging info in detach disk
1 parent 4f4695f commit 8c53db0

File tree

3 files changed

+36
-7
lines changed

3 files changed

+36
-7
lines changed

pkg/cloudprovider/providers/azure/azure_backoff.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,6 +511,18 @@ func (az *Cloud) CreateOrUpdateVMWithRetry(resourceGroup, vmName string, newVM c
511511
})
512512
}
513513

514+
// UpdateVmssVMWithRetry invokes az.VirtualMachineScaleSetVMsClient.Update with exponential backoff retry
515+
func (az *Cloud) UpdateVmssVMWithRetry(resourceGroupName string, VMScaleSetName string, instanceID string, parameters compute.VirtualMachineScaleSetVM) error {
516+
return wait.ExponentialBackoff(az.requestBackoff(), func() (bool, error) {
517+
ctx, cancel := getContextWithCancel()
518+
defer cancel()
519+
520+
resp, err := az.VirtualMachineScaleSetVMsClient.Update(ctx, resourceGroupName, VMScaleSetName, instanceID, parameters)
521+
klog.V(10).Infof("VirtualMachinesClient.CreateOrUpdate(%s,%s): end", VMScaleSetName, instanceID)
522+
return az.processHTTPRetryResponse(nil, "", resp, err)
523+
})
524+
}
525+
514526
// isSuccessHTTPResponse determines if the response from an HTTP request suggests success
515527
func isSuccessHTTPResponse(resp *http.Response) bool {
516528
if resp == nil {

pkg/cloudprovider/providers/azure/azure_controller_standard.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -146,12 +146,21 @@ func (as *availabilitySet) DetachDiskByName(diskName, diskURI string, nodeName t
146146
// Invalidate the cache right after updating
147147
defer as.cloud.vmCache.Delete(vmName)
148148

149-
_, err = as.VirtualMachinesClient.CreateOrUpdate(ctx, nodeResourceGroup, vmName, newVM)
149+
resp, err := as.VirtualMachinesClient.CreateOrUpdate(ctx, nodeResourceGroup, vmName, newVM)
150+
if as.CloudProviderBackoff && shouldRetryHTTPRequest(resp, err) {
151+
klog.V(2).Infof("azureDisk - update(%s) backing off: vm(%s) detach disk(%s, %s), err: %v", nodeResourceGroup, vmName, diskName, diskURI, err)
152+
retryErr := as.CreateOrUpdateVMWithRetry(nodeResourceGroup, vmName, newVM)
153+
if retryErr != nil {
154+
err = retryErr
155+
klog.V(2).Infof("azureDisk - update(%s) abort backoff: vm(%s) detach disk(%s, %s), err: %v", nodeResourceGroup, vmName, diskName, diskURI, err)
156+
}
157+
}
150158
if err != nil {
151-
klog.Errorf("azureDisk - detach disk(%s) failed, err: %v", diskName, err)
159+
klog.Errorf("azureDisk - detach disk(%s, %s)) failed, err: %v", diskName, diskURI, err)
152160
} else {
153-
klog.V(2).Infof("azureDisk - detach disk(%s) succeeded", diskName)
161+
klog.V(2).Infof("azureDisk - detach disk(%s, %s) succeeded", diskName, diskURI)
154162
}
163+
155164
return err
156165
}
157166

pkg/cloudprovider/providers/azure/azure_controller_vmss.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,12 +155,20 @@ func (ss *scaleSet) DetachDiskByName(diskName, diskURI string, nodeName types.No
155155
key := buildVmssCacheKey(nodeResourceGroup, ss.makeVmssVMName(ssName, instanceID))
156156
defer ss.vmssVMCache.Delete(key)
157157

158-
klog.V(2).Infof("azureDisk - update(%s): vm(%s) - detach disk(%s)", nodeResourceGroup, nodeName, diskName)
159-
_, err = ss.VirtualMachineScaleSetVMsClient.Update(ctx, nodeResourceGroup, ssName, instanceID, newVM)
158+
klog.V(2).Infof("azureDisk - update(%s): vm(%s) - detach disk(%s, %s)", nodeResourceGroup, nodeName, diskName, diskURI)
159+
resp, err := ss.VirtualMachineScaleSetVMsClient.Update(ctx, nodeResourceGroup, ssName, instanceID, newVM)
160+
if ss.CloudProviderBackoff && shouldRetryHTTPRequest(resp, err) {
161+
klog.V(2).Infof("azureDisk - update(%s) backing off: vm(%s) detach disk(%s, %s), err: %v", nodeResourceGroup, nodeName, diskName, diskURI, err)
162+
retryErr := ss.UpdateVmssVMWithRetry(nodeResourceGroup, ssName, instanceID, newVM)
163+
if retryErr != nil {
164+
err = retryErr
165+
klog.V(2).Infof("azureDisk - update(%s) abort backoff: vm(%s) detach disk(%s, %s), err: %v", nodeResourceGroup, nodeName, diskName, diskURI, err)
166+
}
167+
}
160168
if err != nil {
161-
klog.Errorf("azureDisk - detach disk(%s) from %s failed, err: %v", diskName, nodeName, err)
169+
klog.Errorf("azureDisk - detach disk(%s, %s) from %s failed, err: %v", diskName, diskURI, nodeName, err)
162170
} else {
163-
klog.V(2).Infof("azureDisk - detach disk(%s) succeeded", diskName)
171+
klog.V(2).Infof("azureDisk - detach disk(%s, %s) succeeded", diskName, diskURI)
164172
}
165173

166174
return err

0 commit comments

Comments
 (0)