Add functions for storing volume as failed with final error

This commit is contained in:
Hemant Kumar
2024-07-12 15:14:46 -04:00
parent 7a51999ddf
commit cbda088905
2 changed files with 41 additions and 4 deletions

View File

@@ -27,6 +27,7 @@ import (
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/sets"
utilfeature "k8s.io/apiserver/pkg/util/feature"
"k8s.io/klog/v2"
"k8s.io/kubernetes/pkg/features"
@@ -211,10 +212,11 @@ func NewActualStateOfWorld(
nodeName types.NodeName,
volumePluginMgr *volume.VolumePluginMgr) ActualStateOfWorld {
return &actualStateOfWorld{
nodeName: nodeName,
attachedVolumes: make(map[v1.UniqueVolumeName]attachedVolume),
foundDuringReconstruction: make(map[v1.UniqueVolumeName]map[volumetypes.UniquePodName]types.UID),
volumePluginMgr: volumePluginMgr,
nodeName: nodeName,
attachedVolumes: make(map[v1.UniqueVolumeName]attachedVolume),
foundDuringReconstruction: make(map[v1.UniqueVolumeName]map[volumetypes.UniquePodName]types.UID),
volumePluginMgr: volumePluginMgr,
volumesWithFinalExpansionErrors: sets.New[string](),
}
}
@@ -247,6 +249,8 @@ type actualStateOfWorld struct {
// from kubelet root directory when kubelet was restarted.
foundDuringReconstruction map[v1.UniqueVolumeName]map[volumetypes.UniquePodName]types.UID
volumesWithFinalExpansionErrors sets.Set[v1.UniqueVolumeName]
// volumePluginMgr is the volume plugin manager used to create volume
// plugin objects.
volumePluginMgr *volume.VolumePluginMgr
@@ -396,6 +400,27 @@ func (asw *actualStateOfWorld) MarkVolumeAsDetached(
asw.DeleteVolume(volumeName)
}
func (asw *actualStateOfWorld) MarkVolumeExpansionFailedWithFinalError(volumeName v1.UniqueVolumeName) {
asw.Lock()
defer asw.Unlock()
asw.volumesWithFinalExpansionErrors.Insert(volumeName)
}
func (asw *actualStateOfWorld) RemoveVolumeFromFailedWithFinalErrors(volumeName v1.UniqueVolumeName) {
asw.Lock()
defer asw.Unlock()
asw.volumesWithFinalExpansionErrors.Delete(volumeName)
}
func (asw *actualStateOfWorld) CheckVolumeInFailedExpansionWithFinalErrors(volumeName v1.UniqueVolumeName) bool {
asw.RLock()
defer asw.RUnlock()
return asw.volumesWithFinalExpansionErrors.Has(volumeName)
}
func (asw *actualStateOfWorld) IsVolumeReconstructed(volumeName v1.UniqueVolumeName, podName volumetypes.UniquePodName) bool {
volumeState := asw.GetVolumeMountState(volumeName, podName)

View File

@@ -233,6 +233,18 @@ type ActualStateOfWorldMounterUpdater interface {
// IsVolumeDeviceReconstructed returns true if volume device identified by volumeName has been
// found during reconstruction.
IsVolumeDeviceReconstructed(volumeName v1.UniqueVolumeName) bool
// MarkVolumeExpansionFailedWithFinalError marks volume as failed with a final error, so as
// this state doesn't have to be recorded in the API server
MarkVolumeExpansionFailedWithFinalError(volumeName v1.UniqueVolumeName)
// RemoveVolumeFromFailedWithFinalErrors removes volume from list that indicates that volume
// has failed expansion with a final error
RemoveVolumeFromFailedWithFinalErrors(volumeName v1.UniqueVolumeName)
// CheckVolumeInFailedExpansionWithFinalErrors verifies if volume expansion has failed with a final
// error
CheckVolumeInFailedExpansionWithFinalErrors(volumeName v1.UniqueVolumeName) bool
}
// ActualStateOfWorldAttacherUpdater defines a set of operations updating the