Commit 9ad10271 authored by Mitsuhiro Tanino's avatar Mitsuhiro Tanino

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 #60025
parent c7414323
...@@ -837,13 +837,6 @@ func (og *operationGenerator) GenerateMapVolumeFunc( ...@@ -837,13 +837,6 @@ func (og *operationGenerator) GenerateMapVolumeFunc(
glog.Infof(volumeToMount.GenerateMsgDetailed("MapVolume.WaitForAttach succeeded", fmt.Sprintf("DevicePath %q", devicePath))) 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() // A plugin doesn't have attacher also needs to map device to global map path with SetUpDevice()
pluginDevicePath, mapErr := blockVolumeMapper.SetUpDevice() pluginDevicePath, mapErr := blockVolumeMapper.SetUpDevice()
...@@ -859,6 +852,13 @@ func (og *operationGenerator) GenerateMapVolumeFunc( ...@@ -859,6 +852,13 @@ func (og *operationGenerator) GenerateMapVolumeFunc(
return volumeToMount.GenerateError("MapVolume failed", fmt.Errorf("Device path of the volume is empty")) 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)) mapErr = og.blkUtil.MapDevice(devicePath, globalMapPath, string(volumeToMount.Pod.UID))
if mapErr != nil { if mapErr != nil {
...@@ -961,10 +961,6 @@ func (og *operationGenerator) GenerateUnmapVolumeFunc( ...@@ -961,10 +961,6 @@ func (og *operationGenerator) GenerateUnmapVolumeFunc(
// Try to unmap podUID symlink under global map path dir // Try to unmap podUID symlink under global map path dir
// plugins/kubernetes.io/{PluginName}/volumeDevices/{volumePluginDependentPath}/{podUID} // plugins/kubernetes.io/{PluginName}/volumeDevices/{volumePluginDependentPath}/{podUID}
globalUnmapPath := volumeToUnmount.DeviceMountPath 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)) unmapDeviceErr = og.blkUtil.UnmapDevice(globalUnmapPath, string(volumeToUnmount.PodUID))
if unmapDeviceErr != nil { if unmapDeviceErr != nil {
// On failure, return error. Caller will log and retry. // On failure, return error. Caller will log and retry.
...@@ -1034,10 +1030,6 @@ func (og *operationGenerator) GenerateUnmapDeviceFunc( ...@@ -1034,10 +1030,6 @@ func (og *operationGenerator) GenerateUnmapDeviceFunc(
// Search under globalMapPath dir if all symbolic links from pods have been removed already. // 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. // If symbolick links are there, pods may still refer the volume.
globalMapPath := deviceToDetach.DeviceMountPath 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) refs, err := og.blkUtil.GetDeviceSymlinkRefs(deviceToDetach.DevicePath, globalMapPath)
if err != nil { if err != nil {
return deviceToDetach.GenerateError("UnmapDevice.GetDeviceSymlinkRefs check failed", err) return deviceToDetach.GenerateError("UnmapDevice.GetDeviceSymlinkRefs check failed", err)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment