From 6910bc7bb0f91d80e9f2c191966cce62b55daee9 Mon Sep 17 00:00:00 2001 From: hongkang Date: Sun, 12 Jan 2025 00:10:02 +0800 Subject: [PATCH] Fix VolumeAttachment cleanup when AttachRequired changes When CSI's AttachRequired changes from true to false after a successful volume attach, MarkVolumeAsAttached fails because it attempts to look up the plugin by spec, which fails verification. This patch passes the VolumeName directly to MarkVolumeAsAttached. This allows the function to skip the plugin lookup and correctly mark the volume as attached in the Actual State of World, ensuring VolumeAttachment cleanup can proceed. Signed-off-by: hongkang --- .../operationexecutor/operation_generator.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pkg/volume/util/operationexecutor/operation_generator.go b/pkg/volume/util/operationexecutor/operation_generator.go index 9d5c937d953..2707f703448 100644 --- a/pkg/volume/util/operationexecutor/operation_generator.go +++ b/pkg/volume/util/operationexecutor/operation_generator.go @@ -290,6 +290,15 @@ func (og *operationGenerator) GenerateAttachVolumeFunc( return volumetypes.NewOperationContext(eventErr, detailedErr, migrated) } + // Update actual state of world + addVolumeNodeErr := actualStateOfWorld.MarkVolumeAsAttached( + logger, volumeToAttach.VolumeName, volumeToAttach.VolumeSpec, volumeToAttach.NodeName, devicePath) + if addVolumeNodeErr != nil { + // On failure, return error. Caller will log and retry. + eventErr, detailedErr := volumeToAttach.GenerateError("AttachVolume.MarkVolumeAsAttached failed", addVolumeNodeErr) + return volumetypes.NewOperationContext(eventErr, detailedErr, migrated) + } + // Successful attach event is useful for user debugging simpleMsg, _ := volumeToAttach.GenerateMsg("AttachVolume.Attach succeeded", "") for _, pod := range volumeToAttach.ScheduledPods { @@ -297,15 +306,6 @@ func (og *operationGenerator) GenerateAttachVolumeFunc( } klog.Info(volumeToAttach.GenerateMsgDetailed("AttachVolume.Attach succeeded", "")) - // Update actual state of world - addVolumeNodeErr := actualStateOfWorld.MarkVolumeAsAttached( - logger, v1.UniqueVolumeName(""), volumeToAttach.VolumeSpec, volumeToAttach.NodeName, devicePath) - if addVolumeNodeErr != nil { - // On failure, return error. Caller will log and retry. - eventErr, detailedErr := volumeToAttach.GenerateError("AttachVolume.MarkVolumeAsAttached failed", addVolumeNodeErr) - return volumetypes.NewOperationContext(eventErr, detailedErr, migrated) - } - return volumetypes.NewOperationContext(nil, nil, migrated) }