Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
5376b645
Commit
5376b645
authored
Apr 13, 2019
by
andyzhangx
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
refactor detach azure disk retry operation
parent
3c949c7d
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
45 additions
and
53 deletions
+45
-53
azure_controller_common.go
pkg/cloudprovider/providers/azure/azure_controller_common.go
+21
-3
azure_controller_standard.go
...loudprovider/providers/azure/azure_controller_standard.go
+8
-22
azure_controller_vmss.go
pkg/cloudprovider/providers/azure/azure_controller_vmss.go
+8
-22
azure_fakes.go
pkg/cloudprovider/providers/azure/azure_fakes.go
+2
-2
azure_vmsets.go
pkg/cloudprovider/providers/azure/azure_vmsets.go
+4
-2
attacher.go
pkg/volume/azure_dd/attacher.go
+1
-1
azure_dd.go
pkg/volume/azure_dd/azure_dd.go
+1
-1
No files found.
pkg/cloudprovider/providers/azure/azure_controller_common.go
View file @
5376b645
...
...
@@ -95,14 +95,32 @@ func (c *controllerCommon) AttachDisk(isManagedDisk bool, diskName, diskURI stri
return
vmset
.
AttachDisk
(
isManagedDisk
,
diskName
,
diskURI
,
nodeName
,
lun
,
cachingMode
)
}
// DetachDisk
ByName detaches a vhd
from host. The vhd can be identified by diskName or diskURI.
func
(
c
*
controllerCommon
)
DetachDisk
ByName
(
diskName
,
diskURI
string
,
nodeName
types
.
NodeName
)
error
{
// DetachDisk
detaches a disk
from host. The vhd can be identified by diskName or diskURI.
func
(
c
*
controllerCommon
)
DetachDisk
(
diskName
,
diskURI
string
,
nodeName
types
.
NodeName
)
error
{
vmset
,
err
:=
c
.
getNodeVMSet
(
nodeName
)
if
err
!=
nil
{
return
err
}
return
vmset
.
DetachDiskByName
(
diskName
,
diskURI
,
nodeName
)
resp
,
err
:=
vmset
.
DetachDisk
(
diskName
,
diskURI
,
nodeName
)
if
c
.
cloud
.
CloudProviderBackoff
&&
shouldRetryHTTPRequest
(
resp
,
err
)
{
klog
.
V
(
2
)
.
Infof
(
"azureDisk - update backing off: detach disk(%s, %s), err: %v"
,
diskName
,
diskURI
,
err
)
retryErr
:=
kwait
.
ExponentialBackoff
(
c
.
cloud
.
requestBackoff
(),
func
()
(
bool
,
error
)
{
resp
,
err
:=
vmset
.
DetachDisk
(
diskName
,
diskURI
,
nodeName
)
return
c
.
cloud
.
processHTTPRetryResponse
(
nil
,
""
,
resp
,
err
)
})
if
retryErr
!=
nil
{
err
=
retryErr
klog
.
V
(
2
)
.
Infof
(
"azureDisk - update abort backoff: detach disk(%s, %s), err: %v"
,
diskName
,
diskURI
,
err
)
}
}
if
err
!=
nil
{
klog
.
Errorf
(
"azureDisk - detach disk(%s, %s) failed, err: %v"
,
diskName
,
diskURI
,
err
)
}
else
{
klog
.
V
(
2
)
.
Infof
(
"azureDisk - detach disk(%s, %s) succeeded"
,
diskName
,
diskURI
)
}
return
err
}
// getNodeDataDisks invokes vmSet interfaces to get data disks for the node.
...
...
pkg/cloudprovider/providers/azure/azure_controller_standard.go
View file @
5376b645
...
...
@@ -18,6 +18,7 @@ package azure
import
(
"fmt"
"net/http"
"strings"
"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-10-01/compute"
...
...
@@ -88,7 +89,7 @@ func (as *availabilitySet) AttachDisk(isManagedDisk bool, diskName, diskURI stri
if
strings
.
Contains
(
detail
,
errLeaseFailed
)
||
strings
.
Contains
(
detail
,
errDiskBlobNotFound
)
{
// if lease cannot be acquired or disk not found, immediately detach the disk and return the original error
klog
.
V
(
2
)
.
Infof
(
"azureDisk - err %v, try detach disk(%s, %s)"
,
err
,
diskName
,
diskURI
)
as
.
DetachDisk
ByName
(
diskName
,
diskURI
,
nodeName
)
as
.
DetachDisk
(
diskName
,
diskURI
,
nodeName
)
}
}
else
{
klog
.
V
(
2
)
.
Infof
(
"azureDisk - attach disk(%s, %s) succeeded"
,
diskName
,
diskURI
)
...
...
@@ -96,20 +97,20 @@ func (as *availabilitySet) AttachDisk(isManagedDisk bool, diskName, diskURI stri
return
err
}
// DetachDisk
ByName detaches a vhd
from host
// DetachDisk
detaches a disk
from host
// the vhd can be identified by diskName or diskURI
func
(
as
*
availabilitySet
)
DetachDisk
ByName
(
diskName
,
diskURI
string
,
nodeName
types
.
NodeName
)
error
{
func
(
as
*
availabilitySet
)
DetachDisk
(
diskName
,
diskURI
string
,
nodeName
types
.
NodeName
)
(
*
http
.
Response
,
error
)
{
vm
,
err
:=
as
.
getVirtualMachine
(
nodeName
)
if
err
!=
nil
{
// if host doesn't exist, no need to detach
klog
.
Warningf
(
"azureDisk - cannot find node %s, skip detaching disk(%s, %s)"
,
nodeName
,
diskName
,
diskURI
)
return
nil
return
nil
,
nil
}
vmName
:=
mapNodeNameToVMName
(
nodeName
)
nodeResourceGroup
,
err
:=
as
.
GetNodeResourceGroup
(
vmName
)
if
err
!=
nil
{
return
err
return
nil
,
err
}
disks
:=
*
vm
.
StorageProfile
.
DataDisks
...
...
@@ -127,7 +128,7 @@ func (as *availabilitySet) DetachDiskByName(diskName, diskURI string, nodeName t
}
if
!
bFoundDisk
{
return
fmt
.
Errorf
(
"detach azure disk failure, disk %s not found, diskURI: %s"
,
diskName
,
diskURI
)
return
nil
,
fmt
.
Errorf
(
"detach azure disk failure, disk %s not found, diskURI: %s"
,
diskName
,
diskURI
)
}
newVM
:=
compute
.
VirtualMachine
{
...
...
@@ -146,22 +147,7 @@ func (as *availabilitySet) DetachDiskByName(diskName, diskURI string, nodeName t
// Invalidate the cache right after updating
defer
as
.
cloud
.
vmCache
.
Delete
(
vmName
)
resp
,
err
:=
as
.
VirtualMachinesClient
.
CreateOrUpdate
(
ctx
,
nodeResourceGroup
,
vmName
,
newVM
)
if
as
.
CloudProviderBackoff
&&
shouldRetryHTTPRequest
(
resp
,
err
)
{
klog
.
V
(
2
)
.
Infof
(
"azureDisk - update(%s) backing off: vm(%s) detach disk(%s, %s), err: %v"
,
nodeResourceGroup
,
vmName
,
diskName
,
diskURI
,
err
)
retryErr
:=
as
.
CreateOrUpdateVMWithRetry
(
nodeResourceGroup
,
vmName
,
newVM
)
if
retryErr
!=
nil
{
err
=
retryErr
klog
.
V
(
2
)
.
Infof
(
"azureDisk - update(%s) abort backoff: vm(%s) detach disk(%s, %s), err: %v"
,
nodeResourceGroup
,
vmName
,
diskName
,
diskURI
,
err
)
}
}
if
err
!=
nil
{
klog
.
Errorf
(
"azureDisk - detach disk(%s, %s) failed, err: %v"
,
diskName
,
diskURI
,
err
)
}
else
{
klog
.
V
(
2
)
.
Infof
(
"azureDisk - detach disk(%s, %s) succeeded"
,
diskName
,
diskURI
)
}
return
err
return
as
.
VirtualMachinesClient
.
CreateOrUpdate
(
ctx
,
nodeResourceGroup
,
vmName
,
newVM
)
}
// GetDataDisks gets a list of data disks attached to the node.
...
...
pkg/cloudprovider/providers/azure/azure_controller_vmss.go
View file @
5376b645
...
...
@@ -18,6 +18,7 @@ package azure
import
(
"fmt"
"net/http"
"strings"
"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-10-01/compute"
...
...
@@ -93,7 +94,7 @@ func (ss *scaleSet) AttachDisk(isManagedDisk bool, diskName, diskURI string, nod
if
strings
.
Contains
(
detail
,
errLeaseFailed
)
||
strings
.
Contains
(
detail
,
errDiskBlobNotFound
)
{
// if lease cannot be acquired or disk not found, immediately detach the disk and return the original error
klog
.
Infof
(
"azureDisk - err %s, try detach disk(%s, %s)"
,
detail
,
diskName
,
diskURI
)
ss
.
DetachDisk
ByName
(
diskName
,
diskURI
,
nodeName
)
ss
.
DetachDisk
(
diskName
,
diskURI
,
nodeName
)
}
}
else
{
klog
.
V
(
2
)
.
Infof
(
"azureDisk - attach disk(%s, %s) succeeded"
,
diskName
,
diskURI
)
...
...
@@ -101,18 +102,18 @@ func (ss *scaleSet) AttachDisk(isManagedDisk bool, diskName, diskURI string, nod
return
err
}
// DetachDisk
ByName detaches a vhd
from host
// DetachDisk
detaches a disk
from host
// the vhd can be identified by diskName or diskURI
func
(
ss
*
scaleSet
)
DetachDisk
ByName
(
diskName
,
diskURI
string
,
nodeName
types
.
NodeName
)
error
{
func
(
ss
*
scaleSet
)
DetachDisk
(
diskName
,
diskURI
string
,
nodeName
types
.
NodeName
)
(
*
http
.
Response
,
error
)
{
vmName
:=
mapNodeNameToVMName
(
nodeName
)
ssName
,
instanceID
,
vm
,
err
:=
ss
.
getVmssVM
(
vmName
)
if
err
!=
nil
{
return
err
return
nil
,
err
}
nodeResourceGroup
,
err
:=
ss
.
GetNodeResourceGroup
(
vmName
)
if
err
!=
nil
{
return
err
return
nil
,
err
}
disks
:=
[]
compute
.
DataDisk
{}
...
...
@@ -133,7 +134,7 @@ func (ss *scaleSet) DetachDiskByName(diskName, diskURI string, nodeName types.No
}
if
!
bFoundDisk
{
return
fmt
.
Errorf
(
"detach azure disk failure, disk %s not found, diskURI: %s"
,
diskName
,
diskURI
)
return
nil
,
fmt
.
Errorf
(
"detach azure disk failure, disk %s not found, diskURI: %s"
,
diskName
,
diskURI
)
}
newVM
:=
compute
.
VirtualMachineScaleSetVM
{
...
...
@@ -156,22 +157,7 @@ func (ss *scaleSet) DetachDiskByName(diskName, diskURI string, nodeName types.No
defer
ss
.
vmssVMCache
.
Delete
(
key
)
klog
.
V
(
2
)
.
Infof
(
"azureDisk - update(%s): vm(%s) - detach disk(%s, %s)"
,
nodeResourceGroup
,
nodeName
,
diskName
,
diskURI
)
resp
,
err
:=
ss
.
VirtualMachineScaleSetVMsClient
.
Update
(
ctx
,
nodeResourceGroup
,
ssName
,
instanceID
,
newVM
)
if
ss
.
CloudProviderBackoff
&&
shouldRetryHTTPRequest
(
resp
,
err
)
{
klog
.
V
(
2
)
.
Infof
(
"azureDisk - update(%s) backing off: vm(%s) detach disk(%s, %s), err: %v"
,
nodeResourceGroup
,
nodeName
,
diskName
,
diskURI
,
err
)
retryErr
:=
ss
.
UpdateVmssVMWithRetry
(
nodeResourceGroup
,
ssName
,
instanceID
,
newVM
)
if
retryErr
!=
nil
{
err
=
retryErr
klog
.
V
(
2
)
.
Infof
(
"azureDisk - update(%s) abort backoff: vm(%s) detach disk(%s, %s), err: %v"
,
nodeResourceGroup
,
nodeName
,
diskName
,
diskURI
,
err
)
}
}
if
err
!=
nil
{
klog
.
Errorf
(
"azureDisk - detach disk(%s, %s) from %s failed, err: %v"
,
diskName
,
diskURI
,
nodeName
,
err
)
}
else
{
klog
.
V
(
2
)
.
Infof
(
"azureDisk - detach disk(%s, %s) succeeded"
,
diskName
,
diskURI
)
}
return
err
return
ss
.
VirtualMachineScaleSetVMsClient
.
Update
(
ctx
,
nodeResourceGroup
,
ssName
,
instanceID
,
newVM
)
}
// GetDataDisks gets a list of data disks attached to the node.
...
...
pkg/cloudprovider/providers/azure/azure_fakes.go
View file @
5376b645
...
...
@@ -910,8 +910,8 @@ func (f *fakeVMSet) AttachDisk(isManagedDisk bool, diskName, diskURI string, nod
return
fmt
.
Errorf
(
"unimplemented"
)
}
func
(
f
*
fakeVMSet
)
DetachDisk
ByName
(
diskName
,
diskURI
string
,
nodeName
types
.
NodeName
)
error
{
return
fmt
.
Errorf
(
"unimplemented"
)
func
(
f
*
fakeVMSet
)
DetachDisk
(
diskName
,
diskURI
string
,
nodeName
types
.
NodeName
)
(
*
http
.
Response
,
error
)
{
return
nil
,
fmt
.
Errorf
(
"unimplemented"
)
}
func
(
f
*
fakeVMSet
)
GetDataDisks
(
nodeName
types
.
NodeName
)
([]
compute
.
DataDisk
,
error
)
{
...
...
pkg/cloudprovider/providers/azure/azure_vmsets.go
View file @
5376b645
...
...
@@ -17,6 +17,8 @@ limitations under the License.
package
azure
import
(
"net/http"
"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-10-01/compute"
"github.com/Azure/azure-sdk-for-go/services/network/mgmt/2017-09-01/network"
...
...
@@ -60,8 +62,8 @@ type VMSet interface {
// AttachDisk attaches a vhd to vm. The vhd must exist, can be identified by diskName, diskURI, and lun.
AttachDisk
(
isManagedDisk
bool
,
diskName
,
diskURI
string
,
nodeName
types
.
NodeName
,
lun
int32
,
cachingMode
compute
.
CachingTypes
)
error
// DetachDisk
ByName
detaches a vhd from host. The vhd can be identified by diskName or diskURI.
DetachDisk
ByName
(
diskName
,
diskURI
string
,
nodeName
types
.
NodeName
)
error
// DetachDisk detaches a vhd from host. The vhd can be identified by diskName or diskURI.
DetachDisk
(
diskName
,
diskURI
string
,
nodeName
types
.
NodeName
)
(
*
http
.
Response
,
error
)
// GetDataDisks gets a list of data disks attached to the node.
GetDataDisks
(
nodeName
types
.
NodeName
)
([]
compute
.
DataDisk
,
error
)
...
...
pkg/volume/azure_dd/attacher.go
View file @
5376b645
...
...
@@ -301,7 +301,7 @@ func (d *azureDiskDetacher) Detach(diskURI string, nodeName types.NodeName) erro
getLunMutex
.
LockKey
(
instanceid
)
defer
getLunMutex
.
UnlockKey
(
instanceid
)
err
=
diskController
.
DetachDisk
ByName
(
""
,
diskURI
,
nodeName
)
err
=
diskController
.
DetachDisk
(
""
,
diskURI
,
nodeName
)
if
err
!=
nil
{
klog
.
Errorf
(
"failed to detach azure disk %q, err %v"
,
diskURI
,
err
)
}
...
...
pkg/volume/azure_dd/azure_dd.go
View file @
5376b645
...
...
@@ -46,7 +46,7 @@ type DiskController interface {
// Attaches the disk to the host machine.
AttachDisk
(
isManagedDisk
bool
,
diskName
,
diskUri
string
,
nodeName
types
.
NodeName
,
lun
int32
,
cachingMode
compute
.
CachingTypes
)
error
// Detaches the disk, identified by disk name or uri, from the host machine.
DetachDisk
ByName
(
diskName
,
diskUri
string
,
nodeName
types
.
NodeName
)
error
DetachDisk
(
diskName
,
diskUri
string
,
nodeName
types
.
NodeName
)
error
// Check if a list of volumes are attached to the node with the specified NodeName
DisksAreAttached
(
diskNames
[]
string
,
nodeName
types
.
NodeName
)
(
map
[
string
]
bool
,
error
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment