Skip to content

Commit 18906a8

Browse files
committed
Implement DeviceClassResolver interface
1 parent 239435b commit 18906a8

File tree

5 files changed

+65
-0
lines changed

5 files changed

+65
-0
lines changed

cluster-autoscaler/simulator/clustersnapshot/store/basic.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,10 @@ func (snapshot *BasicSnapshotStore) DeviceClasses() fwk.DeviceClassLister {
360360
return snapshot.DraSnapshot().DeviceClasses()
361361
}
362362

363+
func (snapshot *BasicSnapshotStore) DeviceClassResolver() fwk.DeviceClassResolver {
364+
return snapshot.DraSnapshot().DeviceClassResolver()
365+
}
366+
363367
// List returns the list of nodes in the snapshot.
364368
func (snapshot *basicSnapshotStoreNodeLister) List() ([]fwk.NodeInfo, error) {
365369
return (*BasicSnapshotStore)(snapshot).getInternalData().listNodeInfos(), nil

cluster-autoscaler/simulator/clustersnapshot/store/delta.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,10 @@ func (snapshot *DeltaSnapshotStore) CSINodes() fwk.CSINodeLister {
443443
return snapshot.csiSnapshot.CSINodes()
444444
}
445445

446+
func (snapshot *DeltaSnapshotStore) DeviceClassResolver() fwk.DeviceClassResolver {
447+
return snapshot.DraSnapshot().DeviceClassResolver()
448+
}
449+
446450
// AddSchedulerNodeInfo adds a NodeInfo.
447451
func (snapshot *DeltaSnapshotStore) AddSchedulerNodeInfo(nodeInfo fwk.NodeInfo) error {
448452
if _, err := snapshot.data.addNode(nodeInfo.Node()); err != nil {

cluster-autoscaler/simulator/dynamicresources/snapshot/snapshot.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,10 @@ func (s *Snapshot) ResourceClaims() schedulerframework.ResourceClaimTracker {
9191
return snapshotClaimTracker{snapshot: s}
9292
}
9393

94+
func (s *Snapshot) DeviceClassResolver() schedulerframework.DeviceClassResolver {
95+
return newSnapshotDeviceClassResolver(s)
96+
}
97+
9498
// ResourceSlices exposes the Snapshot as schedulerframework.ResourceSliceLister, in order to interact with
9599
// the scheduler framework.
96100
func (s *Snapshot) ResourceSlices() schedulerframework.ResourceSliceLister {
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package snapshot
2+
3+
import (
4+
v1 "k8s.io/api/core/v1"
5+
resourceapi "k8s.io/api/resource/v1"
6+
schedulerframework "k8s.io/kube-scheduler/framework"
7+
)
8+
9+
type snapshotDeviceClassResolver struct {
10+
// resourceName2class maps extended resource name to device class
11+
resourceName2class map[v1.ResourceName]*resourceapi.DeviceClass
12+
}
13+
14+
var _ schedulerframework.DeviceClassResolver = &snapshotDeviceClassResolver{}
15+
16+
func newSnapshotDeviceClassResolver(snapshot *Snapshot) schedulerframework.DeviceClassResolver {
17+
resourceName2class := make(map[v1.ResourceName]*resourceapi.DeviceClass)
18+
for _, class := range snapshot.listDeviceClasses() {
19+
classResourceName := class.Name
20+
extendedResourceName := class.Spec.ExtendedResourceName
21+
if extendedResourceName != nil {
22+
resourceName2class[v1.ResourceName(*extendedResourceName)] = class
23+
}
24+
25+
// Also add the default extended resource name
26+
defaultResourceName := v1.ResourceName(resourceapi.ResourceDeviceClassPrefix + classResourceName)
27+
resourceName2class[defaultResourceName] = class
28+
}
29+
return snapshotDeviceClassResolver{resourceName2class: resourceName2class}
30+
}
31+
32+
// GetDeviceClass returns the device class for the given extended resource name
33+
func (s snapshotDeviceClassResolver) GetDeviceClass(resourceName v1.ResourceName) *resourceapi.DeviceClass {
34+
class, found := s.resourceName2class[resourceName]
35+
if !found {
36+
return nil
37+
}
38+
return class
39+
}

cluster-autoscaler/simulator/framework/delegating_shared_lister.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package framework
1919
import (
2020
"fmt"
2121

22+
v1 "k8s.io/api/core/v1"
2223
resourceapi "k8s.io/api/resource/v1"
2324
storagev1 "k8s.io/api/storage/v1"
2425
"k8s.io/apimachinery/pkg/types"
@@ -83,6 +84,10 @@ func (lister *DelegatingSchedulerSharedLister) UpdateDelegate(delegate SharedLis
8384
lister.delegate = delegate
8485
}
8586

87+
func (lister *DelegatingSchedulerSharedLister) DeviceClassResolver() fwk.DeviceClassResolver {
88+
return lister.delegate.DeviceClassResolver()
89+
}
90+
8691
// ResetDelegate resets delegate to
8792
func (lister *DelegatingSchedulerSharedLister) ResetDelegate() {
8893
lister.delegate = unsetSharedListerSingleton
@@ -95,6 +100,7 @@ type unsetResourceClaimTracker unsetSharedLister
95100
type unsetResourceSliceLister unsetSharedLister
96101
type unsetDeviceClassLister unsetSharedLister
97102
type unsetCSINodeLister unsetSharedLister
103+
type unsetDeviceClassResolver unsetSharedLister
98104

99105
// List always returns an error
100106
func (lister *unsetNodeInfoLister) List() ([]fwk.NodeInfo, error) {
@@ -178,6 +184,10 @@ func (u *unsetDeviceClassLister) Get(className string) (*resourceapi.DeviceClass
178184
return nil, fmt.Errorf("lister not set in delegate")
179185
}
180186

187+
func (u *unsetDeviceClassResolver) GetDeviceClass(resourceName v1.ResourceName) *resourceapi.DeviceClass {
188+
return nil
189+
}
190+
181191
// NodeInfos returns a fake NodeInfoLister which always returns an error
182192
func (lister *unsetSharedLister) NodeInfos() fwk.NodeInfoLister {
183193
return (*unsetNodeInfoLister)(lister)
@@ -204,4 +214,8 @@ func (lister *unsetSharedLister) CSINodes() fwk.CSINodeLister {
204214
return (*unsetCSINodeLister)(lister)
205215
}
206216

217+
func (lister *unsetSharedLister) DeviceClassResolver() fwk.DeviceClassResolver {
218+
return (*unsetDeviceClassResolver)(lister)
219+
}
220+
207221
var unsetSharedListerSingleton *unsetSharedLister

0 commit comments

Comments
 (0)