Skip to content

Commit

Permalink
Merge pull request kubernetes#116621 from moshe010/dra-lock
Browse files Browse the repository at this point in the history
kubelet dra: add lock to addCDIDevices
  • Loading branch information
k8s-ci-robot committed Mar 15, 2023
2 parents 602ba9a + ffb07d1 commit 74123a7
Showing 1 changed file with 30 additions and 27 deletions.
57 changes: 30 additions & 27 deletions pkg/kubelet/cm/dra/claiminfo.go
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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)
Expand Down

0 comments on commit 74123a7

Please sign in to comment.