DRA: Kubelet code cleanup

This commit is contained in:
Ed Bartosh 2024-07-23 23:31:11 +03:00
parent 59555c6a62
commit c0d922e786
8 changed files with 32 additions and 33 deletions

View File

@ -25,7 +25,7 @@ import (
resourceapi "k8s.io/api/resource/v1alpha3" resourceapi "k8s.io/api/resource/v1alpha3"
"k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
state "k8s.io/kubernetes/pkg/kubelet/cm/dra/state" "k8s.io/kubernetes/pkg/kubelet/cm/dra/state"
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
) )
@ -40,7 +40,7 @@ type ClaimInfo struct {
// claimInfoCache is a cache of processed resource claims keyed by namespace/claimname. // claimInfoCache is a cache of processed resource claims keyed by namespace/claimname.
type claimInfoCache struct { type claimInfoCache struct {
sync.RWMutex sync.RWMutex
state state.Checkpointer checkpointer state.Checkpointer
claimInfo map[string]*ClaimInfo claimInfo map[string]*ClaimInfo
} }
@ -124,11 +124,11 @@ func newClaimInfoCache(stateDir, checkpointName string) (*claimInfoCache, error)
} }
cache := &claimInfoCache{ cache := &claimInfoCache{
state: checkpointer, checkpointer: checkpointer,
claimInfo: make(map[string]*ClaimInfo), claimInfo: make(map[string]*ClaimInfo),
} }
entries, err := checkpoint.GetEntries() entries, err := checkpoint.GetClaimInfoStateList()
if err != nil { if err != nil {
return nil, fmt.Errorf("error calling GetEntries() on checkpoint: %w", err) return nil, fmt.Errorf("error calling GetEntries() on checkpoint: %w", err)
@ -201,7 +201,7 @@ func (cache *claimInfoCache) syncToCheckpoint() error {
if err != nil { if err != nil {
return err return err
} }
return cache.state.Store(checkpoint) return cache.checkpointer.Store(checkpoint)
} }
// cdiDevicesAsList returns a list of CDIDevices from the provided claim info. // cdiDevicesAsList returns a list of CDIDevices from the provided claim info.

View File

@ -28,7 +28,7 @@ import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/types"
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
state "k8s.io/kubernetes/pkg/kubelet/cm/dra/state" "k8s.io/kubernetes/pkg/kubelet/cm/dra/state"
) )
// ClaimInfo test cases // ClaimInfo test cases

View File

@ -32,7 +32,7 @@ import (
"k8s.io/klog/v2" "k8s.io/klog/v2"
drapb "k8s.io/kubelet/pkg/apis/dra/v1alpha4" drapb "k8s.io/kubelet/pkg/apis/dra/v1alpha4"
dra "k8s.io/kubernetes/pkg/kubelet/cm/dra/plugin" dra "k8s.io/kubernetes/pkg/kubelet/cm/dra/plugin"
state "k8s.io/kubernetes/pkg/kubelet/cm/dra/state" "k8s.io/kubernetes/pkg/kubelet/cm/dra/state"
"k8s.io/kubernetes/pkg/kubelet/config" "k8s.io/kubernetes/pkg/kubelet/config"
kubecontainer "k8s.io/kubernetes/pkg/kubelet/container" kubecontainer "k8s.io/kubernetes/pkg/kubelet/container"
) )

View File

@ -40,7 +40,7 @@ import (
"k8s.io/dynamic-resource-allocation/resourceclaim" "k8s.io/dynamic-resource-allocation/resourceclaim"
drapb "k8s.io/kubelet/pkg/apis/dra/v1alpha4" drapb "k8s.io/kubelet/pkg/apis/dra/v1alpha4"
"k8s.io/kubernetes/pkg/kubelet/cm/dra/plugin" "k8s.io/kubernetes/pkg/kubelet/cm/dra/plugin"
state "k8s.io/kubernetes/pkg/kubelet/cm/dra/state" "k8s.io/kubernetes/pkg/kubelet/cm/dra/state"
) )
const ( const (

View File

@ -27,7 +27,7 @@ import (
const ( const (
CheckpointAPIGroup = "checkpoint.dra.kubelet.k8s.io" CheckpointAPIGroup = "checkpoint.dra.kubelet.k8s.io"
CheckpointKind = "DRACheckpoint" CheckpointKind = "DRACheckpoint"
CheckpointAPIVersion = CheckpointAPIGroup + "/" + Version CheckpointAPIVersion = CheckpointAPIGroup + "/v1"
) )
// Checkpoint represents a structure to store DRA checkpoint data // Checkpoint represents a structure to store DRA checkpoint data
@ -40,7 +40,7 @@ type Checkpoint struct {
type CheckpointData struct { type CheckpointData struct {
metav1.TypeMeta metav1.TypeMeta
Entries ClaimInfoStateList ClaimInfoStateList ClaimInfoStateList
} }
// NewCheckpoint creates a new checkpoint from a list of claim info states // NewCheckpoint creates a new checkpoint from a list of claim info states
@ -50,7 +50,7 @@ func NewCheckpoint(data ClaimInfoStateList) (*Checkpoint, error) {
Kind: CheckpointKind, Kind: CheckpointKind,
APIVersion: CheckpointAPIVersion, APIVersion: CheckpointAPIVersion,
}, },
Entries: data, ClaimInfoStateList: data,
} }
cpDataBytes, err := json.Marshal(cpData) cpDataBytes, err := json.Marshal(cpData)
@ -58,10 +58,12 @@ func NewCheckpoint(data ClaimInfoStateList) (*Checkpoint, error) {
return nil, err return nil, err
} }
return &Checkpoint{ cp := &Checkpoint{
Data: string(cpDataBytes), Data: string(cpDataBytes),
Checksum: crc32.ChecksumIEEE(cpDataBytes), Checksum: crc32.ChecksumIEEE(cpDataBytes),
}, nil }
return cp, nil
} }
// MarshalCheckpoint marshals checkpoint to JSON // MarshalCheckpoint marshals checkpoint to JSON
@ -94,12 +96,12 @@ func (cp *Checkpoint) VerifyChecksum() error {
return nil return nil
} }
// GetEntries returns list of claim info states from checkpoint // GetClaimInfoStateList returns list of claim info states from checkpoint
func (cp *Checkpoint) GetEntries() (ClaimInfoStateList, error) { func (cp *Checkpoint) GetClaimInfoStateList() (ClaimInfoStateList, error) {
var cpData CheckpointData var data CheckpointData
if err := json.Unmarshal([]byte(cp.Data), &cpData); err != nil { if err := json.Unmarshal([]byte(cp.Data), &data); err != nil {
return nil, err return nil, err
} }
return cpData.Entries, nil return data.ClaimInfoStateList, nil
} }

View File

