mirror of https://github.com/k3s-io/k3s
Fix device unmap for non-attachable plugin case
If plugin is non-attachable, global unmap path isn't stored in asw then plugin fails to unmap volume. To store the path, this PR moves MarkDeviceAsMounted operation from the `if volumeAttacher != nil` block. Fixes #60025pull/6/head
parent
c7414323d8
commit
9ad102717f
|
@ -837,13 +837,6 @@ func (og *operationGenerator) GenerateMapVolumeFunc(
|
|||
|
||||
glog.Infof(volumeToMount.GenerateMsgDetailed("MapVolume.WaitForAttach succeeded", fmt.Sprintf("DevicePath %q", devicePath)))
|
||||
|
||||
// Update actual state of world to reflect volume is globally mounted
|
||||
markDeviceMappedErr := actualStateOfWorld.MarkDeviceAsMounted(
|
||||
volumeToMount.VolumeName, devicePath, globalMapPath)
|
||||
if markDeviceMappedErr != nil {
|
||||
// On failure, return error. Caller will log and retry.
|
||||
return volumeToMount.GenerateError("MapVolume.MarkDeviceAsMounted failed", markDeviceMappedErr)
|
||||
}
|
||||
}
|
||||
// A plugin doesn't have attacher also needs to map device to global map path with SetUpDevice()
|
||||
pluginDevicePath, mapErr := blockVolumeMapper.SetUpDevice()
|
||||
|
@ -859,6 +852,13 @@ func (og *operationGenerator) GenerateMapVolumeFunc(
|
|||
return volumeToMount.GenerateError("MapVolume failed", fmt.Errorf("Device path of the volume is empty"))
|
||||
}
|
||||
}
|
||||
// Update actual state of world to reflect volume is globally mounted
|
||||
markDeviceMappedErr := actualStateOfWorld.MarkDeviceAsMounted(
|
||||
volumeToMount.VolumeName, devicePath, globalMapPath)
|
||||
if markDeviceMappedErr != nil {
|
||||
// On failure, return error. Caller will log and retry.
|
||||
return volumeToMount.GenerateError("MapVolume.MarkDeviceAsMounted failed", markDeviceMappedErr)
|
||||
}
|
||||
|
||||
mapErr = og.blkUtil.MapDevice(devicePath, globalMapPath, string(volumeToMount.Pod.UID))
|
||||
if mapErr != nil {
|
||||
|
@ -961,10 +961,6 @@ func (og *operationGenerator) GenerateUnmapVolumeFunc(
|
|||
// Try to unmap podUID symlink under global map path dir
|
||||
// plugins/kubernetes.io/{PluginName}/volumeDevices/{volumePluginDependentPath}/{podUID}
|
||||
globalUnmapPath := volumeToUnmount.DeviceMountPath
|
||||
if err != nil {
|
||||
// On failure, return error. Caller will log and retry.
|
||||
return volumeToUnmount.GenerateError("UnmapVolume.GetGlobalUnmapPath failed", err)
|
||||
}
|
||||
unmapDeviceErr = og.blkUtil.UnmapDevice(globalUnmapPath, string(volumeToUnmount.PodUID))
|
||||
if unmapDeviceErr != nil {
|
||||
// On failure, return error. Caller will log and retry.
|
||||
|
@ -1034,10 +1030,6 @@ func (og *operationGenerator) GenerateUnmapDeviceFunc(
|
|||
// Search under globalMapPath dir if all symbolic links from pods have been removed already.
|
||||
// If symbolick links are there, pods may still refer the volume.
|
||||
globalMapPath := deviceToDetach.DeviceMountPath
|
||||
if err != nil {
|
||||
// On failure, return error. Caller will log and retry.
|
||||
return deviceToDetach.GenerateError("UnmapDevice.GetGlobalMapPath failed", err)
|
||||
}
|
||||
refs, err := og.blkUtil.GetDeviceSymlinkRefs(deviceToDetach.DevicePath, globalMapPath)
|
||||
if err != nil {
|
||||
return deviceToDetach.GenerateError("UnmapDevice.GetDeviceSymlinkRefs check failed", err)
|
||||
|
|
Loading…
Reference in New Issue