diff --git a/pkg/volume/csi/csi_attacher.go b/pkg/volume/csi/csi_attacher.go index 9bfba735042..22640946773 100644 --- a/pkg/volume/csi/csi_attacher.go +++ b/pkg/volume/csi/csi_attacher.go @@ -169,9 +169,13 @@ func (c *csiAttacher) waitForVolumeAttachmentInternal(volumeHandle, attachID str if err != nil { return "", fmt.Errorf("watch error:%v for volume %v", err, volumeHandle) } - + var watcherClosed bool ch := watcher.ResultChan() - defer watcher.Stop() + defer func() { + if !watcherClosed { + watcher.Stop() + } + }() for { select { @@ -197,8 +201,11 @@ func (c *csiAttacher) waitForVolumeAttachmentInternal(volumeHandle, attachID str return "", errors.New("volume attachment has been deleted") case watch.Error: + // close the watcher to avoid keeping the watcher too log + watcher.Stop() + watcherClosed = true // start another cycle - c.waitForVolumeAttachmentInternal(volumeHandle, attachID, timer, timeout) + return c.waitForVolumeAttachmentInternal(volumeHandle, attachID, timer, timeout) } case <-timer.C: