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, &registeredPlugins.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]

Reply via email to