From ffb07d1e78626a261db212aa5e1b12609f4cdfd3 Mon Sep 17 00:00:00 2001 From: Moshe Levi Date: Wed, 15 Mar 2023 00:37:16 +0200 Subject: [PATCH] kubelet dra: add lock to addCDIDevices Signed-off-by: Moshe Levi --- pkg/kubelet/cm/dra/claiminfo.go | 57 +++++++++++++++++---------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/pkg/kubelet/cm/dra/claiminfo.go b/pkg/kubelet/cm/dra/claiminfo.go index e70e79b0386..d1711a0771d 100644 --- a/pkg/kubelet/cm/dra/claiminfo.go +++ b/pkg/kubelet/cm/dra/claiminfo.go @@ -36,18 +36,40 @@ type ClaimInfo struct { annotations []kubecontainer.Annotation } -func (res *ClaimInfo) addPodReference(podUID types.UID) { - res.Lock() - defer res.Unlock() +func (info *ClaimInfo) addPodReference(podUID types.UID) { + info.Lock() + defer info.Unlock() - res.PodUIDs.Insert(string(podUID)) + info.PodUIDs.Insert(string(podUID)) } -func (res *ClaimInfo) deletePodReference(podUID types.UID) { - res.Lock() - defer res.Unlock() +func (info *ClaimInfo) deletePodReference(podUID types.UID) { + info.Lock() + defer info.Unlock() - res.PodUIDs.Delete(string(podUID)) + info.PodUIDs.Delete(string(podUID)) +} + +func (info *ClaimInfo) addCDIDevices(pluginName string, cdiDevices []string) error { + info.Lock() + defer info.Unlock() + + // NOTE: Passing CDI device names as annotations is a temporary solution + // It will be removed after all runtimes are updated + // to get CDI device names from the ContainerConfig.CDIDevices field + annotations, err := generateCDIAnnotations(info.ClaimUID, info.DriverName, cdiDevices) + if err != nil { + return fmt.Errorf("failed to generate container annotations, err: %+v", err) + } + + if info.CDIDevices == nil { + info.CDIDevices = make(map[string][]string) + } + + info.CDIDevices[pluginName] = cdiDevices + info.annotations = append(info.annotations, annotations...) + + return nil } // claimInfoCache is a cache of processed resource claims keyed by namespace + claim name. @@ -72,25 +94,6 @@ func newClaimInfo(driverName, className string, claimUID types.UID, claimName, n return &claimInfo } -func (info *ClaimInfo) addCDIDevices(pluginName string, cdiDevices []string) error { - // NOTE: Passing CDI device names as annotations is a temporary solution - // It will be removed after all runtimes are updated - // to get CDI device names from the ContainerConfig.CDIDevices field - annotations, err := generateCDIAnnotations(info.ClaimUID, info.DriverName, cdiDevices) - if err != nil { - return fmt.Errorf("failed to generate container annotations, err: %+v", err) - } - - if info.CDIDevices == nil { - info.CDIDevices = make(map[string][]string) - } - - info.CDIDevices[pluginName] = cdiDevices - info.annotations = append(info.annotations, annotations...) - - return nil -} - // newClaimInfoCache is a function that returns an instance of the claimInfoCache. func newClaimInfoCache(stateDir, checkpointName string) (*claimInfoCache, error) { stateImpl, err := state.NewCheckpointState(stateDir, checkpointName)