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 f056c25e07f..5d580a5f557 100644 --- a/pkg/controller/volume/attachdetach/cache/actual_state_of_world.go +++ b/pkg/controller/volume/attachdetach/cache/actual_state_of_world.go @@ -588,6 +588,11 @@ func (asw *actualStateOfWorld) InitializeClaimSize(volumeName v1.UniqueVolumeNam klog.V(5).Infof("no-op InitializeClaimSize call in attach-detach controller.") } +func (asw *actualStateOfWorld) GetClaimSize(volumeName v1.UniqueVolumeName) *resource.Quantity { + // not needed in attach-detach controller + return nil +} + func (asw *actualStateOfWorld) GetAttachedVolumes() []AttachedVolume { asw.RLock() defer asw.RUnlock() diff --git a/pkg/kubelet/volumemanager/cache/actual_state_of_world.go b/pkg/kubelet/volumemanager/cache/actual_state_of_world.go index 46cb842baa9..7deb6df910d 100644 --- a/pkg/kubelet/volumemanager/cache/actual_state_of_world.go +++ b/pkg/kubelet/volumemanager/cache/actual_state_of_world.go @@ -613,6 +613,17 @@ func (asw *actualStateOfWorld) InitializeClaimSize(volumeName v1.UniqueVolumeNam } } +func (asw *actualStateOfWorld) GetClaimSize(volumeName v1.UniqueVolumeName) *resource.Quantity { + asw.RLock() + defer asw.RUnlock() + + volumeObj, ok := asw.attachedVolumes[volumeName] + if ok { + return volumeObj.persistentVolumeSize + } + return nil +} + func (asw *actualStateOfWorld) DeletePodFromVolume( podName volumetypes.UniquePodName, volumeName v1.UniqueVolumeName) error { asw.Lock() diff --git a/pkg/volume/util/operationexecutor/operation_executor.go b/pkg/volume/util/operationexecutor/operation_executor.go index 77ae3705b42..3a88fe052b6 100644 --- a/pkg/volume/util/operationexecutor/operation_executor.go +++ b/pkg/volume/util/operationexecutor/operation_executor.go @@ -248,6 +248,8 @@ type ActualStateOfWorldAttacherUpdater interface { // InitializeClaimSize sets pvc claim size by reading pvc.Status.Capacity InitializeClaimSize(volumeName v1.UniqueVolumeName, claimSize *resource.Quantity) + + GetClaimSize(volumeName v1.UniqueVolumeName) *resource.Quantity } // VolumeLogger defines a set of operations for generating volume-related logging and error msgs diff --git a/pkg/volume/util/operationexecutor/operation_generator.go b/pkg/volume/util/operationexecutor/operation_generator.go index cddd3624d06..d4ca92fa63d 100644 --- a/pkg/volume/util/operationexecutor/operation_generator.go +++ b/pkg/volume/util/operationexecutor/operation_generator.go @@ -1480,9 +1480,10 @@ func (og *operationGenerator) GenerateVerifyControllerAttachedVolumeFunc( verifyControllerAttachedVolumeFunc := func() volumetypes.OperationContext { migrated := getMigratedStatusBySpec(volumeToMount.VolumeSpec) - var claimSize *resource.Quantity + claimSize := actualStateOfWorld.GetClaimSize(volumeToMount.VolumeName) - if volumeToMount.VolumeSpec.PersistentVolume != nil { + // only fetch claimSize if it was not set previously + if volumeToMount.VolumeSpec.PersistentVolume != nil && claimSize == nil { pv := volumeToMount.VolumeSpec.PersistentVolume pvc, err := og.kubeClient.CoreV1().PersistentVolumeClaims(pv.Spec.ClaimRef.Namespace).Get(context.TODO(), pv.Spec.ClaimRef.Name, metav1.GetOptions{}) if err != nil {