diff --git a/pkg/controller/volume/attachdetach/cache/actual_state_of_world.go b/pkg/controller/volume/attachdetach/cache/actual_state_of_world.go index 1c01d931c13..652be8a9039 100644 --- a/pkg/controller/volume/attachdetach/cache/actual_state_of_world.go +++ b/pkg/controller/volume/attachdetach/cache/actual_state_of_world.go @@ -412,6 +412,13 @@ func (asw *actualStateOfWorld) SetDetachRequestTime( // Get the volume and node object from actual state of world // This is an internal function and caller should acquire and release the lock +// +// Note that this returns disconnected objects, so if you change the volume object you must set it back with +// `asw.attachedVolumes[volumeName]=volumeObj`. +// +// If you change the node object you must use `volumeObj.nodesAttachedTo[nodeName] = nodeObj` +// This is correct, because if volumeObj is empty this function returns an error, and nodesAttachedTo +// map is a reference type, and thus mutating the copy changes the original map. func (asw *actualStateOfWorld) getNodeAndVolume( volumeName v1.UniqueVolumeName, nodeName types.NodeName) (attachedVolume, nodeAttachedTo, error) {