@ -46,6 +46,7 @@ func NewCheckpointer(stateDir, checkpointName string) (Checkpointer, error) {
if err != nil { if err != nil {
return nil, fmt.Errorf("failed to initialize checkpoint manager: %w", err) return nil, fmt.Errorf("failed to initialize checkpoint manager: %w", err)
} }
checkpointer := &checkpointer{ checkpointer := &checkpointer{
checkpointManager: checkpointManager, checkpointManager: checkpointManager,
checkpointName: checkpointName, checkpointName: checkpointName,
@ -55,7 +56,7 @@ func NewCheckpointer(stateDir, checkpointName string) (Checkpointer, error) {
} }
// GetOrCreate gets list of claim info states from a checkpoint // GetOrCreate gets list of claim info states from a checkpoint
// or creates empty list it checkpoint doesn't exist yet // or creates empty list if checkpoint doesn't exist
func (sc *checkpointer) GetOrCreate() (*Checkpoint, error) { func (sc *checkpointer) GetOrCreate() (*Checkpoint, error) {
sc.Lock() sc.Lock()
defer sc.Unlock() defer sc.Unlock()

View File

@ -46,7 +46,7 @@ func TestCheckpointGetOrCreate(t *testing.T) {
}, },
{ {
description: "single-claim-info-state", description: "single-claim-info-state",
checkpointContent: `{"Data":"{\"kind\":\"DRACheckpoint\",\"apiVersion\":\"checkpoint.dra.kubelet.k8s.io/v1\",\"Entries\":[{\"ClaimUID\":\"067798be-454e-4be4-9047-1aa06aea63f7\",\"ClaimName\":\"example\",\"Namespace\":\"default\",\"PodUIDs\":{\"139cdb46-f989-4f17-9561-ca10cfb509a6\":{}},\"DriverState\":{\"test-driver.cdi.k8s.io\":{\"Devices\":[{\"PoolName\":\"worker-1\",\"DeviceName\":\"dev-1\",\"RequestNames\":[\"test request\"],\"CDIDeviceIDs\":[\"example.com/example=cdi-example\"]}]}}}]}","Checksum":1597924435}`, checkpointContent: `{"Data":"{\"kind\":\"DRACheckpoint\",\"apiVersion\":\"checkpoint.dra.kubelet.k8s.io/v1\",\"ClaimInfoStateList\":[{\"ClaimUID\":\"067798be-454e-4be4-9047-1aa06aea63f7\",\"ClaimName\":\"example\",\"Namespace\":\"default\",\"PodUIDs\":{\"139cdb46-f989-4f17-9561-ca10cfb509a6\":{}},\"DriverState\":{\"test-driver.cdi.k8s.io\":{\"Devices\":[{\"PoolName\":\"worker-1\",\"DeviceName\":\"dev-1\",\"RequestNames\":[\"test request\"],\"CDIDeviceIDs\":[\"example.com/example=cdi-example\"]}]}}}]}","Checksum":1656016162}`,
expectedClaimInfoStateList: ClaimInfoStateList{ expectedClaimInfoStateList: ClaimInfoStateList{
{ {
DriverState: map[string]DriverState{ DriverState: map[string]DriverState{
@ -70,7 +70,7 @@ func TestCheckpointGetOrCreate(t *testing.T) {
}, },
{ {
description: "claim-info-state-with-multiple-devices", description: "claim-info-state-with-multiple-devices",
checkpointContent: `{"Data":"{\"kind\":\"DRACheckpoint\",\"apiVersion\":\"checkpoint.dra.kubelet.k8s.io/v1\",\"Entries\":[{\"ClaimUID\":\"067798be-454e-4be4-9047-1aa06aea63f7\",\"ClaimName\":\"example\",\"Namespace\":\"default\",\"PodUIDs\":{\"139cdb46-f989-4f17-9561-ca10cfb509a6\":{}},\"DriverState\":{\"test-driver.cdi.k8s.io\":{\"Devices\":[{\"PoolName\":\"worker-1\",\"DeviceName\":\"dev-1\",\"RequestNames\":[\"test request\"],\"CDIDeviceIDs\":[\"example.com/example=cdi-example\"]},{\"PoolName\":\"worker-1\",\"DeviceName\":\"dev-2\",\"RequestNames\":[\"test request\"],\"CDIDeviceIDs\":[\"example.com/example=cdi-example\"]}]}}}]}","Checksum":1812303514}`, checkpointContent: `{"Data":"{\"kind\":\"DRACheckpoint\",\"apiVersion\":\"checkpoint.dra.kubelet.k8s.io/v1\",\"ClaimInfoStateList\":[{\"ClaimUID\":\"067798be-454e-4be4-9047-1aa06aea63f7\",\"ClaimName\":\"example\",\"Namespace\":\"default\",\"PodUIDs\":{\"139cdb46-f989-4f17-9561-ca10cfb509a6\":{}},\"DriverState\":{\"test-driver.cdi.k8s.io\":{\"Devices\":[{\"PoolName\":\"worker-1\",\"DeviceName\":\"dev-1\",\"RequestNames\":[\"test request\"],\"CDIDeviceIDs\":[\"example.com/example=cdi-example\"]},{\"PoolName\":\"worker-1\",\"DeviceName\":\"dev-2\",\"RequestNames\":[\"test request\"],\"CDIDeviceIDs\":[\"example.com/example=cdi-example\"]}]}}}]}","Checksum":3369508096}`,
expectedClaimInfoStateList: ClaimInfoStateList{ expectedClaimInfoStateList: ClaimInfoStateList{
{ {
DriverState: map[string]DriverState{ DriverState: map[string]DriverState{
@ -100,7 +100,7 @@ func TestCheckpointGetOrCreate(t *testing.T) {
}, },
{ {
description: "two-claim-info-states", description: "two-claim-info-states",
checkpointContent: `{"Data":"{\"kind\":\"DRACheckpoint\",\"apiVersion\":\"checkpoint.dra.kubelet.k8s.io/v1\",\"Entries\":[{\"ClaimUID\":\"067798be-454e-4be4-9047-1aa06aea63f7\",\"ClaimName\":\"example-1\",\"Namespace\":\"default\",\"PodUIDs\":{\"139cdb46-f989-4f17-9561-ca10cfb509a6\":{}},\"DriverState\":{\"test-driver.cdi.k8s.io\":{\"Devices\":[{\"PoolName\":\"worker-1\",\"DeviceName\":\"dev-1\",\"RequestNames\":[\"test request\"],\"CDIDeviceIDs\":[\"example.com/example=cdi-example\"]}]}}},{\"ClaimUID\":\"4cf8db2d-06c0-7d70-1a51-e59b25b2c16c\",\"ClaimName\":\"example-2\",\"Namespace\":\"default\",\"PodUIDs\":{\"139cdb46-f989-4f17-9561-ca10cfb509a6\":{}},\"DriverState\":{\"test-driver.cdi.k8s.io\":{\"Devices\":[{\"PoolName\":\"worker-1\",\"DeviceName\":\"dev-2\",\"RequestNames\":null,\"CDIDeviceIDs\":null}]}}}]}","Checksum":3633532417}`, checkpointContent: `{"Data":"{\"kind\":\"DRACheckpoint\",\"apiVersion\":\"checkpoint.dra.kubelet.k8s.io/v1\",\"ClaimInfoStateList\":[{\"ClaimUID\":\"067798be-454e-4be4-9047-1aa06aea63f7\",\"ClaimName\":\"example-1\",\"Namespace\":\"default\",\"PodUIDs\":{\"139cdb46-f989-4f17-9561-ca10cfb509a6\":{}},\"DriverState\":{\"test-driver.cdi.k8s.io\":{\"Devices\":[{\"PoolName\":\"worker-1\",\"DeviceName\":\"dev-1\",\"RequestNames\":[\"test request\"],\"CDIDeviceIDs\":[\"example.com/example=cdi-example\"]}]}}},{\"ClaimUID\":\"4cf8db2d-06c0-7d70-1a51-e59b25b2c16c\",\"ClaimName\":\"example-2\",\"Namespace\":\"default\",\"PodUIDs\":{\"139cdb46-f989-4f17-9561-ca10cfb509a6\":{}},\"DriverState\":{\"test-driver.cdi.k8s.io\":{\"Devices\":[{\"PoolName\":\"worker-1\",\"DeviceName\":\"dev-2\",\"RequestNames\":null,\"CDIDeviceIDs\":null}]}}}]}","Checksum":1582256999}`,
expectedClaimInfoStateList: ClaimInfoStateList{ expectedClaimInfoStateList: ClaimInfoStateList{
{ {
DriverState: map[string]DriverState{ DriverState: map[string]DriverState{
@ -184,7 +184,7 @@ func TestCheckpointGetOrCreate(t *testing.T) {
assert.ErrorContains(t, err, tc.expectedError) assert.ErrorContains(t, err, tc.expectedError)
} else { } else {
require.NoError(t, err, "unexpected error") require.NoError(t, err, "unexpected error")
stateList, err := checkpoint.GetEntries() stateList, err := checkpoint.GetClaimInfoStateList()
require.NoError(t, err, "could not get data entries from checkpoint") require.NoError(t, err, "could not get data entries from checkpoint")
require.NoError(t, err) require.NoError(t, err)
assert.Equal(t, tc.expectedClaimInfoStateList, stateList) assert.Equal(t, tc.expectedClaimInfoStateList, stateList)
@ -221,10 +221,10 @@ func TestCheckpointStateStore(t *testing.T) {
PodUIDs: sets.New("139cdb46-f989-4f17-9561-ca10cfb509a6"), PodUIDs: sets.New("139cdb46-f989-4f17-9561-ca10cfb509a6"),
}, },
}, },
expectedCheckpointContent: `{"Data":"{\"kind\":\"DRACheckpoint\",\"apiVersion\":\"checkpoint.dra.kubelet.k8s.io/v1\",\"Entries\":[{\"ClaimUID\":\"067798be-454e-4be4-9047-1aa06aea63f7\",\"ClaimName\":\"example\",\"Namespace\":\"default\",\"PodUIDs\":{\"139cdb46-f989-4f17-9561-ca10cfb509a6\":{}},\"DriverState\":{\"test-driver.cdi.k8s.io\":{\"Devices\":[{\"PoolName\":\"worker-1\",\"DeviceName\":\"dev-1\",\"RequestNames\":[\"test request\"],\"CDIDeviceIDs\":[\"example.com/example=cdi-example\"]}]}}}]}","Checksum":1597924435}`, expectedCheckpointContent: `{"Data":"{\"kind\":\"DRACheckpoint\",\"apiVersion\":\"checkpoint.dra.kubelet.k8s.io/v1\",\"ClaimInfoStateList\":[{\"ClaimUID\":\"067798be-454e-4be4-9047-1aa06aea63f7\",\"ClaimName\":\"example\",\"Namespace\":\"default\",\"PodUIDs\":{\"139cdb46-f989-4f17-9561-ca10cfb509a6\":{}},\"DriverState\":{\"test-driver.cdi.k8s.io\":{\"Devices\":[{\"PoolName\":\"worker-1\",\"DeviceName\":\"dev-1\",\"RequestNames\":[\"test request\"],\"CDIDeviceIDs\":[\"example.com/example=cdi-example\"]}]}}}]}","Checksum":1656016162}`,
}, },
{ {
description: "single-claim-info-state-with-multiple-devices", description: "claim-info-state-with-multiple-devices",
claimInfoStateList: ClaimInfoStateList{ claimInfoStateList: ClaimInfoStateList{
{ {
DriverState: map[string]DriverState{ DriverState: map[string]DriverState{
@ -251,7 +251,7 @@ func TestCheckpointStateStore(t *testing.T) {
PodUIDs: sets.New("139cdb46-f989-4f17-9561-ca10cfb509a6"), PodUIDs: sets.New("139cdb46-f989-4f17-9561-ca10cfb509a6"),
}, },
}, },
expectedCheckpointContent: `{"Data":"{\"kind\":\"DRACheckpoint\",\"apiVersion\":\"checkpoint.dra.kubelet.k8s.io/v1\",\"Entries\":[{\"ClaimUID\":\"067798be-454e-4be4-9047-1aa06aea63f7\",\"ClaimName\":\"example\",\"Namespace\":\"default\",\"PodUIDs\":{\"139cdb46-f989-4f17-9561-ca10cfb509a6\":{}},\"DriverState\":{\"test-driver.cdi.k8s.io\":{\"Devices\":[{\"PoolName\":\"worker-1\",\"DeviceName\":\"dev-1\",\"RequestNames\":[\"test request\"],\"CDIDeviceIDs\":[\"example.com/example=cdi-example\"]},{\"PoolName\":\"worker-1\",\"DeviceName\":\"dev-2\",\"RequestNames\":[\"test request\"],\"CDIDeviceIDs\":[\"example.com/example=cdi-example\"]}]}}}]}","Checksum":1812303514}`, expectedCheckpointContent: `{"Data":"{\"kind\":\"DRACheckpoint\",\"apiVersion\":\"checkpoint.dra.kubelet.k8s.io/v1\",\"ClaimInfoStateList\":[{\"ClaimUID\":\"067798be-454e-4be4-9047-1aa06aea63f7\",\"ClaimName\":\"example\",\"Namespace\":\"default\",\"PodUIDs\":{\"139cdb46-f989-4f17-9561-ca10cfb509a6\":{}},\"DriverState\":{\"test-driver.cdi.k8s.io\":{\"Devices\":[{\"PoolName\":\"worker-1\",\"DeviceName\":\"dev-1\",\"RequestNames\":[\"test request\"],\"CDIDeviceIDs\":[\"example.com/example=cdi-example\"]},{\"PoolName\":\"worker-1\",\"DeviceName\":\"dev-2\",\"RequestNames\":[\"test request\"],\"CDIDeviceIDs\":[\"example.com/example=cdi-example\"]}]}}}]}","Checksum":3369508096}`,
}, },
{ {
description: "two-claim-info-states", description: "two-claim-info-states",
@ -291,7 +291,7 @@ func TestCheckpointStateStore(t *testing.T) {
PodUIDs: sets.New("139cdb46-f989-4f17-9561-ca10cfb509a6"), PodUIDs: sets.New("139cdb46-f989-4f17-9561-ca10cfb509a6"),
}, },
}, },
expectedCheckpointContent: `{"Data":"{\"kind\":\"DRACheckpoint\",\"apiVersion\":\"checkpoint.dra.kubelet.k8s.io/v1\",\"Entries\":[{\"ClaimUID\":\"067798be-454e-4be4-9047-1aa06aea63f7\",\"ClaimName\":\"example-1\",\"Namespace\":\"default\",\"PodUIDs\":{\"139cdb46-f989-4f17-9561-ca10cfb509a6\":{}},\"DriverState\":{\"test-driver.cdi.k8s.io\":{\"Devices\":[{\"PoolName\":\"worker-1\",\"DeviceName\":\"dev-1\",\"RequestNames\":[\"test request\"],\"CDIDeviceIDs\":[\"example.com/example=cdi-example\"]}]}}},{\"ClaimUID\":\"4cf8db2d-06c0-7d70-1a51-e59b25b2c16c\",\"ClaimName\":\"example-2\",\"Namespace\":\"default\",\"PodUIDs\":{\"139cdb46-f989-4f17-9561-ca10cfb509a6\":{}},\"DriverState\":{\"test-driver.cdi.k8s.io\":{\"Devices\":[{\"PoolName\":\"worker-1\",\"DeviceName\":\"dev-2\",\"RequestNames\":null,\"CDIDeviceIDs\":null}]}}}]}","Checksum":3633532417}`, expectedCheckpointContent: `{"Data":"{\"kind\":\"DRACheckpoint\",\"apiVersion\":\"checkpoint.dra.kubelet.k8s.io/v1\",\"ClaimInfoStateList\":[{\"ClaimUID\":\"067798be-454e-4be4-9047-1aa06aea63f7\",\"ClaimName\":\"example-1\",\"Namespace\":\"default\",\"PodUIDs\":{\"139cdb46-f989-4f17-9561-ca10cfb509a6\":{}},\"DriverState\":{\"test-driver.cdi.k8s.io\":{\"Devices\":[{\"PoolName\":\"worker-1\",\"DeviceName\":\"dev-1\",\"RequestNames\":[\"test request\"],\"CDIDeviceIDs\":[\"example.com/example=cdi-example\"]}]}}},{\"ClaimUID\":\"4cf8db2d-06c0-7d70-1a51-e59b25b2c16c\",\"ClaimName\":\"example-2\",\"Namespace\":\"default\",\"PodUIDs\":{\"139cdb46-f989-4f17-9561-ca10cfb509a6\":{}},\"DriverState\":{\"test-driver.cdi.k8s.io\":{\"Devices\":[{\"PoolName\":\"worker-1\",\"DeviceName\":\"dev-2\",\"RequestNames\":null,\"CDIDeviceIDs\":null}]}}}]}","Checksum":1582256999}`,
}, },
} }

View File

@ -21,10 +21,6 @@ import (
"k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/sets"
) )
const (
Version = "v1"
)
type ClaimInfoStateList []ClaimInfoState type ClaimInfoStateList []ClaimInfoState
// +k8s:deepcopy-gen=true // +k8s:deepcopy-gen=true