This is an automated email from the ASF dual-hosted git repository.
wilfred-s pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/yunikorn-k8shim.git
The following commit(s) were added to refs/heads/master by this push:
new bce19851 [YUNIKORN-3286] K8s 1.35 API changes in Shim (#1032)
bce19851 is described below
commit bce198517529cf81982f35b079027fd1dab9cef9
Author: Manikandan R <[email protected]>
AuthorDate: Thu Jun 4 15:13:41 2026 +1000
[YUNIKORN-3286] K8s 1.35 API changes in Shim (#1032)
Implemented CSIManager and CSINodeLister interfaces
Resolved conflicts
Added mocks for CSIManager and CSILister and used the same for unit tests.
Renamed CSI Manager go file
Added license
Closes: #1032
Signed-off-by: Wilfred Spiegelenburg <[email protected]>
---
go.mod | 96 +++++++++----------
go.sum | 106 +++++++++------------
pkg/cache/application_test.go | 8 --
pkg/cache/context.go | 2 +-
pkg/client/apifactory.go | 10 +-
pkg/client/apifactory_mock.go | 4 +-
pkg/common/si_helper_test.go | 16 +---
.../test/csi_lister_mock.go} | 38 ++++----
pkg/common/test/csi_manager_mock.go | 59 ++++++++++++
pkg/plugin/predicates/predicate_manager.go | 60 ++++++------
pkg/plugin/predicates/predicate_manager_test.go | 38 ++++----
pkg/plugin/support/csi_manager.go | 59 ++++++++++++
pkg/plugin/support/framework_handle.go | 52 ++++++----
pkg/plugin/support/framework_handle_test.go | 13 +--
pkg/plugin/support/nodeinfo_lister.go | 5 +-
pkg/plugin/support/shared_lister.go | 14 +--
pkg/plugin/support/storageinfo_lister.go | 6 +-
pkg/shim/scheduler.go | 8 +-
pkg/shim/scheduler_test.go | 8 --
19 files changed, 347 insertions(+), 255 deletions(-)
diff --git a/go.mod b/go.mod
index 8b5f0d65..affe13c0 100644
--- a/go.mod
+++ b/go.mod
@@ -33,17 +33,17 @@ require (
go.uber.org/zap v1.27.1
go.yaml.in/yaml/v3 v3.0.4
gotest.tools/v3 v3.5.2
- k8s.io/api v0.34.6
- k8s.io/apimachinery v0.34.6
- k8s.io/apiserver v0.34.6
- k8s.io/cli-runtime v0.34.6
- k8s.io/client-go v0.34.6
- k8s.io/component-base v0.34.6
- k8s.io/component-helpers v0.34.6
+ k8s.io/api v0.35.5
+ k8s.io/apimachinery v0.35.5
+ k8s.io/apiserver v0.35.5
+ k8s.io/cli-runtime v0.35.5
+ k8s.io/client-go v0.35.5
+ k8s.io/component-base v0.35.5
+ k8s.io/component-helpers v0.35.5
k8s.io/klog/v2 v2.130.1
- k8s.io/kube-scheduler v0.34.6
- k8s.io/kubectl v0.34.6
- k8s.io/kubernetes v1.34.6
+ k8s.io/kube-scheduler v0.35.5
+ k8s.io/kubectl v0.35.5
+ k8s.io/kubernetes v1.35.5
)
require (
@@ -66,7 +66,6 @@ require (
github.com/go-openapi/jsonreference v0.20.2 // indirect
github.com/go-openapi/swag v0.23.0 // indirect
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
- github.com/gogo/protobuf v1.3.2 // indirect
github.com/google/btree v1.1.3 // indirect
github.com/google/cel-go v0.26.0 // indirect
github.com/google/gnostic-models v0.7.0 // indirect
@@ -88,14 +87,12 @@ require (
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f //
indirect
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
github.com/petermattis/goid v0.0.0-20250904145737-900bdf8bb490 //
indirect
- github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/prometheus/client_model v0.6.2 // indirect
github.com/prometheus/common v0.67.5 // indirect
github.com/prometheus/procfs v0.16.1 // indirect
- github.com/rogpeppe/go-internal v1.14.1 // indirect
- github.com/spf13/cobra v1.9.1 // indirect
- github.com/spf13/pflag v1.0.6 // indirect
+ github.com/spf13/cobra v1.10.0 // indirect
+ github.com/spf13/pflag v1.0.9 // indirect
github.com/stoewer/go-strcase v1.3.0 // indirect
github.com/x448/float16 v0.8.4 // indirect
github.com/xlab/treeprint v1.2.0 // indirect
@@ -119,17 +116,17 @@ require (
google.golang.org/genproto/googleapis/rpc
v0.0.0-20260226221140-a57be14db171 // indirect
google.golang.org/grpc v1.79.3 // indirect
google.golang.org/protobuf v1.36.11 // indirect
- gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
+ gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/apiextensions-apiserver v0.0.0 // indirect
k8s.io/cloud-provider v0.34.2 // indirect
- k8s.io/controller-manager v0.34.6 // indirect
+ k8s.io/controller-manager v0.35.5 // indirect
k8s.io/csi-translation-lib v0.34.2 // indirect
- k8s.io/dynamic-resource-allocation v0.34.2 // indirect
- k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b // indirect
- k8s.io/utils v0.0.0-20250604170112-4c0f3b243397 // indirect
- sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
+ k8s.io/dynamic-resource-allocation v0.35.5 // indirect
+ k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 // indirect
+ k8s.io/utils v0.0.0-20251002143259-bc988d571ff4 // indirect
+ sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
sigs.k8s.io/kustomize/api v0.20.1 // indirect
sigs.k8s.io/kustomize/kyaml v0.20.1 // indirect
sigs.k8s.io/randfill v1.0.0 // indirect
@@ -143,35 +140,34 @@ replace (
golang.org/x/net => golang.org/x/net v0.55.0
golang.org/x/oauth2 => golang.org/x/oauth2 v0.36.0
golang.org/x/time => golang.org/x/time v0.15.0
- k8s.io/api => k8s.io/api v0.34.6
- k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.34.6
- k8s.io/apimachinery => k8s.io/apimachinery v0.34.6
- k8s.io/apiserver => k8s.io/apiserver v0.34.6
- k8s.io/cli-runtime => k8s.io/cli-runtime v0.34.6
- k8s.io/client-go => k8s.io/client-go v0.34.6
- k8s.io/cloud-provider => k8s.io/cloud-provider v0.34.6
- k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.34.6
- k8s.io/code-generator => k8s.io/code-generator v0.34.6
- k8s.io/component-base => k8s.io/component-base v0.34.6
- k8s.io/component-helpers => k8s.io/component-helpers v0.34.6
- k8s.io/controller-manager => k8s.io/controller-manager v0.34.6
- k8s.io/cri-api => k8s.io/cri-api v0.34.6
- k8s.io/cri-client => k8s.io/cri-client v0.34.6
- k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.34.6
- k8s.io/dynamic-resource-allocation =>
k8s.io/dynamic-resource-allocation v0.34.6
- k8s.io/endpointslice => k8s.io/endpointslice v0.34.6
- k8s.io/externaljwt => k8s.io/externaljwt v0.34.6
+ k8s.io/api => k8s.io/api v0.35.5
+ k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.35.5
+ k8s.io/apimachinery => k8s.io/apimachinery v0.35.5
+ k8s.io/apiserver => k8s.io/apiserver v0.35.5
+ k8s.io/cli-runtime => k8s.io/cli-runtime v0.35.5
+ k8s.io/client-go => k8s.io/client-go v0.35.5
+ k8s.io/cloud-provider => k8s.io/cloud-provider v0.35.5
+ k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.35.5
+ k8s.io/code-generator => k8s.io/code-generator v0.35.5
+ k8s.io/component-base => k8s.io/component-base v0.35.5
+ k8s.io/component-helpers => k8s.io/component-helpers v0.35.5
+ k8s.io/controller-manager => k8s.io/controller-manager v0.35.5
+ k8s.io/cri-api => k8s.io/cri-api v0.35.5
+ k8s.io/cri-client => k8s.io/cri-client v0.35.5
+ k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.35.5
+ k8s.io/dynamic-resource-allocation =>
k8s.io/dynamic-resource-allocation v0.35.5
+ k8s.io/endpointslice => k8s.io/endpointslice v0.35.5
+ k8s.io/externaljwt => k8s.io/externaljwt v0.35.5
k8s.io/klog/v2 => k8s.io/klog/v2 v2.130.1
- k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.34.6
- k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.34.6
- k8s.io/kube-proxy => k8s.io/kube-proxy v0.34.6
- k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.34.6
- k8s.io/kubectl => k8s.io/kubectl v0.34.6
- k8s.io/kubelet => k8s.io/kubelet v0.34.6
- k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.34.6
- k8s.io/metrics => k8s.io/metrics v0.34.6
- k8s.io/mount-utils => k8s.io/mount-utils v0.34.6
- k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.34.6
- k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.34.6
+ k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.35.5
+ k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.35.5
+ k8s.io/kube-proxy => k8s.io/kube-proxy v0.35.5
+ k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.35.5
+ k8s.io/kubectl => k8s.io/kubectl v0.35.5
+ k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.35.5
+ k8s.io/metrics => k8s.io/metrics v0.35.5
+ k8s.io/mount-utils => k8s.io/mount-utils v0.35.5
+ k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.35.5
+ k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.35.5
k8s.io/utils => k8s.io/utils v0.0.0-20250604170112-4c0f3b243397
)
diff --git a/go.sum b/go.sum
index bf55dc41..c8762c55 100644
--- a/go.sum
+++ b/go.sum
@@ -64,8 +64,6 @@ github.com/go-task/slim-sprig/v3 v3.0.0
h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1v
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod
h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
github.com/goccy/go-yaml v1.18.0
h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw=
github.com/goccy/go-yaml v1.18.0/go.mod
h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA=
-github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
-github.com/gogo/protobuf v1.3.2/go.mod
h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/protobuf v1.5.4
h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod
h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=
@@ -74,7 +72,6 @@ github.com/google/cel-go v0.26.0
h1:DPGjXackMpJWH680oGY4lZhYjIameYmR+/6RBdDGmaI=
github.com/google/cel-go v0.26.0/go.mod
h1:A9O8OU9rdvrK5MQyrqfIxo1a0u4g3sF8KB6PUIaryMM=
github.com/google/gnostic-models v0.7.0
h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo=
github.com/google/gnostic-models v0.7.0/go.mod
h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ=
-github.com/google/go-cmp v0.6.0/go.mod
h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod
h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/gofuzz v1.0.0/go.mod
h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
@@ -110,8 +107,6 @@ github.com/json-iterator/go v1.1.12
h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr
github.com/json-iterator/go v1.1.12/go.mod
h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/julienschmidt/httprouter v1.3.0
h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U=
github.com/julienschmidt/httprouter v1.3.0/go.mod
h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
-github.com/kisielk/errcheck v1.5.0/go.mod
h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
-github.com/kisielk/gotool v1.0.0/go.mod
h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.18.0
h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
github.com/klauspost/compress v1.18.0/go.mod
h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
github.com/kr/pretty v0.2.1/go.mod
h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
@@ -160,8 +155,6 @@ github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod
h1:uqqh8zWWbv1HBMNONnaR
github.com/petermattis/goid v0.0.0-20250813065127-a731cc31b4fe/go.mod
h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
github.com/petermattis/goid v0.0.0-20250904145737-900bdf8bb490
h1:QTvNkZ5ylY0PGgA+Lih+GdboMLY/G9SEGLMEGVjTVA4=
github.com/petermattis/goid v0.0.0-20250904145737-900bdf8bb490/go.mod
h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4=
-github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
-github.com/pkg/errors v0.9.1/go.mod
h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0
h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod
h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_golang v1.23.2
h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
@@ -172,6 +165,8 @@ github.com/prometheus/common v0.67.5
h1:pIgK94WWlQt1WLwAC5j2ynLaBRDiinoAb86HZHTU
github.com/prometheus/common v0.67.5/go.mod
h1:SjE/0MzDEEAyrdr5Gqc6G+sXI67maCxzaT3A2+HqjUw=
github.com/prometheus/procfs v0.16.1
h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg=
github.com/prometheus/procfs v0.16.1/go.mod
h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is=
+github.com/robfig/cron/v3 v3.0.1
h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
+github.com/robfig/cron/v3 v3.0.1/go.mod
h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
github.com/rogpeppe/go-internal v1.14.1
h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
github.com/rogpeppe/go-internal v1.14.1/go.mod
h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
github.com/russross/blackfriday/v2 v2.1.0/go.mod
h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
@@ -179,10 +174,11 @@ github.com/sasha-s/go-deadlock v0.3.9
h1:fiaT9rB7g5sr5ddNZvlwheclN9IP86eFW9WgqlE
github.com/sasha-s/go-deadlock v0.3.9/go.mod
h1:KuZj51ZFmx42q/mPaYbRk0P1xcwe697zsJKE03vD4/Y=
github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ=
github.com/sergi/go-diff v1.2.0/go.mod
h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
-github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
-github.com/spf13/cobra v1.9.1/go.mod
h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
-github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
-github.com/spf13/pflag v1.0.6/go.mod
h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/cobra v1.10.0 h1:a5/WeUlSDCvV5a45ljW2ZFtV0bTDpkfSAj3uqB6Sc+0=
+github.com/spf13/cobra v1.10.0/go.mod
h1:9dhySC7dnTtEiqzmqfkLj47BslqLCUPMXjG2lj/NgoE=
+github.com/spf13/pflag v1.0.8/go.mod
h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/pflag v1.0.9 h1:9exaQaMOCwffKiiiYk6/BndUBv+iRViNW+4lEMi0PvY=
+github.com/spf13/pflag v1.0.9/go.mod
h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stoewer/go-strcase v1.3.0
h1:g0eASXYtp+yvN9fK8sH94oCIk0fau9uV1/ZdJ0AVEzs=
github.com/stoewer/go-strcase v1.3.0/go.mod
h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo=
github.com/stretchr/objx v0.1.0/go.mod
h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
@@ -209,9 +205,6 @@ github.com/x448/float16 v0.8.4
h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
github.com/x448/float16 v0.8.4/go.mod
h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
github.com/xlab/treeprint v1.2.0
h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ=
github.com/xlab/treeprint v1.2.0/go.mod
h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0=
-github.com/yuin/goldmark v1.1.27/go.mod
h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod
h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.4.13/go.mod
h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.opentelemetry.io/auto/sdk v1.2.1
h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
go.opentelemetry.io/auto/sdk v1.2.1/go.mod
h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
go.opentelemetry.io/otel v1.43.0
h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I=
@@ -244,28 +237,19 @@ golang.org/x/net v0.55.0
h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8=
golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww=
golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
golang.org/x/oauth2 v0.36.0/go.mod
h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
golang.org/x/sync v0.20.0/go.mod
h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
-golang.org/x/sys v0.44.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY=
golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
-golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa/go.mod
h1:kHjTxDEnAu6/Nl9lDkzjWpR+bmKfxeiRuSDlsMb70gE=
golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4=
golang.org/x/term v0.43.0/go.mod
h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk=
golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc=
golang.org/x/text v0.37.0/go.mod
h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38=
golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U=
golang.org/x/time v0.15.0/go.mod
h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno=
-golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod
h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod
h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c=
golang.org/x/tools v0.44.0/go.mod
h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI=
-golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
gonum.org/v1/gonum v0.16.0/go.mod
h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57
h1:JLQynH/LBHfCTSbDWl+py8C+Rg/k1OVH3xfcaiANuF0=
@@ -279,8 +263,8 @@ google.golang.org/protobuf v1.36.11/go.mod
h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c
h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod
h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
-gopkg.in/evanphx/json-patch.v4 v4.12.0
h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4=
-gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod
h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
+gopkg.in/evanphx/json-patch.v4 v4.13.0
h1:czT3CmqEaQ1aanPc5SdlgQrrEIb8w/wwCvWWnfEbYzo=
+gopkg.in/evanphx/json-patch.v4 v4.13.0/go.mod
h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod
h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
@@ -288,46 +272,46 @@ gopkg.in/yaml.v3 v3.0.1
h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gotest.tools/v3 v3.5.2 h1:7koQfIKdy+I8UTetycgUqXWSDwpgv193Ka+qRsmBY8Q=
gotest.tools/v3 v3.5.2/go.mod h1:LtdLGcnqToBH83WByAAi/wiwSFCArdFIUV/xxN4pcjA=
-k8s.io/api v0.34.6 h1:0ReeOHQfV9SwQ8CMOHkPbM/GscIT3gN2qh463TOEEk4=
-k8s.io/api v0.34.6/go.mod h1:u6eOg5ckbO2DUKiyVp7mUMVIA+qZZdW2oyKDhs8nXec=
-k8s.io/apiextensions-apiserver v0.34.6
h1:iEEpenT99Bn4+85NFj3Psd0ZDDUecl7W1Q297GN9Kok=
-k8s.io/apiextensions-apiserver v0.34.6/go.mod
h1:S8qCNZck7vV8aHqnS5t2Ccew4xJsZ9GpP6n3NVqHg9o=
-k8s.io/apimachinery v0.34.6 h1:Y/ZNX0Mf1E+CT8clgFzLIkOhkbRLTSHqv6+eJnMJaoQ=
-k8s.io/apimachinery v0.34.6/go.mod
h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw=
-k8s.io/apiserver v0.34.6 h1:4qu8CpD6haT/heJMWTs7B7gr+1FIvL/i8QJel7ULlMg=
-k8s.io/apiserver v0.34.6/go.mod h1:JlgULDmLA8USqiOmVeMKCwyRH3jhtko71DYz87FkMls=
-k8s.io/cli-runtime v0.34.6 h1:As2+xkIM5faWLQrWgPLgxTFMt0488QvoU8jep3Hs9kA=
-k8s.io/cli-runtime v0.34.6/go.mod
h1:0iboCfs5Ys3sDu7QrOkOloqoPwAQTMAguRHkKh+j+LA=
-k8s.io/client-go v0.34.6 h1:8aF4tJiZolSdliT5nhJnBx49Om2ET3Tn3/JKKpJk4gI=
-k8s.io/client-go v0.34.6/go.mod h1:ZntANq4HsaiOD0rIhLHTdZT/aLkv4NVyI/glqocESTQ=
-k8s.io/cloud-provider v0.34.6 h1:JfxYCK1BIl8Ty78BQeYt+BDkl2+vpp8uycvxOjeODvE=
-k8s.io/cloud-provider v0.34.6/go.mod
h1:V/3p4dQ9VFWvufcbFKaLlBjaDzvuk/9EGcbZ/JvAYGM=
-k8s.io/component-base v0.34.6 h1:+hkR1hJI2Bsfp5SbTGmGcKdkGZoa0aX68eMFGeZPUIg=
-k8s.io/component-base v0.34.6/go.mod
h1:D2fBgLp3Rwe4+P0JTLhRPDJWrWddwTu/aoBT0FMQ75M=
-k8s.io/component-helpers v0.34.6
h1:fLYgk0Jpgr7ykcQUL8bomqKtqMCV8lnfqV3iyhjHdsQ=
-k8s.io/component-helpers v0.34.6/go.mod
h1:eAQxT3xRPZ56H4gLILpuXWKwC92FWhYMOsEtWLQgK9o=
-k8s.io/controller-manager v0.34.6
h1:e+qcnaGyOThkEMPL+GJ8IiPRDuSPDLgc9FbpvShcOl0=
-k8s.io/controller-manager v0.34.6/go.mod
h1:PTc8yq8l80jp7dGFh8spdJVKAzNCcS13CceylpG7bMs=
-k8s.io/csi-translation-lib v0.34.6
h1:R8OsvxGesfmOj6JB8jnsWyQeQk5uZIDM+4FbHGZzOXY=
-k8s.io/csi-translation-lib v0.34.6/go.mod
h1:JHMj9fgY8mlqbttm2al8Y4+1R6v9SEUPagvH0ha7+MI=
-k8s.io/dynamic-resource-allocation v0.34.6
h1:92xWI5wZRxFngPSfzTaqcVB75uc3GghQfDpLsGuI09g=
-k8s.io/dynamic-resource-allocation v0.34.6/go.mod
h1:c+0+t5BVAkKjvUIPMB7nxS8NUfaiETMTMGrEa6zUaWQ=
+k8s.io/api v0.35.5 h1:BrFeUDGY/LBtlA1R5RoxhlYRHs76RnQBc6xbm/y7hsQ=
+k8s.io/api v0.35.5/go.mod h1:xWkFhMnoPZdTAQh95Rlw3zZpUUNVlFHcuESUYd06BWM=
+k8s.io/apiextensions-apiserver v0.35.5
h1:HttlJjgsx3ddLsASCqklkKvfBlwUoXma8VLpeMG5YL8=
+k8s.io/apiextensions-apiserver v0.35.5/go.mod
h1:4xbAgP/jbt8sVHE3H4DfE1gSPLUoSzXrNqhZz1lTHKc=
+k8s.io/apimachinery v0.35.5 h1:lbjjjUfVeVqFbiOpyhqZHc8DhiYkWOxSNij7lHx2U8Y=
+k8s.io/apimachinery v0.35.5/go.mod
h1:NNi1taPOpep0jOj+oRha3mBJPqvi0hGdaV8TCqGQ+cc=
+k8s.io/apiserver v0.35.5 h1:ZtFpSEmxf/VmOdbL3bo7hLxyNRorRegqOLmYSW0mxEo=
+k8s.io/apiserver v0.35.5/go.mod h1:6NNWFTq/UosCwUmqhQDC+3ApzSx5ekeYMIwzSG+49VU=
+k8s.io/cli-runtime v0.35.5 h1:zyeQFN1+2lr4/rksBWUyeVCA/pZUHrrDs3RYGrO4Wuw=
+k8s.io/cli-runtime v0.35.5/go.mod
h1:TJnEEtxrk8C4AkFwhbH6mrTy6iPo/PM3NkrNU9RWGy4=
+k8s.io/client-go v0.35.5 h1:wUrgqVSmFRw75bgSHY7X0G/hZM/QYpV0Hg7SYYOYpFk=
+k8s.io/client-go v0.35.5/go.mod h1:Z0mDcAJsX1Y7RQfuQlJipiRtqf8Mhk2VDu1/JvRqdGo=
+k8s.io/cloud-provider v0.35.5 h1:uy8EUTMOImRCtT+BEPuVcJXZjvD+vhlpiSk8MebnbD4=
+k8s.io/cloud-provider v0.35.5/go.mod
h1:q0oauUXdd7xZGwfv25OVWDneym2LEdJRFVPpDTvNQrU=
+k8s.io/component-base v0.35.5 h1:1y1xxfpFNkNi4RMi6bvPNN4aDr9VhOijtEfrqnhPijs=
+k8s.io/component-base v0.35.5/go.mod
h1:n/+aL98XYINubqIu/Okh6mS/kZT2nMeN4IQkQR4VXRg=
+k8s.io/component-helpers v0.35.5
h1:ng4/0ogRWwfusesdsvb7wsl4NBALzW6XW8nATVcq+m4=
+k8s.io/component-helpers v0.35.5/go.mod
h1:kcOg9HS2PqnPeByHNv15d+wq7RnzBKPHYfgHALdaRzY=
+k8s.io/controller-manager v0.35.5
h1:NVP0vIUmUXxC/+9GKepjOlPyVrjhh/+LRCxAM9zrVRM=
+k8s.io/controller-manager v0.35.5/go.mod
h1:wa+lpKMHKqir8f5Jzcn5yHjKrBqywr7lsNuJJSMA8gY=
+k8s.io/csi-translation-lib v0.35.5
h1:dsz37ZSsxyqBDqDLeaIow3djt/HezFNXb+Kage62+tw=
+k8s.io/csi-translation-lib v0.35.5/go.mod
h1:T8cqGfjOupK24kLW2UR653Ee2KANff3qCo9dWP6mv9M=
+k8s.io/dynamic-resource-allocation v0.35.5
h1:xwOBJoFP0Oq+SrVKiCM9lfGNY1OCA8jvejDvB07+I5U=
+k8s.io/dynamic-resource-allocation v0.35.5/go.mod
h1:KEKLo0+J2cCENtzwa2Tg06XeRwZaSJBvCivXBU0d38Y=
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
-k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b
h1:MloQ9/bdJyIu9lb1PzujOPolHyvO06MXG5TUIj2mNAA=
-k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b/go.mod
h1:UZ2yyWbFTpuhSbFhv24aGNOdoRdJZgsIObGBUaYVsts=
-k8s.io/kube-scheduler v0.34.6 h1:k6S7bW8LY4jf8GEJqoS66DBFRNDDny4L/A7ITOJvpLA=
-k8s.io/kube-scheduler v0.34.6/go.mod
h1:zY/4rMSkmGVQdyqovMdlCBzX2pWWjQjeOYeYM9ponxY=
-k8s.io/kubectl v0.34.6 h1:IxLtdBssejoWWeG7zCDiDc2E+aKG6S69ue/kCOHZi6I=
-k8s.io/kubectl v0.34.6/go.mod h1:Vw5UnMi+lgzXv5sfBycy/BdkPP451DmvarxnMJaMJQA=
-k8s.io/kubelet v0.34.6 h1:tjR+jIw5/M3FpAHTM9leSygdj/7CPi7heLaH+RS7ASQ=
-k8s.io/kubelet v0.34.6/go.mod h1:hCR2ctzu3rg7hWpHn5t3CNf0cWCV5PulTbAfP0fy9ec=
-k8s.io/kubernetes v1.34.6 h1:zghBAjObluxBc5bkVXXvTA+fn9dkYSIq1QvzTAOWvsw=
-k8s.io/kubernetes v1.34.6/go.mod
h1:m6pZk6a179pRo2wsTiCPORJ86iOEQmfIzUvtyEF8BwA=
+k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912
h1:Y3gxNAuB0OBLImH611+UDZcmKS3g6CthxToOb37KgwE=
+k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912/go.mod
h1:kdmbQkyfwUagLfXIad1y2TdrjPFWp2Q89B3qkRwf/pQ=
+k8s.io/kube-scheduler v0.35.5 h1:ISmIG5Pj930rFCNmFG63YzaLMmSaElzq1sGFuGYxNdw=
+k8s.io/kube-scheduler v0.35.5/go.mod
h1:csYs17kKX+9k4IvS5m3SU6ad4DoG9BiGRIEj6PzkQKk=
+k8s.io/kubectl v0.35.5 h1:768G/MoK8SlgMObXVukluHewKIf8RW7oJYa2MTDh3fk=
+k8s.io/kubectl v0.35.5/go.mod h1:rii0tmjY2HQVPSiurhP/XxlnMmrXbNzjPDTeUY8EOZU=
+k8s.io/kubelet v0.35.5 h1:asU07lJvTB9lK7XPEcQJdPrV96eu/zNGkJVSEWeZFFQ=
+k8s.io/kubelet v0.35.5/go.mod h1:cLyY+spNxyf1nXtkSavVfbHX7pZ7wwoWigoeH1iIMcE=
+k8s.io/kubernetes v1.35.5 h1:xnHap3r0mqp36mFaLOt1Jreh8Az2+ZEhiUtIJGhou2w=
+k8s.io/kubernetes v1.35.5/go.mod
h1:fPfnQs8GtfrLQ+KuOcpvwQ+mV17jVcgdvPL6ZHxKp10=
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397
h1:hwvWFiBzdWw1FhfY1FooPn3kzWuJ8tmbZBHi4zVsl1Y=
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397/go.mod
h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
-sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8
h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE=
-sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod
h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
+sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730
h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg=
+sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730/go.mod
h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
sigs.k8s.io/kustomize/api v0.20.1
h1:iWP1Ydh3/lmldBnH/S5RXgT98vWYMaTUL1ADcr+Sv7I=
sigs.k8s.io/kustomize/api v0.20.1/go.mod
h1:t6hUFxO+Ph0VxIk1sKp1WS0dOjbPCtLJ4p8aADLwqjM=
sigs.k8s.io/kustomize/kyaml v0.20.1
h1:PCMnA2mrVbRP3NIB6v9kYCAc38uvFLVs8j/CD567A78=
diff --git a/pkg/cache/application_test.go b/pkg/cache/application_test.go
index 8a5244e4..f54bf79c 100644
--- a/pkg/cache/application_test.go
+++ b/pkg/cache/application_test.go
@@ -31,9 +31,7 @@ import (
v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource"
apis "k8s.io/apimachinery/pkg/apis/meta/v1"
- "k8s.io/apiserver/pkg/util/feature"
k8sEvents "k8s.io/client-go/tools/events"
- "k8s.io/kubernetes/pkg/features"
"github.com/apache/yunikorn-k8shim/pkg/client"
"github.com/apache/yunikorn-k8shim/pkg/common"
@@ -47,12 +45,6 @@ import (
"github.com/apache/yunikorn-scheduler-interface/lib/go/si"
)
-func init() {
- if err := feature.DefaultMutableFeatureGate.Set(fmt.Sprintf("%s=false",
features.DynamicResourceAllocation)); err != nil {
- panic(fmt.Errorf("unable to set DynamicResourceAllocation
feature gate: %v", err))
- }
-}
-
type recorderTime struct {
time int64
lock *locking.RWMutex
diff --git a/pkg/cache/context.go b/pkg/cache/context.go
index e5290d23..fc742129 100644
--- a/pkg/cache/context.go
+++ b/pkg/cache/context.go
@@ -105,7 +105,7 @@ func NewContextWithBootstrapConfigMaps(apis
client.APIProvider, bootstrapConfigM
sharedLister := support.NewSharedLister(ctx.schedulerCache)
clientSet := apis.GetAPIs().KubeClient.GetClientSet()
informerFactory := apis.GetAPIs().InformerFactory
- ctx.predManager =
predicates.NewPredicateManager(support.NewFrameworkHandle(sharedLister,
informerFactory, clientSet))
+ ctx.predManager =
predicates.NewPredicateManager(support.NewFrameworkHandle(sharedLister,
informerFactory, clientSet,
support.NewCSIManager(apis.GetAPIs().CSINodeInformer.Lister())))
return ctx
}
diff --git a/pkg/client/apifactory.go b/pkg/client/apifactory.go
index bdb928a3..1e9bff61 100644
--- a/pkg/client/apifactory.go
+++ b/pkg/client/apifactory.go
@@ -90,7 +90,7 @@ type APIFactory struct {
lock *locking.RWMutex
}
-func NewAPIFactory(scheduler api.SchedulerAPI, informerFactory
informers.SharedInformerFactory, configs *conf.SchedulerConf, testMode bool)
*APIFactory {
+func NewAPIFactory(scheduler api.SchedulerAPI, informerFactory
informers.SharedInformerFactory, configs *conf.SchedulerConf, testMode bool)
(*APIFactory, error) {
kubeClient := NewKubeClient(configs.KubeConfig)
namespaceInformerFactory :=
informers.NewSharedInformerFactoryWithOptions(kubeClient.GetClientSet(), 0,
informers.WithNamespace(configs.Namespace))
// init informers
@@ -118,7 +118,7 @@ func NewAPIFactory(scheduler api.SchedulerAPI,
informerFactory informers.SharedI
}
// create a volume binder (needs the informers)
- volumeBinder := volumebinding.NewVolumeBinder(
+ volumeBinder, err := volumebinding.NewVolumeBinder(
klog.NewKlogr(),
kubeClient.GetClientSet(),
feature.Features{},
@@ -130,6 +130,10 @@ func NewAPIFactory(scheduler api.SchedulerAPI,
informerFactory informers.SharedI
storageInformer,
capacityCheck,
configs.VolumeBindTimeout)
+ if err != nil {
+ log.Log(log.ShimClient).Error("unable to create the volume
binder", zap.Error(err))
+ return nil, err
+ }
return &APIFactory{
clients: &Clients{
@@ -157,7 +161,7 @@ func NewAPIFactory(scheduler api.SchedulerAPI,
informerFactory informers.SharedI
testMode: testMode,
stopChan: make(chan struct{}),
lock: &locking.RWMutex{},
- }
+ }, nil
}
func (s *APIFactory) GetAPIs() *Clients {
diff --git a/pkg/client/apifactory_mock.go b/pkg/client/apifactory_mock.go
index 8a93a81a..417cdeb5 100644
--- a/pkg/client/apifactory_mock.go
+++ b/pkg/client/apifactory_mock.go
@@ -470,6 +470,7 @@ func (m *MockedStorageClassInformer) Lister()
storagev1.StorageClassLister {
type MockedCSINodeInformer struct {
informer cache.SharedIndexInformer
+ lister storagev1.CSINodeLister
}
func (m *MockedCSINodeInformer) Informer() cache.SharedIndexInformer {
@@ -477,12 +478,13 @@ func (m *MockedCSINodeInformer) Informer()
cache.SharedIndexInformer {
}
func (m *MockedCSINodeInformer) Lister() storagev1.CSINodeLister {
- return nil
+ return m.lister
}
func NewMockedCSINodeInformer() *MockedCSINodeInformer {
return &MockedCSINodeInformer{
informer: &test.SharedInformerMock{},
+ lister: &test.CSINodeListerMock{},
}
}
diff --git a/pkg/common/si_helper_test.go b/pkg/common/si_helper_test.go
index 84a802e7..e082ffb0 100644
--- a/pkg/common/si_helper_test.go
+++ b/pkg/common/si_helper_test.go
@@ -268,9 +268,7 @@ func TestCreateAllocationRequestForTask(t *testing.T) {
asks := updateRequest.Allocations
assert.Equal(t, len(asks), 1)
allocAsk := asks[0]
- if allocAsk == nil {
- t.Fatal("ask cannot be nil")
- }
+ assert.Check(t, allocAsk != nil)
assert.Equal(t, allocAsk.Priority, int32(0))
assert.Assert(t, allocAsk.PreemptionPolicy != nil)
assert.Equal(t, allocAsk.PreemptionPolicy.AllowPreemptSelf, false)
@@ -301,9 +299,7 @@ func TestCreateAllocationRequestForTask(t *testing.T) {
asks1 := updateRequest1.Allocations
assert.Equal(t, len(asks1), 1)
allocAsk1 := asks1[0]
- if allocAsk1 == nil {
- t.Fatal("ask cannot be nil")
- }
+ assert.Check(t, allocAsk1 != nil)
assert.Assert(t, allocAsk1.PreemptionPolicy != nil)
assert.Equal(t, allocAsk1.PreemptionPolicy.AllowPreemptSelf, true)
assert.Equal(t, allocAsk1.PreemptionPolicy.AllowPreemptOther, false)
@@ -344,9 +340,7 @@ func TestCreateAllocationForTask(t *testing.T) {
allocs := updateRequest.Allocations
assert.Equal(t, len(allocs), 1)
alloc := allocs[0]
- if alloc == nil {
- t.Fatal("alloc cannot be nil")
- }
+ assert.Check(t, alloc != nil)
assert.Equal(t, alloc.Priority, int32(0))
assert.Assert(t, alloc.PreemptionPolicy != nil)
assert.Equal(t, alloc.PreemptionPolicy.AllowPreemptSelf, false)
@@ -380,9 +374,7 @@ func TestCreateAllocationForTask(t *testing.T) {
allocs1 := updateRequest1.Allocations
assert.Equal(t, len(allocs1), 1)
alloc1 := allocs1[0]
- if alloc1 == nil {
- t.Fatal("alloc cannot be nil")
- }
+ assert.Check(t, alloc != nil)
assert.Assert(t, alloc1.PreemptionPolicy != nil)
assert.Equal(t, alloc1.PreemptionPolicy.AllowPreemptSelf, true)
assert.Equal(t, alloc1.PreemptionPolicy.AllowPreemptOther, false)
diff --git a/pkg/plugin/support/shared_lister.go
b/pkg/common/test/csi_lister_mock.go
similarity index 54%
copy from pkg/plugin/support/shared_lister.go
copy to pkg/common/test/csi_lister_mock.go
index 108e7ba0..61bde98f 100644
--- a/pkg/plugin/support/shared_lister.go
+++ b/pkg/common/test/csi_lister_mock.go
@@ -16,32 +16,30 @@
limitations under the License.
*/
-package support
+package test
import (
- "k8s.io/kubernetes/pkg/scheduler/framework"
+ "fmt"
- "github.com/apache/yunikorn-k8shim/pkg/cache/external"
+ storagev1 "k8s.io/api/storage/v1"
+ "k8s.io/apimachinery/pkg/api/errors"
+ "k8s.io/apimachinery/pkg/labels"
)
-type sharedListerImpl struct {
- nodeInfos framework.NodeInfoLister
- storageInfos framework.StorageInfoLister
-}
-
-func (s sharedListerImpl) NodeInfos() framework.NodeInfoLister {
- return s.nodeInfos
-}
+// CSINodeListerMock declares a storagev1.CSINode type for testing.
+type CSINodeListerMock []storagev1.CSINode
-func (s sharedListerImpl) StorageInfos() framework.StorageInfoLister {
- return s.storageInfos
+// Get returns a fake CSINode object.
+func (n CSINodeListerMock) Get(name string) (*storagev1.CSINode, error) {
+ for _, cn := range n {
+ if cn.Name == name {
+ return &cn, nil
+ }
+ }
+ return nil, errors.NewNotFound(storagev1.Resource("csinodes"), name)
}
-var _ framework.SharedLister = &sharedListerImpl{}
-
-func NewSharedLister(cache *external.SchedulerCache) framework.SharedLister {
- return &sharedListerImpl{
- nodeInfos: NewNodeInfoLister(cache),
- storageInfos: NewStorageInfoLister(cache),
- }
+// List lists all CSINodes in the indexer.
+func (n CSINodeListerMock) List(selector labels.Selector) (ret
[]*storagev1.CSINode, err error) {
+ return nil, fmt.Errorf("not implemented")
}
diff --git a/pkg/common/test/csi_manager_mock.go
b/pkg/common/test/csi_manager_mock.go
new file mode 100644
index 00000000..2f98e0e2
--- /dev/null
+++ b/pkg/common/test/csi_manager_mock.go
@@ -0,0 +1,59 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package test
+
+import (
+ storagev1 "k8s.io/api/storage/v1"
+ "k8s.io/apimachinery/pkg/labels"
+ storagelisters "k8s.io/client-go/listers/storage/v1"
+ fwk "k8s.io/kube-scheduler/framework"
+)
+
+// CSIManagerImplMock is an implementation of the CSIManager interface.
+type CSIManagerImplMock struct {
+ csiNodeLister *CsiNodeListerImplMock
+}
+
+var _ fwk.CSIManager = &CSIManagerImplMock{}
+
+func NewCSIManagerMock(csiNodeLister storagelisters.CSINodeLister)
*CSIManagerImplMock {
+ return &CSIManagerImplMock{csiNodeLister:
NewCSINodeListerMock(csiNodeLister)}
+}
+
+func (m *CSIManagerImplMock) CSINodes() fwk.CSINodeLister {
+ return m.csiNodeLister
+}
+
+type CsiNodeListerImplMock struct {
+ csiNodeLister storagelisters.CSINodeLister
+}
+
+var _ fwk.CSINodeLister = &CsiNodeListerImplMock{}
+
+func NewCSINodeListerMock(csiNodeLister storagelisters.CSINodeLister)
*CsiNodeListerImplMock {
+ return &CsiNodeListerImplMock{csiNodeLister: csiNodeLister}
+}
+
+func (l *CsiNodeListerImplMock) List() ([]*storagev1.CSINode, error) {
+ return l.csiNodeLister.List(labels.Everything())
+}
+
+func (l *CsiNodeListerImplMock) Get(name string) (*storagev1.CSINode, error) {
+ return l.csiNodeLister.Get(name)
+}
diff --git a/pkg/plugin/predicates/predicate_manager.go
b/pkg/plugin/predicates/predicate_manager.go
index f53660ed..a2339e90 100644
--- a/pkg/plugin/predicates/predicate_manager.go
+++ b/pkg/plugin/predicates/predicate_manager.go
@@ -55,12 +55,12 @@ var _ PredicateManager = &predicateManagerImpl{}
var configDecoder = scheme.Codecs.UniversalDecoder()
type predicateManagerImpl struct {
- reservationPreFilters *[]framework.PreFilterPlugin
- allocationPreFilters *[]framework.PreFilterPlugin
- reservationFilters *[]framework.FilterPlugin
- allocationFilters *[]framework.FilterPlugin
+ reservationPreFilters *[]fwk.PreFilterPlugin
+ allocationPreFilters *[]fwk.PreFilterPlugin
+ reservationFilters *[]fwk.FilterPlugin
+ allocationFilters *[]fwk.FilterPlugin
klogger klog.Logger
- sharedLister framework.SharedLister
+ sharedLister fwk.SharedLister
}
func (p *predicateManagerImpl) EventsToRegister(queueingHintFn
fwk.QueueingHintFn) []fwk.ClusterEventWithHint {
@@ -74,8 +74,8 @@ func (p *predicateManagerImpl)
EventsToRegister(queueingHintFn fwk.QueueingHintF
return buildClusterEvents(actionMap, queueingHintFn)
}
-func pluginEvents(plugin framework.Plugin) []fwk.ClusterEventWithHint {
- ext, ok := plugin.(framework.EnqueueExtensions)
+func pluginEvents(plugin fwk.Plugin) []fwk.ClusterEventWithHint {
+ ext, ok := plugin.(fwk.EnqueueExtensions)
if !ok {
// legacy plugins that don't register for EnqueueExtensions get
a default list of events
return framework.UnrollWildCardResource()
@@ -199,7 +199,7 @@ func (p *predicateManagerImpl) predicatesAllocate(pod
*v1.Pod, node *framework.N
return p.podFitsNode(ctx, state, *p.allocationPreFilters,
*p.allocationFilters, pod, node)
}
-func (p *predicateManagerImpl) podFitsNode(ctx context.Context, state
*framework.CycleState, preFilters []framework.PreFilterPlugin, filters
[]framework.FilterPlugin, pod *v1.Pod, node *framework.NodeInfo) (string,
error) {
+func (p *predicateManagerImpl) podFitsNode(ctx context.Context, state
*framework.CycleState, preFilters []fwk.PreFilterPlugin, filters
[]fwk.FilterPlugin, pod *v1.Pod, node *framework.NodeInfo) (string, error) {
// Run "prefilter" plugins.
status, plugin, skip := p.runPreFilterPlugins(ctx, state, preFilters,
pod, node)
if !status.IsSuccess() && !status.IsSkip() {
@@ -214,8 +214,8 @@ func (p *predicateManagerImpl) podFitsNode(ctx
context.Context, state *framework
return "", nil
}
-func (p *predicateManagerImpl) runPreFilterPlugins(ctx context.Context, state
*framework.CycleState, plugins []framework.PreFilterPlugin, pod *v1.Pod, node
*framework.NodeInfo) (*fwk.Status, string, map[string]bool) {
- var mergedNodes *framework.PreFilterResult
+func (p *predicateManagerImpl) runPreFilterPlugins(ctx context.Context, state
*framework.CycleState, plugins []fwk.PreFilterPlugin, pod *v1.Pod, node
*framework.NodeInfo) (*fwk.Status, string, map[string]bool) {
+ var mergedNodes *fwk.PreFilterResult
skip := make(map[string]bool)
allNodes, err := p.sharedLister.NodeInfos().List()
if err != nil {
@@ -249,11 +249,11 @@ func (p *predicateManagerImpl) runPreFilterPlugins(ctx
context.Context, state *f
return nil, "", skip
}
-func (p *predicateManagerImpl) runPreFilterPlugin(ctx context.Context, pl
framework.PreFilterPlugin, state *framework.CycleState, pod *v1.Pod, allNodes
[]fwk.NodeInfo) (*framework.PreFilterResult, *fwk.Status) {
+func (p *predicateManagerImpl) runPreFilterPlugin(ctx context.Context, pl
fwk.PreFilterPlugin, state *framework.CycleState, pod *v1.Pod, allNodes
[]fwk.NodeInfo) (*fwk.PreFilterResult, *fwk.Status) {
return pl.PreFilter(ctx, state, pod, allNodes)
}
-func (p *predicateManagerImpl) runFilterPlugins(ctx context.Context, plugins
[]framework.FilterPlugin, state *framework.CycleState, pod *v1.Pod, nodeInfo
fwk.NodeInfo, skip map[string]bool) (*fwk.Status, string) {
+func (p *predicateManagerImpl) runFilterPlugins(ctx context.Context, plugins
[]fwk.FilterPlugin, state *framework.CycleState, pod *v1.Pod, nodeInfo
fwk.NodeInfo, skip map[string]bool) (*fwk.Status, string) {
for _, pl := range plugins {
plugin := pl.Name()
// skip plugin if prefilter returned skip
@@ -278,7 +278,7 @@ func (p *predicateManagerImpl) runFilterPlugins(ctx
context.Context, plugins []f
return fwk.NewStatus(fwk.Success), ""
}
-func (p *predicateManagerImpl) runFilterPlugin(ctx context.Context, pl
framework.FilterPlugin, state *framework.CycleState, pod *v1.Pod, nodeInfo
fwk.NodeInfo) *fwk.Status {
+func (p *predicateManagerImpl) runFilterPlugin(ctx context.Context, pl
fwk.FilterPlugin, state *framework.CycleState, pod *v1.Pod, nodeInfo
fwk.NodeInfo) *fwk.Status {
return pl.Filter(ctx, state, pod, nodeInfo)
}
@@ -297,13 +297,9 @@ func EnableOptionalKubernetesFeatureGates() {
if err := feature.DefaultMutableFeatureGate.Set(fmt.Sprintf("%s=true",
features.InPlacePodVerticalScaling)); err != nil {
log.Log(log.ShimPredicates).Fatal("Unable to set
InPlacePodVerticalScaling feature gate", zap.Error(err))
}
- if err := feature.DefaultMutableFeatureGate.Set(fmt.Sprintf("%s=false",
features.DynamicResourceAllocation)); err != nil {
- // disable explicitly
- log.Log(log.ShimPredicates).Fatal("Unable to set
DynamicResourceAllocation feature gate", zap.Error(err))
- }
}
-func NewPredicateManager(handle framework.Handle) PredicateManager {
+func NewPredicateManager(handle fwk.Handle) PredicateManager {
/*
Default K8S plugins as of 1.32 that implement PreFilter:
NodeAffinity
@@ -376,7 +372,7 @@ func NewPredicateManager(handle framework.Handle)
PredicateManager {
}
func newPredicateManagerInternal(
- handle framework.Handle,
+ handle fwk.Handle,
reservationPreFilters map[string]bool,
allocationPreFilters map[string]bool,
reservationFilters map[string]bool,
@@ -395,16 +391,16 @@ func newPredicateManagerInternal(
profile := cfg.Profiles[0] // first profile is default
registeredPlugins := profile.Plugins
- createdPlugins := make([]framework.Plugin, 0)
+ createdPlugins := make([]fwk.Plugin, 0)
// As of SchedulerConfiguration v1, all plugins implement MultiPoint,
therefore we need to instantiate each one and
// check to see what interfaces it implements dynamically
createPlugins(handle, pluginRegistry, ®isteredPlugins.MultiPoint,
&createdPlugins)
- resPre := make([]framework.Plugin, 0)
- allocPre := make([]framework.Plugin, 0)
- resFilt := make([]framework.Plugin, 0)
- allocFilt := make([]framework.Plugin, 0)
+ resPre := make([]fwk.Plugin, 0)
+ allocPre := make([]fwk.Plugin, 0)
+ resFilt := make([]fwk.Plugin, 0)
+ allocFilt := make([]fwk.Plugin, 0)
addPlugins("PreFilter", createdPlugins, &resPre, reservationPreFilters)
addPlugins("PreFilter", createdPlugins, &allocPre, allocationPreFilters)
@@ -423,10 +419,10 @@ func newPredicateManagerInternal(
return pm
}
-func preFilterPlugins(plugins []framework.Plugin) *[]framework.PreFilterPlugin
{
- result := make([]framework.PreFilterPlugin, 0)
+func preFilterPlugins(plugins []fwk.Plugin) *[]fwk.PreFilterPlugin {
+ result := make([]fwk.PreFilterPlugin, 0)
for _, plugin := range plugins {
- prefilter, ok := plugin.(framework.PreFilterPlugin)
+ prefilter, ok := plugin.(fwk.PreFilterPlugin)
if ok {
result = append(result, prefilter)
}
@@ -434,10 +430,10 @@ func preFilterPlugins(plugins []framework.Plugin)
*[]framework.PreFilterPlugin {
return &result
}
-func filterPlugins(plugins []framework.Plugin) *[]framework.FilterPlugin {
- result := make([]framework.FilterPlugin, 0)
+func filterPlugins(plugins []fwk.Plugin) *[]fwk.FilterPlugin {
+ result := make([]fwk.FilterPlugin, 0)
for _, plugin := range plugins {
- filter, ok := plugin.(framework.FilterPlugin)
+ filter, ok := plugin.(fwk.FilterPlugin)
if ok {
result = append(result, filter)
}
@@ -483,7 +479,7 @@ func removePlugin(config
*apiConfig.KubeSchedulerConfiguration, name string) {
}
}
-func addPlugins(phase string, createdPlugins []framework.Plugin, pluginList
*[]framework.Plugin, pluginFilter map[string]bool) {
+func addPlugins(phase string, createdPlugins []fwk.Plugin, pluginList
*[]fwk.Plugin, pluginFilter map[string]bool) {
for _, plugin := range createdPlugins {
name := plugin.Name()
enabled, ok := pluginFilter[name]
@@ -500,7 +496,7 @@ func addPlugins(phase string, createdPlugins
[]framework.Plugin, pluginList *[]f
}
}
-func createPlugins(handle framework.Handle, registry fwruntime.Registry,
plugins *apiConfig.PluginSet, createdPlugins *[]framework.Plugin) {
+func createPlugins(handle fwk.Handle, registry fwruntime.Registry, plugins
*apiConfig.PluginSet, createdPlugins *[]fwk.Plugin) {
pluginConfig := make(map[string]runtime.Object)
for _, p := range plugins.Enabled {
diff --git a/pkg/plugin/predicates/predicate_manager_test.go
b/pkg/plugin/predicates/predicate_manager_test.go
index a88e8bc2..90af431a 100644
--- a/pkg/plugin/predicates/predicate_manager_test.go
+++ b/pkg/plugin/predicates/predicate_manager_test.go
@@ -20,7 +20,6 @@ package predicates
import (
"errors"
- "fmt"
"strconv"
"strings"
"testing"
@@ -49,16 +48,11 @@ import (
"k8s.io/kubernetes/pkg/util/taints"
"github.com/apache/yunikorn-k8shim/pkg/client"
+ "github.com/apache/yunikorn-k8shim/pkg/common/test"
"github.com/apache/yunikorn-k8shim/pkg/log"
"github.com/apache/yunikorn-k8shim/pkg/plugin/support"
)
-func init() {
- if err := feature.DefaultMutableFeatureGate.Set(fmt.Sprintf("%s=false",
features.DynamicResourceAllocation)); err != nil {
- panic(fmt.Errorf("unable to set DynamicResourceAllocation
feature gate: %v", err))
- }
-}
-
var (
extendedResourceA = v1.ResourceName("example.com/aaa")
hugePageResourceA =
v1helper.HugePageResourceName(resource.MustParse("2Mi"))
@@ -68,7 +62,7 @@ func TestPreemptionPredicatesEmpty(t *testing.T) {
clientSet := clientSet()
informerFactory := informerFactory(clientSet)
lister := lister()
- handle := support.NewFrameworkHandle(lister, informerFactory, clientSet)
+ handle := support.NewFrameworkHandle(lister, informerFactory,
clientSet,
test.NewCSIManagerMock(client.NewMockedAPIProvider(false).GetAPIs().CSINodeInformer.Lister()))
ep := enabledPlugins(noderesources.Name)
predicateManager := newPredicateManagerInternal(handle, ep, ep, ep, ep)
@@ -85,7 +79,7 @@ func TestPreemptionPredicates(t *testing.T) {
clientSet := clientSet()
informerFactory := informerFactory(clientSet)
lister := lister()
- handle := support.NewFrameworkHandle(lister, informerFactory, clientSet)
+ handle := support.NewFrameworkHandle(lister, informerFactory,
clientSet,
test.NewCSIManagerMock(client.NewMockedAPIProvider(false).GetAPIs().CSINodeInformer.Lister()))
ep := enabledPlugins(noderesources.Name)
predicateManager := newPredicateManagerInternal(handle, ep, ep, ep, ep)
@@ -137,7 +131,7 @@ func TestEventsToRegister(t *testing.T) {
clientSet := clientSet()
informerFactory := informerFactory(clientSet)
lister := lister()
- handle := support.NewFrameworkHandle(lister, informerFactory, clientSet)
+ handle := support.NewFrameworkHandle(lister, informerFactory,
clientSet,
test.NewCSIManagerMock(client.NewMockedAPIProvider(false).GetAPIs().CSINodeInformer.Lister()))
ep := enabledPlugins(nodename.Name, interpodaffinity.Name,
podtopologyspread.Name)
predicateManager := newPredicateManagerInternal(handle, ep, ep, ep, ep)
@@ -163,7 +157,7 @@ func TestPodFitsHost(t *testing.T) {
clientSet := clientSet()
informerFactory := informerFactory(clientSet)
lister := lister()
- handle := support.NewFrameworkHandle(lister, informerFactory, clientSet)
+ handle := support.NewFrameworkHandle(lister, informerFactory,
clientSet,
test.NewCSIManagerMock(client.NewMockedAPIProvider(false).GetAPIs().CSINodeInformer.Lister()))
ep := enabledPlugins(nodename.Name)
predicateManager := newPredicateManagerInternal(handle, ep, ep, ep, ep)
@@ -250,7 +244,7 @@ func TestPodFitsHostPorts(t *testing.T) {
clientSet := clientSet()
informerFactory := informerFactory(clientSet)
lister := lister()
- handle := support.NewFrameworkHandle(lister, informerFactory, clientSet)
+ handle := support.NewFrameworkHandle(lister, informerFactory,
clientSet,
test.NewCSIManagerMock(client.NewMockedAPIProvider(false).GetAPIs().CSINodeInformer.Lister()))
ep := enabledPlugins(nodeports.Name)
predicateManager := newPredicateManagerInternal(handle, ep, ep, ep, ep)
@@ -367,7 +361,7 @@ func TestPodFitsSelector(t *testing.T) {
clientSet := clientSet()
informerFactory := informerFactory(clientSet)
lister := lister()
- handle := support.NewFrameworkHandle(lister, informerFactory, clientSet)
+ handle := support.NewFrameworkHandle(lister, informerFactory,
clientSet,
test.NewCSIManagerMock(client.NewMockedAPIProvider(false).GetAPIs().CSINodeInformer.Lister()))
ep := enabledPlugins(nodeports.Name, nodeaffinity.Name)
predicateManager := newPredicateManagerInternal(handle, ep, ep, ep, ep)
@@ -1127,7 +1121,7 @@ func TestRunGeneralPredicates(t *testing.T) {
clientSet := clientSet()
informerFactory := informerFactory(clientSet)
lister := lister()
- handle := support.NewFrameworkHandle(lister, informerFactory, clientSet)
+ handle := support.NewFrameworkHandle(lister, informerFactory,
clientSet,
test.NewCSIManagerMock(client.NewMockedAPIProvider(false).GetAPIs().CSINodeInformer.Lister()))
ep := enabledPlugins(noderesources.Name, nodename.Name, nodeports.Name,
nodevolumelimits.CSIName)
predicateManager := newPredicateManagerInternal(handle, ep, ep, ep, ep)
@@ -1206,7 +1200,7 @@ func TestInterPodAffinity(t *testing.T) {
clientSet := clientSet()
informerFactory := informerFactory(clientSet)
lister := lister()
- handle := support.NewFrameworkHandle(lister, informerFactory, clientSet)
+ handle := support.NewFrameworkHandle(lister, informerFactory,
clientSet,
test.NewCSIManagerMock(client.NewMockedAPIProvider(false).GetAPIs().CSINodeInformer.Lister()))
ep := enabledPlugins(interpodaffinity.Name, nodeaffinity.Name)
predicateManager := newPredicateManagerInternal(handle, ep, ep, ep, ep)
@@ -2167,7 +2161,7 @@ func TestReserveAlloc(t *testing.T) {
clientSet := clientSet()
informerFactory := informerFactory(clientSet)
lister := lister()
- handle := support.NewFrameworkHandle(lister, informerFactory, clientSet)
+ handle := support.NewFrameworkHandle(lister, informerFactory,
clientSet,
test.NewCSIManagerMock(client.NewMockedAPIProvider(false).GetAPIs().CSINodeInformer.Lister()))
ep := enabledPlugins()
predicateManager := newPredicateManagerInternal(handle, ep, ep, ep, ep)
_, err := predicateManager.Predicates(pod, nodeInfo, false)
@@ -2211,7 +2205,7 @@ func TestReserveNodeSelector(t *testing.T) {
clientSet := clientSet()
informerFactory := informerFactory(clientSet)
lister := lister()
- handle := support.NewFrameworkHandle(lister, informerFactory, clientSet)
+ handle := support.NewFrameworkHandle(lister, informerFactory,
clientSet,
test.NewCSIManagerMock(client.NewMockedAPIProvider(false).GetAPIs().CSINodeInformer.Lister()))
ep := enabledPlugins(nodename.Name, nodeports.Name,
podtopologyspread.Name, nodeaffinity.Name)
predicateManager := newPredicateManagerInternal(handle, ep, ep, ep, ep)
@@ -2270,11 +2264,11 @@ type sharedListerMock struct {
storageLister *storageListerMock
}
-func (s *sharedListerMock) NodeInfos() framework.NodeInfoLister {
+func (s *sharedListerMock) NodeInfos() fwk.NodeInfoLister {
return s.nodeLister
}
-func (s *sharedListerMock) StorageInfos() framework.StorageInfoLister {
+func (s *sharedListerMock) StorageInfos() fwk.StorageInfoLister {
return s.storageLister
}
@@ -2322,6 +2316,6 @@ func (s *storageListerMock) IsPVCUsedByPods(key string)
bool {
return false
}
-var _ framework.SharedLister = &sharedListerMock{}
-var _ framework.NodeInfoLister = &nodeListerMock{}
-var _ framework.StorageInfoLister = &storageListerMock{}
+var _ fwk.SharedLister = &sharedListerMock{}
+var _ fwk.NodeInfoLister = &nodeListerMock{}
+var _ fwk.StorageInfoLister = &storageListerMock{}
diff --git a/pkg/plugin/support/csi_manager.go
b/pkg/plugin/support/csi_manager.go
new file mode 100644
index 00000000..0ab74e75
--- /dev/null
+++ b/pkg/plugin/support/csi_manager.go
@@ -0,0 +1,59 @@
+/*
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+package support
+
+import (
+ storagev1 "k8s.io/api/storage/v1"
+ "k8s.io/apimachinery/pkg/labels"
+ storagelisters "k8s.io/client-go/listers/storage/v1"
+ fwk "k8s.io/kube-scheduler/framework"
+)
+
+// CSIManagerImpl is an implementation of the CSIManager interface.
+type CSIManagerImpl struct {
+ csiNodeLister *csiNodeListerImpl
+}
+
+var _ fwk.CSIManager = &CSIManagerImpl{}
+
+func NewCSIManager(csiNodeLister storagelisters.CSINodeLister) *CSIManagerImpl
{
+ return &CSIManagerImpl{csiNodeLister: NewCSINodeLister(csiNodeLister)}
+}
+
+func (m *CSIManagerImpl) CSINodes() fwk.CSINodeLister {
+ return m.csiNodeLister
+}
+
+type csiNodeListerImpl struct {
+ csiNodeLister storagelisters.CSINodeLister
+}
+
+var _ fwk.CSINodeLister = &csiNodeListerImpl{}
+
+func NewCSINodeLister(csiNodeLister storagelisters.CSINodeLister)
*csiNodeListerImpl {
+ return &csiNodeListerImpl{csiNodeLister: csiNodeLister}
+}
+
+func (l *csiNodeListerImpl) List() ([]*storagev1.CSINode, error) {
+ return l.csiNodeLister.List(labels.Everything())
+}
+
+func (l *csiNodeListerImpl) Get(name string) (*storagev1.CSINode, error) {
+ return l.csiNodeLister.Get(name)
+}
diff --git a/pkg/plugin/support/framework_handle.go
b/pkg/plugin/support/framework_handle.go
index e15f8040..86a633b4 100644
--- a/pkg/plugin/support/framework_handle.go
+++ b/pkg/plugin/support/framework_handle.go
@@ -29,7 +29,6 @@ import (
"k8s.io/client-go/tools/events"
"k8s.io/klog/v2"
fwk "k8s.io/kube-scheduler/framework"
- "k8s.io/kubernetes/pkg/scheduler/framework"
"k8s.io/kubernetes/pkg/scheduler/framework/parallelize"
"k8s.io/kubernetes/pkg/scheduler/util/assumecache"
@@ -37,13 +36,34 @@ import (
)
type frameworkHandle struct {
- sharedLister framework.SharedLister
+ sharedLister fwk.SharedLister
sharedInformerFactory informers.SharedInformerFactory
clientSet kubernetes.Interface
- parallelizer parallelize.Parallelizer
+ parallelizer fwk.Parallelizer
+ sharedCSIManager fwk.CSIManager
}
-func (p frameworkHandle) SnapshotSharedLister() framework.SharedLister {
+func (p frameworkHandle) SharedCSIManager() fwk.CSIManager {
+ log.Log(log.ShimFramework).Debug("BUG: Should not be used by plugins")
+ return p.sharedCSIManager
+}
+
+func (p frameworkHandle) ProfileName() string {
+ log.Log(log.ShimFramework).Fatal("BUG: Should not be used by plugins")
+ return ""
+}
+
+func (p frameworkHandle) WorkloadManager() fwk.WorkloadManager {
+ log.Log(log.ShimFramework).Fatal("BUG: Should not be used by plugins")
+ return nil
+}
+
+func (p frameworkHandle) SignPod(ctx context.Context, pod *v1.Pod,
recordPluginStats bool) fwk.PodSignature {
+ log.Log(log.ShimFramework).Fatal("BUG: Should not be used by plugins")
+ return nil
+}
+
+func (p frameworkHandle) SnapshotSharedLister() fwk.SharedLister {
return p.sharedLister
}
@@ -55,7 +75,7 @@ func (p frameworkHandle) ClientSet() kubernetes.Interface {
return p.clientSet
}
-func (p frameworkHandle) Parallelizer() parallelize.Parallelizer {
+func (p frameworkHandle) Parallelizer() fwk.Parallelizer {
return p.parallelizer
}
@@ -66,7 +86,7 @@ func (p frameworkHandle) ResourceClaimCache()
*assumecache.AssumeCache {
// PodNominator stubs
-func (p frameworkHandle) AddNominatedPod(_ klog.Logger, _ fwk.PodInfo, _
*framework.NominatingInfo) {
+func (p frameworkHandle) AddNominatedPod(_ klog.Logger, _ fwk.PodInfo, _
*fwk.NominatingInfo) {
log.Log(log.ShimFramework).Fatal("BUG: Should not be used by plugins")
}
@@ -90,7 +110,7 @@ func (p frameworkHandle) RunPreScorePlugins(_
context.Context, _ fwk.CycleState,
return nil
}
-func (p frameworkHandle) RunScorePlugins(_ context.Context, _ fwk.CycleState,
_ *v1.Pod, _ []fwk.NodeInfo) ([]framework.NodePluginScores, *fwk.Status) {
+func (p frameworkHandle) RunScorePlugins(_ context.Context, _ fwk.CycleState,
_ *v1.Pod, _ []fwk.NodeInfo) ([]fwk.NodePluginScores, *fwk.Status) {
log.Log(log.ShimFramework).Fatal("BUG: Should not be used by plugins")
return nil, nil
}
@@ -112,11 +132,11 @@ func (p frameworkHandle) RunPreFilterExtensionRemovePod(_
context.Context, _ fwk
// stubbed out to fulfill framework.Handle contract; these are all currently
unused by upstream K8S predicates
-func (p frameworkHandle) IterateOverWaitingPods(_ func(framework.WaitingPod)) {
+func (p frameworkHandle) IterateOverWaitingPods(_ func(fwk.WaitingPod)) {
log.Log(log.ShimFramework).Fatal("BUG: Should not be used by plugins")
}
-func (p frameworkHandle) GetWaitingPod(_ types.UID) framework.WaitingPod {
+func (p frameworkHandle) GetWaitingPod(_ types.UID) fwk.WaitingPod {
log.Log(log.ShimFramework).Fatal("BUG: Should not be used by plugins")
return nil
}
@@ -141,7 +161,7 @@ func (p frameworkHandle)
RunFilterPluginsWithNominatedPods(_ context.Context, _
return nil
}
-func (p frameworkHandle) Extenders() []framework.Extender {
+func (p frameworkHandle) Extenders() []fwk.Extender {
log.Log(log.ShimFramework).Fatal("BUG: Should not be used by plugins")
return nil
}
@@ -151,9 +171,8 @@ func (p frameworkHandle) Activate(_ klog.Logger, _
map[string]*v1.Pod) {
log.Log(log.ShimFramework).Fatal("BUG: Should not be used by plugins")
}
-func (p frameworkHandle) SharedDRAManager() framework.SharedDRAManager {
- // currently only used by DRA
- log.Log(log.ShimFramework).Fatal("BUG: Should not be used by plugins")
+func (p frameworkHandle) SharedDRAManager() fwk.SharedDRAManager {
+ log.Log(log.ShimFramework).Debug("BUG: Should not be used by plugins")
return nil
}
@@ -162,18 +181,19 @@ func (p frameworkHandle) APIDispatcher()
fwk.APIDispatcher {
return nil
}
-func (p frameworkHandle) APICacher() framework.APICacher {
+func (p frameworkHandle) APICacher() fwk.APICacher {
log.Log(log.ShimFramework).Fatal("BUG: Should not be used by plugins")
return nil
}
-var _ framework.Handle = frameworkHandle{}
+var _ fwk.Handle = frameworkHandle{}
-func NewFrameworkHandle(sharedLister framework.SharedLister, informerFactory
informers.SharedInformerFactory, clientSet kubernetes.Interface)
framework.Handle {
+func NewFrameworkHandle(sharedLister fwk.SharedLister, informerFactory
informers.SharedInformerFactory, clientSet kubernetes.Interface,
sharedCSIManager fwk.CSIManager) fwk.Handle {
return &frameworkHandle{
sharedLister: sharedLister,
sharedInformerFactory: informerFactory,
clientSet: clientSet,
parallelizer:
parallelize.NewParallelizer(parallelize.DefaultParallelism),
+ sharedCSIManager: sharedCSIManager,
}
}
diff --git a/pkg/plugin/support/framework_handle_test.go
b/pkg/plugin/support/framework_handle_test.go
index 5acd6be9..99d49838 100644
--- a/pkg/plugin/support/framework_handle_test.go
+++ b/pkg/plugin/support/framework_handle_test.go
@@ -24,15 +24,16 @@ import (
"gotest.tools/v3/assert"
"k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes"
- "k8s.io/kubernetes/pkg/scheduler/framework"
+ fwk "k8s.io/kube-scheduler/framework"
"github.com/apache/yunikorn-k8shim/pkg/cache/external"
"github.com/apache/yunikorn-k8shim/pkg/client"
+ "github.com/apache/yunikorn-k8shim/pkg/common/test"
)
func TestNewFrameworkHandle(t *testing.T) {
clientSet := clientSet()
- handle := NewFrameworkHandle(lister(), informerFactory(clientSet),
clientSet)
+ handle := NewFrameworkHandle(lister(), informerFactory(clientSet),
clientSet,
test.NewCSIManagerMock(client.NewMockedAPIProvider(false).GetAPIs().CSINodeInformer.Lister()))
_, ok := handle.(*frameworkHandle)
assert.Assert(t, ok, "handle was of wrong type")
}
@@ -40,7 +41,7 @@ func TestNewFrameworkHandle(t *testing.T) {
func TestSnapshotSharedLister(t *testing.T) {
sl := lister()
clientSet := clientSet()
- handle := NewFrameworkHandle(sl, informerFactory(clientSet), clientSet)
+ handle := NewFrameworkHandle(sl, informerFactory(clientSet), clientSet,
test.NewCSIManagerMock(client.NewMockedAPIProvider(false).GetAPIs().CSINodeInformer.Lister()))
sl2 := handle.SnapshotSharedLister()
assert.Equal(t, sl, sl2, "wrong shared lister")
}
@@ -48,19 +49,19 @@ func TestSnapshotSharedLister(t *testing.T) {
func TestSharedInformerFactory(t *testing.T) {
clientSet := clientSet()
si := informerFactory(clientSet)
- handle := NewFrameworkHandle(lister(), si, clientSet)
+ handle := NewFrameworkHandle(lister(), si, clientSet,
test.NewCSIManagerMock(client.NewMockedAPIProvider(false).GetAPIs().CSINodeInformer.Lister()))
si2 := handle.SharedInformerFactory()
assert.Equal(t, si, si2, "wrong shared informer")
}
func TestClientSet(t *testing.T) {
cs := clientSet()
- handle := NewFrameworkHandle(lister(), informerFactory(cs), cs)
+ handle := NewFrameworkHandle(lister(), informerFactory(cs), cs,
test.NewCSIManagerMock(client.NewMockedAPIProvider(false).GetAPIs().CSINodeInformer.Lister()))
cs2 := handle.ClientSet()
assert.Equal(t, cs, cs2, "wrong clientset")
}
-func lister() framework.SharedLister {
+func lister() fwk.SharedLister {
cache :=
external.NewSchedulerCache(client.NewMockedAPIProvider(false).GetAPIs())
return NewSharedLister(cache)
}
diff --git a/pkg/plugin/support/nodeinfo_lister.go
b/pkg/plugin/support/nodeinfo_lister.go
index a013d4a3..72d86bf0 100644
--- a/pkg/plugin/support/nodeinfo_lister.go
+++ b/pkg/plugin/support/nodeinfo_lister.go
@@ -22,7 +22,6 @@ import (
"errors"
fwk "k8s.io/kube-scheduler/framework"
- "k8s.io/kubernetes/pkg/scheduler/framework"
"github.com/apache/yunikorn-k8shim/pkg/cache/external"
)
@@ -52,11 +51,11 @@ func (n nodeInfoListerImpl) Get(nodeName string)
(fwk.NodeInfo, error) {
return node, nil
}
-var _ framework.NodeInfoLister = &nodeInfoListerImpl{}
+var _ fwk.NodeInfoLister = &nodeInfoListerImpl{}
// NewNodeInfoLister returns a new NodeInfoLister which references the
scheduler cache. The returned lister is
// not safe for access without acquiring the scheduler cache read lock first.
-func NewNodeInfoLister(cache *external.SchedulerCache)
framework.NodeInfoLister {
+func NewNodeInfoLister(cache *external.SchedulerCache) fwk.NodeInfoLister {
nl := &nodeInfoListerImpl{
cache: cache,
}
diff --git a/pkg/plugin/support/shared_lister.go
b/pkg/plugin/support/shared_lister.go
index 108e7ba0..425a27db 100644
--- a/pkg/plugin/support/shared_lister.go
+++ b/pkg/plugin/support/shared_lister.go
@@ -19,27 +19,27 @@
package support
import (
- "k8s.io/kubernetes/pkg/scheduler/framework"
+ fwk "k8s.io/kube-scheduler/framework"
"github.com/apache/yunikorn-k8shim/pkg/cache/external"
)
type sharedListerImpl struct {
- nodeInfos framework.NodeInfoLister
- storageInfos framework.StorageInfoLister
+ nodeInfos fwk.NodeInfoLister
+ storageInfos fwk.StorageInfoLister
}
-func (s sharedListerImpl) NodeInfos() framework.NodeInfoLister {
+func (s sharedListerImpl) NodeInfos() fwk.NodeInfoLister {
return s.nodeInfos
}
-func (s sharedListerImpl) StorageInfos() framework.StorageInfoLister {
+func (s sharedListerImpl) StorageInfos() fwk.StorageInfoLister {
return s.storageInfos
}
-var _ framework.SharedLister = &sharedListerImpl{}
+var _ fwk.SharedLister = &sharedListerImpl{}
-func NewSharedLister(cache *external.SchedulerCache) framework.SharedLister {
+func NewSharedLister(cache *external.SchedulerCache) fwk.SharedLister {
return &sharedListerImpl{
nodeInfos: NewNodeInfoLister(cache),
storageInfos: NewStorageInfoLister(cache),
diff --git a/pkg/plugin/support/storageinfo_lister.go
b/pkg/plugin/support/storageinfo_lister.go
index 9e23c553..2dbc842f 100644
--- a/pkg/plugin/support/storageinfo_lister.go
+++ b/pkg/plugin/support/storageinfo_lister.go
@@ -19,7 +19,7 @@
package support
import (
- "k8s.io/kubernetes/pkg/scheduler/framework"
+ fwk "k8s.io/kube-scheduler/framework"
"github.com/apache/yunikorn-k8shim/pkg/cache/external"
)
@@ -32,11 +32,11 @@ func (s storageInfoListerImpl) IsPVCUsedByPods(key string)
bool {
return s.cache.IsPVCUsedByPods(key)
}
-var _ framework.StorageInfoLister = &storageInfoListerImpl{}
+var _ fwk.StorageInfoLister = &storageInfoListerImpl{}
// NewStorageInfoLister returns a new StorageInfoLister which references the
scheduler cache. The returned lister is
// not safe for access without acquiring the scheduler cache read lock first.
-func NewStorageInfoLister(cache *external.SchedulerCache)
framework.StorageInfoLister {
+func NewStorageInfoLister(cache *external.SchedulerCache)
fwk.StorageInfoLister {
sl := &storageInfoListerImpl{
cache: cache,
}
diff --git a/pkg/shim/scheduler.go b/pkg/shim/scheduler.go
index 5049bca2..3f2d3021 100644
--- a/pkg/shim/scheduler.go
+++ b/pkg/shim/scheduler.go
@@ -69,13 +69,17 @@ func NewShimScheduler(scheduler api.SchedulerAPI, configs
*conf.SchedulerConf, b
// we have disabled re-sync to keep ourselves up-to-date
informerFactory :=
informers.NewSharedInformerFactory(kubeClient.GetClientSet(), 0)
- apiFactory := client.NewAPIFactory(scheduler, informerFactory, configs,
false)
+ apiFactory, err := client.NewAPIFactory(scheduler, informerFactory,
configs, false)
+ if err != nil {
+ log.Log(log.Shim).Fatal("problem in creating the api factory")
+ return nil
+ }
context := cache.NewContextWithBootstrapConfigMaps(apiFactory,
bootstrapConfigMaps)
rmCallback := cache.NewAsyncRMCallback(context)
eventBroadcaster := k8events.NewBroadcaster(&k8events.EventSinkImpl{
Interface: kubeClient.GetClientSet().EventsV1()})
- err :=
eventBroadcaster.StartRecordingToSinkWithContext(ctx.Background())
+ err = eventBroadcaster.StartRecordingToSinkWithContext(ctx.Background())
if err != nil {
log.Log(log.Shim).Error("Could not create event broadcaster",
zap.Error(err))
diff --git a/pkg/shim/scheduler_test.go b/pkg/shim/scheduler_test.go
index 3666b82e..afdcf92c 100644
--- a/pkg/shim/scheduler_test.go
+++ b/pkg/shim/scheduler_test.go
@@ -28,8 +28,6 @@ import (
"k8s.io/apimachinery/pkg/api/resource"
apis "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
- "k8s.io/apiserver/pkg/util/feature"
- "k8s.io/kubernetes/pkg/features"
"github.com/apache/yunikorn-k8shim/pkg/cache"
"github.com/apache/yunikorn-k8shim/pkg/client"
@@ -41,12 +39,6 @@ import (
"github.com/apache/yunikorn-scheduler-interface/lib/go/si"
)
-func init() {
- if err := feature.DefaultMutableFeatureGate.Set(fmt.Sprintf("%s=false",
features.DynamicResourceAllocation)); err != nil {
- panic(fmt.Errorf("unable to set DynamicResourceAllocation
feature gate: %v", err))
- }
-}
-
const configData = `
partitions:
- name: default
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]