diff --git a/pkg/scheduler/BUILD b/pkg/scheduler/BUILD index e6e26cdca11..81468356a43 100644 --- a/pkg/scheduler/BUILD +++ b/pkg/scheduler/BUILD @@ -17,12 +17,12 @@ go_library( "//pkg/scheduler/apis/config/scheme:go_default_library", "//pkg/scheduler/apis/config/validation:go_default_library", "//pkg/scheduler/core:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/plugins:go_default_library", "//pkg/scheduler/framework/plugins/defaultbinder:go_default_library", "//pkg/scheduler/framework/plugins/noderesources:go_default_library", "//pkg/scheduler/framework/plugins/queuesort:go_default_library", "//pkg/scheduler/framework/runtime:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//pkg/scheduler/internal/cache/debugger:go_default_library", "//pkg/scheduler/internal/queue:go_default_library", @@ -62,6 +62,7 @@ go_test( "//pkg/scheduler/apis/config:go_default_library", "//pkg/scheduler/apis/config/scheme:go_default_library", "//pkg/scheduler/core:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/plugins:go_default_library", "//pkg/scheduler/framework/plugins/defaultbinder:go_default_library", "//pkg/scheduler/framework/plugins/interpodaffinity:go_default_library", @@ -72,7 +73,6 @@ go_test( "//pkg/scheduler/framework/plugins/serviceaffinity:go_default_library", "//pkg/scheduler/framework/plugins/volumebinding:go_default_library", "//pkg/scheduler/framework/runtime:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//pkg/scheduler/internal/cache/fake:go_default_library", "//pkg/scheduler/internal/queue:go_default_library", diff --git a/pkg/scheduler/core/BUILD b/pkg/scheduler/core/BUILD index 3aaa0cd9216..332e2461688 100644 --- a/pkg/scheduler/core/BUILD +++ b/pkg/scheduler/core/BUILD @@ -10,8 +10,8 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/scheduler/apis/config:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/runtime:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//pkg/scheduler/internal/parallelize:go_default_library", "//pkg/scheduler/metrics:go_default_library", @@ -38,6 +38,7 @@ go_test( deps = [ "//pkg/controller/volume/persistentvolume/util:go_default_library", "//pkg/scheduler/apis/config:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/plugins/defaultbinder:go_default_library", "//pkg/scheduler/framework/plugins/noderesources:go_default_library", "//pkg/scheduler/framework/plugins/podtopologyspread:go_default_library", @@ -45,7 +46,6 @@ go_test( "//pkg/scheduler/framework/plugins/selectorspread:go_default_library", "//pkg/scheduler/framework/plugins/volumebinding:go_default_library", "//pkg/scheduler/framework/runtime:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//pkg/scheduler/internal/queue:go_default_library", "//pkg/scheduler/profile:go_default_library", diff --git a/pkg/scheduler/core/extender.go b/pkg/scheduler/core/extender.go index 069f80ac537..712f0c80564 100644 --- a/pkg/scheduler/core/extender.go +++ b/pkg/scheduler/core/extender.go @@ -30,7 +30,7 @@ import ( restclient "k8s.io/client-go/rest" extenderv1 "k8s.io/kube-scheduler/extender/v1" schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) const ( diff --git a/pkg/scheduler/core/extender_test.go b/pkg/scheduler/core/extender_test.go index bbb9b770a3e..7844ed235c0 100644 --- a/pkg/scheduler/core/extender_test.go +++ b/pkg/scheduler/core/extender_test.go @@ -30,10 +30,10 @@ import ( "k8s.io/client-go/informers" clientsetfake "k8s.io/client-go/kubernetes/fake" schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultbinder" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/queuesort" "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue" "k8s.io/kubernetes/pkg/scheduler/profile" diff --git a/pkg/scheduler/core/generic_scheduler.go b/pkg/scheduler/core/generic_scheduler.go index ad69903e993..e2159831695 100644 --- a/pkg/scheduler/core/generic_scheduler.go +++ b/pkg/scheduler/core/generic_scheduler.go @@ -31,8 +31,8 @@ import ( v1 "k8s.io/api/core/v1" corev1helpers "k8s.io/component-helpers/scheduling/corev1" extenderv1 "k8s.io/kube-scheduler/extender/v1" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" "k8s.io/kubernetes/pkg/scheduler/internal/parallelize" "k8s.io/kubernetes/pkg/scheduler/metrics" diff --git a/pkg/scheduler/core/generic_scheduler_test.go b/pkg/scheduler/core/generic_scheduler_test.go index 530e1adf6cc..6622059b73c 100644 --- a/pkg/scheduler/core/generic_scheduler_test.go +++ b/pkg/scheduler/core/generic_scheduler_test.go @@ -37,6 +37,7 @@ import ( clientsetfake "k8s.io/client-go/kubernetes/fake" pvutil "k8s.io/kubernetes/pkg/controller/volume/persistentvolume/util" schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultbinder" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/noderesources" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/podtopologyspread" @@ -44,7 +45,6 @@ import ( "k8s.io/kubernetes/pkg/scheduler/framework/plugins/selectorspread" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumebinding" frameworkruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue" "k8s.io/kubernetes/pkg/scheduler/profile" @@ -72,14 +72,14 @@ func (pl *noPodsFilterPlugin) Filter(_ context.Context, _ *framework.CycleState, } // NewNoPodsFilterPlugin initializes a noPodsFilterPlugin and returns it. -func NewNoPodsFilterPlugin(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { +func NewNoPodsFilterPlugin(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &noPodsFilterPlugin{}, nil } type numericMapPlugin struct{} func newNumericMapPlugin() frameworkruntime.PluginFactory { - return func(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { + return func(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &numericMapPlugin{}, nil } } @@ -103,7 +103,7 @@ func (pl *numericMapPlugin) ScoreExtensions() framework.ScoreExtensions { type reverseNumericMapPlugin struct{} func newReverseNumericMapPlugin() frameworkruntime.PluginFactory { - return func(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { + return func(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &reverseNumericMapPlugin{}, nil } } @@ -144,7 +144,7 @@ func (pl *reverseNumericMapPlugin) NormalizeScore(_ context.Context, _ *framewor type trueMapPlugin struct{} func newTrueMapPlugin() frameworkruntime.PluginFactory { - return func(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { + return func(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &trueMapPlugin{}, nil } } @@ -173,7 +173,7 @@ func (pl *trueMapPlugin) NormalizeScore(_ context.Context, _ *framework.CycleSta type falseMapPlugin struct{} func newFalseMapPlugin() frameworkruntime.PluginFactory { - return func(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { + return func(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &falseMapPlugin{}, nil } } @@ -912,7 +912,7 @@ func TestFindFitPredicateCallCounts(t *testing.T) { plugin := st.FakeFilterPlugin{} registerFakeFilterFunc := st.RegisterFilterPlugin( "FakeFilter", - func(_ runtime.Object, fh framework.FrameworkHandle) (framework.Plugin, error) { + func(_ runtime.Object, fh framework.Handle) (framework.Plugin, error) { return &plugin, nil }, ) diff --git a/pkg/scheduler/factory.go b/pkg/scheduler/factory.go index 65e9fcf5de6..e2189fdb385 100644 --- a/pkg/scheduler/factory.go +++ b/pkg/scheduler/factory.go @@ -36,12 +36,12 @@ import ( schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/apis/config/validation" "k8s.io/kubernetes/pkg/scheduler/core" + "k8s.io/kubernetes/pkg/scheduler/framework" frameworkplugins "k8s.io/kubernetes/pkg/scheduler/framework/plugins" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultbinder" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/noderesources" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/queuesort" frameworkruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" cachedebugger "k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger" internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue" diff --git a/pkg/scheduler/factory_test.go b/pkg/scheduler/factory_test.go index 2e6ca3a1116..b254bd02fec 100644 --- a/pkg/scheduler/factory_test.go +++ b/pkg/scheduler/factory_test.go @@ -38,6 +38,7 @@ import ( apicore "k8s.io/kubernetes/pkg/apis/core" schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/apis/config/scheme" + "k8s.io/kubernetes/pkg/scheduler/framework" frameworkplugins "k8s.io/kubernetes/pkg/scheduler/framework/plugins" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultbinder" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/interpodaffinity" @@ -45,7 +46,6 @@ import ( "k8s.io/kubernetes/pkg/scheduler/framework/plugins/queuesort" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/serviceaffinity" frameworkruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue" "k8s.io/kubernetes/pkg/scheduler/profile" diff --git a/pkg/scheduler/framework/BUILD b/pkg/scheduler/framework/BUILD index e74a5ba44dd..04c8912d0a0 100644 --- a/pkg/scheduler/framework/BUILD +++ b/pkg/scheduler/framework/BUILD @@ -1,3 +1,36 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") + +go_library( + name = "go_default_library", + srcs = [ + "cycle_state.go", + "extender.go", + "interface.go", + "listers.go", + "types.go", + ], + importpath = "k8s.io/kubernetes/pkg/scheduler/framework", + visibility = ["//visibility:public"], + deps = [ + "//pkg/apis/core/v1/helper:go_default_library", + "//pkg/features:go_default_library", + "//pkg/scheduler/apis/config:go_default_library", + "//pkg/scheduler/util:go_default_library", + "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + "//staging/src/k8s.io/client-go/informers:go_default_library", + "//staging/src/k8s.io/client-go/kubernetes:go_default_library", + "//staging/src/k8s.io/client-go/tools/events:go_default_library", + "//staging/src/k8s.io/kube-scheduler/extender/v1:go_default_library", + "//vendor/k8s.io/klog/v2:go_default_library", + ], +) + filegroup( name = "package-srcs", srcs = glob(["**"]), @@ -9,6 +42,7 @@ filegroup( name = "all-srcs", srcs = [ ":package-srcs", + "//pkg/scheduler/framework/fake:all-srcs", "//pkg/scheduler/framework/plugins:all-srcs", "//pkg/scheduler/framework/runtime:all-srcs", "//pkg/scheduler/framework/v1alpha1:all-srcs", @@ -16,3 +50,19 @@ filegroup( tags = ["automanaged"], visibility = ["//visibility:public"], ) + +go_test( + name = "go_default_test", + srcs = [ + "cycle_state_test.go", + "interface_test.go", + "types_test.go", + ], + embed = [":go_default_library"], + deps = [ + "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", + ], +) diff --git a/pkg/scheduler/framework/v1alpha1/cycle_state.go b/pkg/scheduler/framework/cycle_state.go similarity index 99% rename from pkg/scheduler/framework/v1alpha1/cycle_state.go rename to pkg/scheduler/framework/cycle_state.go index 34f8dd510ad..85e5a6c0169 100644 --- a/pkg/scheduler/framework/v1alpha1/cycle_state.go +++ b/pkg/scheduler/framework/cycle_state.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1alpha1 +package framework import ( "errors" diff --git a/pkg/scheduler/framework/v1alpha1/cycle_state_test.go b/pkg/scheduler/framework/cycle_state_test.go similarity index 99% rename from pkg/scheduler/framework/v1alpha1/cycle_state_test.go rename to pkg/scheduler/framework/cycle_state_test.go index bba8184486d..37f0d09b7e8 100644 --- a/pkg/scheduler/framework/v1alpha1/cycle_state_test.go +++ b/pkg/scheduler/framework/cycle_state_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1alpha1 +package framework import ( "testing" diff --git a/pkg/scheduler/framework/v1alpha1/extender.go b/pkg/scheduler/framework/extender.go similarity index 99% rename from pkg/scheduler/framework/v1alpha1/extender.go rename to pkg/scheduler/framework/extender.go index 4118394391a..1dbc14b7a10 100644 --- a/pkg/scheduler/framework/v1alpha1/extender.go +++ b/pkg/scheduler/framework/extender.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1alpha1 +package framework import ( v1 "k8s.io/api/core/v1" diff --git a/pkg/scheduler/framework/v1alpha1/fake/BUILD b/pkg/scheduler/framework/fake/BUILD similarity index 88% rename from pkg/scheduler/framework/v1alpha1/fake/BUILD rename to pkg/scheduler/framework/fake/BUILD index c9167c7e5e0..7ee990b1833 100644 --- a/pkg/scheduler/framework/v1alpha1/fake/BUILD +++ b/pkg/scheduler/framework/fake/BUILD @@ -3,10 +3,10 @@ load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( name = "go_default_library", srcs = ["listers.go"], - importpath = "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1/fake", + importpath = "k8s.io/kubernetes/pkg/scheduler/framework/fake", visibility = ["//visibility:public"], deps = [ - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/api/apps/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/storage/v1:go_default_library", diff --git a/pkg/scheduler/framework/v1alpha1/fake/listers.go b/pkg/scheduler/framework/fake/listers.go similarity index 99% rename from pkg/scheduler/framework/v1alpha1/fake/listers.go rename to pkg/scheduler/framework/fake/listers.go index 863b595cbe6..ed1f46c9d45 100644 --- a/pkg/scheduler/framework/v1alpha1/fake/listers.go +++ b/pkg/scheduler/framework/fake/listers.go @@ -27,7 +27,7 @@ import ( appslisters "k8s.io/client-go/listers/apps/v1" corelisters "k8s.io/client-go/listers/core/v1" storagelisters "k8s.io/client-go/listers/storage/v1" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) var _ corelisters.ServiceLister = &ServiceLister{} diff --git a/pkg/scheduler/framework/v1alpha1/interface.go b/pkg/scheduler/framework/interface.go similarity index 99% rename from pkg/scheduler/framework/v1alpha1/interface.go rename to pkg/scheduler/framework/interface.go index 161c5045331..3f0660b3db6 100644 --- a/pkg/scheduler/framework/v1alpha1/interface.go +++ b/pkg/scheduler/framework/interface.go @@ -16,7 +16,7 @@ limitations under the License. // This file defines the scheduling framework plugin interfaces. -package v1alpha1 +package framework import ( "context" @@ -410,7 +410,7 @@ type BindPlugin interface { // Framework manages the set of plugins in use by the scheduling framework. // Configured plugins are called at specified points in a scheduling context. type Framework interface { - FrameworkHandle + Handle // QueueSortFunc returns the function to sort pods in scheduling queue QueueSortFunc() LessFunc @@ -506,10 +506,10 @@ type Framework interface { ListPlugins() map[string][]config.Plugin } -// FrameworkHandle provides data and some tools that plugins can use. It is +// Handle provides data and some tools that plugins can use. It is // passed to the plugin factories at the time of plugin initialization. Plugins // must store and use this handle to call framework functions. -type FrameworkHandle interface { +type Handle interface { // SnapshotSharedLister returns listers from the latest NodeInfo Snapshot. The snapshot // is taken at the beginning of a scheduling cycle and remains unchanged until // a pod finishes "Permit" point. There is no guarantee that the information @@ -536,7 +536,7 @@ type FrameworkHandle interface { SharedInformerFactory() informers.SharedInformerFactory - // TODO: unroll the wrapped interfaces to FrameworkHandle. + // TODO: unroll the wrapped interfaces to Handle. PreemptHandle() PreemptHandle } diff --git a/pkg/scheduler/framework/v1alpha1/interface_test.go b/pkg/scheduler/framework/interface_test.go similarity index 99% rename from pkg/scheduler/framework/v1alpha1/interface_test.go rename to pkg/scheduler/framework/interface_test.go index e6300ee7b91..a991ce17e79 100644 --- a/pkg/scheduler/framework/v1alpha1/interface_test.go +++ b/pkg/scheduler/framework/interface_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1alpha1 +package framework import ( "errors" diff --git a/pkg/scheduler/framework/v1alpha1/listers.go b/pkg/scheduler/framework/listers.go similarity index 98% rename from pkg/scheduler/framework/v1alpha1/listers.go rename to pkg/scheduler/framework/listers.go index 91167edc0a0..eaacaacdb6a 100644 --- a/pkg/scheduler/framework/v1alpha1/listers.go +++ b/pkg/scheduler/framework/listers.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1alpha1 +package framework // NodeInfoLister interface represents anything that can list/get NodeInfo objects from node name. type NodeInfoLister interface { diff --git a/pkg/scheduler/framework/plugins/defaultbinder/BUILD b/pkg/scheduler/framework/plugins/defaultbinder/BUILD index 003165618a2..38a202ef8a7 100644 --- a/pkg/scheduler/framework/plugins/defaultbinder/BUILD +++ b/pkg/scheduler/framework/plugins/defaultbinder/BUILD @@ -6,7 +6,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultbinder", visibility = ["//visibility:public"], deps = [ - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", diff --git a/pkg/scheduler/framework/plugins/defaultbinder/default_binder.go b/pkg/scheduler/framework/plugins/defaultbinder/default_binder.go index 2b2c7f9bb47..76fdb304cb1 100644 --- a/pkg/scheduler/framework/plugins/defaultbinder/default_binder.go +++ b/pkg/scheduler/framework/plugins/defaultbinder/default_binder.go @@ -23,7 +23,7 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/klog/v2" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) // Name of the plugin used in the plugin registry and configurations. @@ -31,13 +31,13 @@ const Name = "DefaultBinder" // DefaultBinder binds pods to nodes using a k8s client. type DefaultBinder struct { - handle framework.FrameworkHandle + handle framework.Handle } var _ framework.BindPlugin = &DefaultBinder{} // New creates a DefaultBinder. -func New(_ runtime.Object, handle framework.FrameworkHandle) (framework.Plugin, error) { +func New(_ runtime.Object, handle framework.Handle) (framework.Plugin, error) { return &DefaultBinder{handle: handle}, nil } diff --git a/pkg/scheduler/framework/plugins/defaultpreemption/BUILD b/pkg/scheduler/framework/plugins/defaultpreemption/BUILD index 5a2df0bfc70..946e034de46 100644 --- a/pkg/scheduler/framework/plugins/defaultpreemption/BUILD +++ b/pkg/scheduler/framework/plugins/defaultpreemption/BUILD @@ -11,7 +11,7 @@ go_library( deps = [ "//pkg/features:go_default_library", "//pkg/scheduler/core:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/internal/parallelize:go_default_library", "//pkg/scheduler/metrics:go_default_library", "//pkg/scheduler/util:go_default_library", @@ -51,6 +51,7 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/controller/volume/scheduling:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/plugins/defaultbinder:go_default_library", "//pkg/scheduler/framework/plugins/interpodaffinity:go_default_library", "//pkg/scheduler/framework/plugins/nodeaffinity:go_default_library", @@ -64,7 +65,6 @@ go_test( "//pkg/scheduler/framework/plugins/volumerestrictions:go_default_library", "//pkg/scheduler/framework/plugins/volumezone:go_default_library", "//pkg/scheduler/framework/runtime:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//pkg/scheduler/internal/queue:go_default_library", "//pkg/scheduler/testing:go_default_library", diff --git a/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption.go b/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption.go index 9d8d01846dc..c623b611c0b 100644 --- a/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption.go +++ b/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption.go @@ -39,7 +39,7 @@ import ( extenderv1 "k8s.io/kube-scheduler/extender/v1" kubefeatures "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/scheduler/core" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/internal/parallelize" "k8s.io/kubernetes/pkg/scheduler/metrics" "k8s.io/kubernetes/pkg/scheduler/util" @@ -52,7 +52,7 @@ const ( // DefaultPreemption is a PostFilter plugin implements the preemption logic. type DefaultPreemption struct { - fh framework.FrameworkHandle + fh framework.Handle podLister corelisters.PodLister pdbLister policylisters.PodDisruptionBudgetLister } @@ -65,7 +65,7 @@ func (pl *DefaultPreemption) Name() string { } // New initializes a new plugin and returns it. -func New(_ runtime.Object, fh framework.FrameworkHandle) (framework.Plugin, error) { +func New(_ runtime.Object, fh framework.Handle) (framework.Plugin, error) { pl := DefaultPreemption{ fh: fh, podLister: fh.SharedInformerFactory().Core().V1().Pods().Lister(), @@ -596,7 +596,7 @@ func selectVictimsOnNode( // - Evict the victim pods // - Reject the victim pods if they are in waitingPod map // - Clear the low-priority pods' nominatedNodeName status if needed -func PrepareCandidate(c Candidate, fh framework.FrameworkHandle, cs kubernetes.Interface, pod *v1.Pod) error { +func PrepareCandidate(c Candidate, fh framework.Handle, cs kubernetes.Interface, pod *v1.Pod) error { for _, victim := range c.Victims().Pods { if err := util.DeletePod(cs, victim); err != nil { klog.Errorf("Error preempting pod %v/%v: %v", victim.Namespace, victim.Name, err) diff --git a/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption_test.go b/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption_test.go index 4b2b165c1f8..ffbf02b825c 100644 --- a/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption_test.go +++ b/pkg/scheduler/framework/plugins/defaultpreemption/default_preemption_test.go @@ -37,6 +37,7 @@ import ( "k8s.io/client-go/tools/events" extenderv1 "k8s.io/kube-scheduler/extender/v1" volumescheduling "k8s.io/kubernetes/pkg/controller/volume/scheduling" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultbinder" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/interpodaffinity" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodeaffinity" @@ -50,7 +51,6 @@ import ( "k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumerestrictions" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumezone" frameworkruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue" st "k8s.io/kubernetes/pkg/scheduler/testing" @@ -656,7 +656,7 @@ func TestDryRunPreemption(t *testing.T) { registeredPlugins := append([]st.RegisterPluginFunc{ st.RegisterFilterPlugin( "FakeFilter", - func(_ runtime.Object, fh framework.FrameworkHandle) (framework.Plugin, error) { + func(_ runtime.Object, fh framework.Handle) (framework.Plugin, error) { return &fakePlugin, nil }, )}, diff --git a/pkg/scheduler/framework/plugins/examples/multipoint/BUILD b/pkg/scheduler/framework/plugins/examples/multipoint/BUILD index 5e016182c7c..4760228d4e7 100644 --- a/pkg/scheduler/framework/plugins/examples/multipoint/BUILD +++ b/pkg/scheduler/framework/plugins/examples/multipoint/BUILD @@ -6,7 +6,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/scheduler/framework/plugins/examples/multipoint", visibility = ["//visibility:public"], deps = [ - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", ], diff --git a/pkg/scheduler/framework/plugins/examples/multipoint/multipoint.go b/pkg/scheduler/framework/plugins/examples/multipoint/multipoint.go index 5bf7cef464f..ba483a3afc2 100644 --- a/pkg/scheduler/framework/plugins/examples/multipoint/multipoint.go +++ b/pkg/scheduler/framework/plugins/examples/multipoint/multipoint.go @@ -21,7 +21,7 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) // CommunicatingPlugin is an example of a plugin that implements two @@ -92,6 +92,6 @@ func (mc CommunicatingPlugin) PreBind(ctx context.Context, state *framework.Cycl } // New initializes a new plugin and returns it. -func New(_ *runtime.Unknown, _ framework.FrameworkHandle) (framework.Plugin, error) { +func New(_ *runtime.Unknown, _ framework.Handle) (framework.Plugin, error) { return &CommunicatingPlugin{}, nil } diff --git a/pkg/scheduler/framework/plugins/examples/prebind/BUILD b/pkg/scheduler/framework/plugins/examples/prebind/BUILD index 3a805cd1950..da3fc287dd5 100644 --- a/pkg/scheduler/framework/plugins/examples/prebind/BUILD +++ b/pkg/scheduler/framework/plugins/examples/prebind/BUILD @@ -6,7 +6,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/scheduler/framework/plugins/examples/prebind", visibility = ["//visibility:public"], deps = [ - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", ], diff --git a/pkg/scheduler/framework/plugins/examples/prebind/prebind.go b/pkg/scheduler/framework/plugins/examples/prebind/prebind.go index 66f24c12d5b..2365fdc21bb 100644 --- a/pkg/scheduler/framework/plugins/examples/prebind/prebind.go +++ b/pkg/scheduler/framework/plugins/examples/prebind/prebind.go @@ -20,7 +20,7 @@ import ( "context" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) // StatelessPreBindExample is an example of a simple plugin that has no state @@ -49,6 +49,6 @@ func (sr StatelessPreBindExample) PreBind(ctx context.Context, state *framework. } // New initializes a new plugin and returns it. -func New(_ *runtime.Unknown, _ framework.FrameworkHandle) (framework.Plugin, error) { +func New(_ *runtime.Unknown, _ framework.Handle) (framework.Plugin, error) { return &StatelessPreBindExample{}, nil } diff --git a/pkg/scheduler/framework/plugins/examples/stateful/BUILD b/pkg/scheduler/framework/plugins/examples/stateful/BUILD index 958bb35b911..8704dda8272 100644 --- a/pkg/scheduler/framework/plugins/examples/stateful/BUILD +++ b/pkg/scheduler/framework/plugins/examples/stateful/BUILD @@ -6,7 +6,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/scheduler/framework/plugins/examples/stateful", visibility = ["//visibility:public"], deps = [ - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//vendor/k8s.io/klog/v2:go_default_library", diff --git a/pkg/scheduler/framework/plugins/examples/stateful/stateful.go b/pkg/scheduler/framework/plugins/examples/stateful/stateful.go index c594363bfc0..6458d8228c6 100644 --- a/pkg/scheduler/framework/plugins/examples/stateful/stateful.go +++ b/pkg/scheduler/framework/plugins/examples/stateful/stateful.go @@ -24,7 +24,7 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/klog/v2" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) // MultipointExample is an example plugin that is executed at multiple extension points. @@ -82,7 +82,7 @@ func (mp *MultipointExample) PreBind(ctx context.Context, state *framework.Cycle } // New initializes a new plugin and returns it. -func New(config *runtime.Unknown, _ framework.FrameworkHandle) (framework.Plugin, error) { +func New(config *runtime.Unknown, _ framework.Handle) (framework.Plugin, error) { if config == nil { klog.Error("MultipointExample configuration cannot be empty") return nil, fmt.Errorf("MultipointExample configuration cannot be empty") diff --git a/pkg/scheduler/framework/plugins/helper/BUILD b/pkg/scheduler/framework/plugins/helper/BUILD index a4639e8e000..1a13368ef9b 100644 --- a/pkg/scheduler/framework/plugins/helper/BUILD +++ b/pkg/scheduler/framework/plugins/helper/BUILD @@ -11,7 +11,7 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/apis/core/v1/helper:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", @@ -31,7 +31,7 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/apis/core:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", diff --git a/pkg/scheduler/framework/plugins/helper/normalize_score.go b/pkg/scheduler/framework/plugins/helper/normalize_score.go index 3e588047613..2c7c951c851 100644 --- a/pkg/scheduler/framework/plugins/helper/normalize_score.go +++ b/pkg/scheduler/framework/plugins/helper/normalize_score.go @@ -17,7 +17,7 @@ limitations under the License. package helper import ( - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) // DefaultNormalizeScore generates a Normalize Score function that can normalize the diff --git a/pkg/scheduler/framework/plugins/helper/normalize_score_test.go b/pkg/scheduler/framework/plugins/helper/normalize_score_test.go index 7e3e990b266..f1ca1d8df2f 100644 --- a/pkg/scheduler/framework/plugins/helper/normalize_score_test.go +++ b/pkg/scheduler/framework/plugins/helper/normalize_score_test.go @@ -20,7 +20,7 @@ import ( "reflect" "testing" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) func TestDefaultNormalizeScore(t *testing.T) { diff --git a/pkg/scheduler/framework/plugins/imagelocality/BUILD b/pkg/scheduler/framework/plugins/imagelocality/BUILD index 9cd2d89ae39..820525268f2 100644 --- a/pkg/scheduler/framework/plugins/imagelocality/BUILD +++ b/pkg/scheduler/framework/plugins/imagelocality/BUILD @@ -6,7 +6,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/scheduler/framework/plugins/imagelocality", visibility = ["//visibility:public"], deps = [ - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", ], @@ -17,8 +17,8 @@ go_test( srcs = ["image_locality_test.go"], embed = [":go_default_library"], deps = [ + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/runtime:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/pkg/scheduler/framework/plugins/imagelocality/image_locality.go b/pkg/scheduler/framework/plugins/imagelocality/image_locality.go index ae75b566432..9e52f80ea6c 100644 --- a/pkg/scheduler/framework/plugins/imagelocality/image_locality.go +++ b/pkg/scheduler/framework/plugins/imagelocality/image_locality.go @@ -23,7 +23,7 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) // The two thresholds are used as bounds for the image score range. They correspond to a reasonable size range for @@ -36,7 +36,7 @@ const ( // ImageLocality is a score plugin that favors nodes that already have requested pod container's images. type ImageLocality struct { - handle framework.FrameworkHandle + handle framework.Handle } var _ framework.ScorePlugin = &ImageLocality{} @@ -73,7 +73,7 @@ func (pl *ImageLocality) ScoreExtensions() framework.ScoreExtensions { } // New initializes a new plugin and returns it. -func New(_ runtime.Object, h framework.FrameworkHandle) (framework.Plugin, error) { +func New(_ runtime.Object, h framework.Handle) (framework.Plugin, error) { return &ImageLocality{handle: h}, nil } diff --git a/pkg/scheduler/framework/plugins/imagelocality/image_locality_test.go b/pkg/scheduler/framework/plugins/imagelocality/image_locality_test.go index 81e9b53a138..2225823be22 100644 --- a/pkg/scheduler/framework/plugins/imagelocality/image_locality_test.go +++ b/pkg/scheduler/framework/plugins/imagelocality/image_locality_test.go @@ -25,8 +25,8 @@ import ( v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" "k8s.io/kubernetes/pkg/scheduler/internal/cache" ) diff --git a/pkg/scheduler/framework/plugins/interpodaffinity/BUILD b/pkg/scheduler/framework/plugins/interpodaffinity/BUILD index 3600870ef5b..71cbc30a335 100644 --- a/pkg/scheduler/framework/plugins/interpodaffinity/BUILD +++ b/pkg/scheduler/framework/plugins/interpodaffinity/BUILD @@ -12,7 +12,7 @@ go_library( deps = [ "//pkg/scheduler/apis/config:go_default_library", "//pkg/scheduler/apis/config/validation:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/internal/parallelize:go_default_library", "//pkg/scheduler/util:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", @@ -30,8 +30,8 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/scheduler/apis/config:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/runtime:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/pkg/scheduler/framework/plugins/interpodaffinity/filtering.go b/pkg/scheduler/framework/plugins/interpodaffinity/filtering.go index 1c3b2d16b82..09898f84acc 100644 --- a/pkg/scheduler/framework/plugins/interpodaffinity/filtering.go +++ b/pkg/scheduler/framework/plugins/interpodaffinity/filtering.go @@ -23,7 +23,7 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/klog/v2" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/internal/parallelize" schedutil "k8s.io/kubernetes/pkg/scheduler/util" ) diff --git a/pkg/scheduler/framework/plugins/interpodaffinity/filtering_test.go b/pkg/scheduler/framework/plugins/interpodaffinity/filtering_test.go index 99ecd7a84e9..14c0fe6ccd1 100644 --- a/pkg/scheduler/framework/plugins/interpodaffinity/filtering_test.go +++ b/pkg/scheduler/framework/plugins/interpodaffinity/filtering_test.go @@ -24,7 +24,7 @@ import ( "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/internal/cache" ) diff --git a/pkg/scheduler/framework/plugins/interpodaffinity/plugin.go b/pkg/scheduler/framework/plugins/interpodaffinity/plugin.go index b3f3eb908e8..ff64235a463 100644 --- a/pkg/scheduler/framework/plugins/interpodaffinity/plugin.go +++ b/pkg/scheduler/framework/plugins/interpodaffinity/plugin.go @@ -22,7 +22,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/apis/config/validation" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) const ( @@ -47,7 +47,7 @@ func (pl *InterPodAffinity) Name() string { } // New initializes a new plugin and returns it. -func New(plArgs runtime.Object, h framework.FrameworkHandle) (framework.Plugin, error) { +func New(plArgs runtime.Object, h framework.Handle) (framework.Plugin, error) { if h.SnapshotSharedLister() == nil { return nil, fmt.Errorf("SnapshotSharedlister is nil") } diff --git a/pkg/scheduler/framework/plugins/interpodaffinity/scoring.go b/pkg/scheduler/framework/plugins/interpodaffinity/scoring.go index 06fee90b98b..38d9e06c4da 100644 --- a/pkg/scheduler/framework/plugins/interpodaffinity/scoring.go +++ b/pkg/scheduler/framework/plugins/interpodaffinity/scoring.go @@ -22,7 +22,7 @@ import ( "sync/atomic" v1 "k8s.io/api/core/v1" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/internal/parallelize" schedutil "k8s.io/kubernetes/pkg/scheduler/util" ) diff --git a/pkg/scheduler/framework/plugins/interpodaffinity/scoring_test.go b/pkg/scheduler/framework/plugins/interpodaffinity/scoring_test.go index 0defe8a2f5d..080058be9f1 100644 --- a/pkg/scheduler/framework/plugins/interpodaffinity/scoring_test.go +++ b/pkg/scheduler/framework/plugins/interpodaffinity/scoring_test.go @@ -25,8 +25,8 @@ import ( v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/scheduler/apis/config" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" "k8s.io/kubernetes/pkg/scheduler/internal/cache" ) diff --git a/pkg/scheduler/framework/plugins/nodeaffinity/BUILD b/pkg/scheduler/framework/plugins/nodeaffinity/BUILD index 9bbb9ba0dfa..1c412890395 100644 --- a/pkg/scheduler/framework/plugins/nodeaffinity/BUILD +++ b/pkg/scheduler/framework/plugins/nodeaffinity/BUILD @@ -7,8 +7,8 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/apis/core/v1/helper:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/plugins/helper:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", @@ -35,8 +35,8 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/apis/core:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/runtime:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/pkg/scheduler/framework/plugins/nodeaffinity/node_affinity.go b/pkg/scheduler/framework/plugins/nodeaffinity/node_affinity.go index 53fe150d354..be23945ca4c 100644 --- a/pkg/scheduler/framework/plugins/nodeaffinity/node_affinity.go +++ b/pkg/scheduler/framework/plugins/nodeaffinity/node_affinity.go @@ -24,13 +24,13 @@ import ( "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" + "k8s.io/kubernetes/pkg/scheduler/framework" pluginhelper "k8s.io/kubernetes/pkg/scheduler/framework/plugins/helper" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" ) // NodeAffinity is a plugin that checks if a pod node selector matches the node label. type NodeAffinity struct { - handle framework.FrameworkHandle + handle framework.Handle } var _ framework.FilterPlugin = &NodeAffinity{} @@ -113,6 +113,6 @@ func (pl *NodeAffinity) ScoreExtensions() framework.ScoreExtensions { } // New initializes a new plugin and returns it. -func New(_ runtime.Object, h framework.FrameworkHandle) (framework.Plugin, error) { +func New(_ runtime.Object, h framework.Handle) (framework.Plugin, error) { return &NodeAffinity{handle: h}, nil } diff --git a/pkg/scheduler/framework/plugins/nodeaffinity/node_affinity_test.go b/pkg/scheduler/framework/plugins/nodeaffinity/node_affinity_test.go index a6f03b48614..68b52df48ab 100644 --- a/pkg/scheduler/framework/plugins/nodeaffinity/node_affinity_test.go +++ b/pkg/scheduler/framework/plugins/nodeaffinity/node_affinity_test.go @@ -24,8 +24,8 @@ import ( v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" api "k8s.io/kubernetes/pkg/apis/core" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" "k8s.io/kubernetes/pkg/scheduler/internal/cache" ) diff --git a/pkg/scheduler/framework/plugins/nodelabel/BUILD b/pkg/scheduler/framework/plugins/nodelabel/BUILD index 8fde2c0d3e9..6fddfc75ac4 100644 --- a/pkg/scheduler/framework/plugins/nodelabel/BUILD +++ b/pkg/scheduler/framework/plugins/nodelabel/BUILD @@ -8,7 +8,7 @@ go_library( deps = [ "//pkg/scheduler/apis/config:go_default_library", "//pkg/scheduler/apis/config/validation:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", @@ -21,8 +21,8 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/scheduler/apis/config:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/runtime:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/pkg/scheduler/framework/plugins/nodelabel/node_label.go b/pkg/scheduler/framework/plugins/nodelabel/node_label.go index 34e73bb56e4..d5429a21823 100644 --- a/pkg/scheduler/framework/plugins/nodelabel/node_label.go +++ b/pkg/scheduler/framework/plugins/nodelabel/node_label.go @@ -25,7 +25,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/apis/config/validation" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) // Name of this plugin. @@ -37,7 +37,7 @@ const ( ) // New initializes a new plugin and returns it. -func New(plArgs runtime.Object, handle framework.FrameworkHandle) (framework.Plugin, error) { +func New(plArgs runtime.Object, handle framework.Handle) (framework.Plugin, error) { args, err := getArgs(plArgs) if err != nil { return nil, err @@ -63,7 +63,7 @@ func getArgs(obj runtime.Object) (config.NodeLabelArgs, error) { // NodeLabel checks whether a pod can fit based on the node labels which match a filter that it requests. type NodeLabel struct { - handle framework.FrameworkHandle + handle framework.Handle args config.NodeLabelArgs } diff --git a/pkg/scheduler/framework/plugins/nodelabel/node_label_test.go b/pkg/scheduler/framework/plugins/nodelabel/node_label_test.go index b536651b37d..970df7d16bd 100644 --- a/pkg/scheduler/framework/plugins/nodelabel/node_label_test.go +++ b/pkg/scheduler/framework/plugins/nodelabel/node_label_test.go @@ -23,8 +23,8 @@ import ( v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/scheduler/apis/config" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" "k8s.io/kubernetes/pkg/scheduler/internal/cache" ) diff --git a/pkg/scheduler/framework/plugins/nodename/BUILD b/pkg/scheduler/framework/plugins/nodename/BUILD index 7d7f4dbe599..8111ea83520 100644 --- a/pkg/scheduler/framework/plugins/nodename/BUILD +++ b/pkg/scheduler/framework/plugins/nodename/BUILD @@ -6,7 +6,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodename", visibility = ["//visibility:public"], deps = [ - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", ], @@ -31,7 +31,7 @@ go_test( srcs = ["node_name_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", ], diff --git a/pkg/scheduler/framework/plugins/nodename/node_name.go b/pkg/scheduler/framework/plugins/nodename/node_name.go index 8d1a50666c9..ab716bc7b75 100644 --- a/pkg/scheduler/framework/plugins/nodename/node_name.go +++ b/pkg/scheduler/framework/plugins/nodename/node_name.go @@ -21,7 +21,7 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) // NodeName is a plugin that checks if a pod spec node name matches the current node. @@ -59,6 +59,6 @@ func Fits(pod *v1.Pod, nodeInfo *framework.NodeInfo) bool { } // New initializes a new plugin and returns it. -func New(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { +func New(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &NodeName{}, nil } diff --git a/pkg/scheduler/framework/plugins/nodename/node_name_test.go b/pkg/scheduler/framework/plugins/nodename/node_name_test.go index 735cec0eab7..db5abaa4767 100644 --- a/pkg/scheduler/framework/plugins/nodename/node_name_test.go +++ b/pkg/scheduler/framework/plugins/nodename/node_name_test.go @@ -23,7 +23,7 @@ import ( v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) func TestNodeName(t *testing.T) { diff --git a/pkg/scheduler/framework/plugins/nodeports/BUILD b/pkg/scheduler/framework/plugins/nodeports/BUILD index ea6ae77fbce..faa54865598 100644 --- a/pkg/scheduler/framework/plugins/nodeports/BUILD +++ b/pkg/scheduler/framework/plugins/nodeports/BUILD @@ -6,7 +6,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodeports", visibility = ["//visibility:public"], deps = [ - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", ], @@ -31,7 +31,7 @@ go_test( srcs = ["node_ports_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library", ], diff --git a/pkg/scheduler/framework/plugins/nodeports/node_ports.go b/pkg/scheduler/framework/plugins/nodeports/node_ports.go index f3332fff919..292016e49ba 100644 --- a/pkg/scheduler/framework/plugins/nodeports/node_ports.go +++ b/pkg/scheduler/framework/plugins/nodeports/node_ports.go @@ -22,7 +22,7 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) // NodePorts is a plugin that checks if a node has free ports for the requested pod ports. @@ -129,6 +129,6 @@ func fitsPorts(wantPorts []*v1.ContainerPort, nodeInfo *framework.NodeInfo) bool } // New initializes a new plugin and returns it. -func New(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { +func New(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &NodePorts{}, nil } diff --git a/pkg/scheduler/framework/plugins/nodeports/node_ports_test.go b/pkg/scheduler/framework/plugins/nodeports/node_ports_test.go index 15e0da03ebd..087ade2319a 100644 --- a/pkg/scheduler/framework/plugins/nodeports/node_ports_test.go +++ b/pkg/scheduler/framework/plugins/nodeports/node_ports_test.go @@ -25,7 +25,7 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/diff" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) func newPod(host string, hostPortInfos ...string) *v1.Pod { diff --git a/pkg/scheduler/framework/plugins/nodepreferavoidpods/BUILD b/pkg/scheduler/framework/plugins/nodepreferavoidpods/BUILD index 6aa284192d3..fb497b344f7 100644 --- a/pkg/scheduler/framework/plugins/nodepreferavoidpods/BUILD +++ b/pkg/scheduler/framework/plugins/nodepreferavoidpods/BUILD @@ -7,7 +7,7 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/apis/core/v1/helper:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", @@ -19,8 +19,8 @@ go_test( srcs = ["node_prefer_avoid_pods_test.go"], embed = [":go_default_library"], deps = [ + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/runtime:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/pkg/scheduler/framework/plugins/nodepreferavoidpods/node_prefer_avoid_pods.go b/pkg/scheduler/framework/plugins/nodepreferavoidpods/node_prefer_avoid_pods.go index 8daff1a0907..d1471b082fe 100644 --- a/pkg/scheduler/framework/plugins/nodepreferavoidpods/node_prefer_avoid_pods.go +++ b/pkg/scheduler/framework/plugins/nodepreferavoidpods/node_prefer_avoid_pods.go @@ -24,13 +24,13 @@ import ( metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) // NodePreferAvoidPods is a plugin that priorities nodes according to the node annotation // "scheduler.alpha.kubernetes.io/preferAvoidPods". type NodePreferAvoidPods struct { - handle framework.FrameworkHandle + handle framework.Handle } var _ framework.ScorePlugin = &NodePreferAvoidPods{} @@ -87,6 +87,6 @@ func (pl *NodePreferAvoidPods) ScoreExtensions() framework.ScoreExtensions { } // New initializes a new plugin and returns it. -func New(_ runtime.Object, h framework.FrameworkHandle) (framework.Plugin, error) { +func New(_ runtime.Object, h framework.Handle) (framework.Plugin, error) { return &NodePreferAvoidPods{handle: h}, nil } diff --git a/pkg/scheduler/framework/plugins/nodepreferavoidpods/node_prefer_avoid_pods_test.go b/pkg/scheduler/framework/plugins/nodepreferavoidpods/node_prefer_avoid_pods_test.go index 8369407b2fc..442ecdc341a 100644 --- a/pkg/scheduler/framework/plugins/nodepreferavoidpods/node_prefer_avoid_pods_test.go +++ b/pkg/scheduler/framework/plugins/nodepreferavoidpods/node_prefer_avoid_pods_test.go @@ -23,8 +23,8 @@ import ( v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" "k8s.io/kubernetes/pkg/scheduler/internal/cache" ) diff --git a/pkg/scheduler/framework/plugins/noderesources/BUILD b/pkg/scheduler/framework/plugins/noderesources/BUILD index 4d09304432a..7eb426090af 100644 --- a/pkg/scheduler/framework/plugins/noderesources/BUILD +++ b/pkg/scheduler/framework/plugins/noderesources/BUILD @@ -18,7 +18,7 @@ go_library( "//pkg/features:go_default_library", "//pkg/scheduler/apis/config:go_default_library", "//pkg/scheduler/apis/config/validation:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/util:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", @@ -60,8 +60,8 @@ go_test( "//pkg/apis/core/v1/helper:go_default_library", "//pkg/features:go_default_library", "//pkg/scheduler/apis/config:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/runtime:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", diff --git a/pkg/scheduler/framework/plugins/noderesources/balanced_allocation.go b/pkg/scheduler/framework/plugins/noderesources/balanced_allocation.go index 95495e6d18f..113b4a5f050 100644 --- a/pkg/scheduler/framework/plugins/noderesources/balanced_allocation.go +++ b/pkg/scheduler/framework/plugins/noderesources/balanced_allocation.go @@ -25,13 +25,13 @@ import ( "k8s.io/apimachinery/pkg/runtime" utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/kubernetes/pkg/features" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) // BalancedAllocation is a score plugin that calculates the difference between the cpu and memory fraction // of capacity, and prioritizes the host based on how close the two metrics are to each other. type BalancedAllocation struct { - handle framework.FrameworkHandle + handle framework.Handle resourceAllocationScorer } @@ -67,7 +67,7 @@ func (ba *BalancedAllocation) ScoreExtensions() framework.ScoreExtensions { } // NewBalancedAllocation initializes a new plugin and returns it. -func NewBalancedAllocation(_ runtime.Object, h framework.FrameworkHandle) (framework.Plugin, error) { +func NewBalancedAllocation(_ runtime.Object, h framework.Handle) (framework.Plugin, error) { return &BalancedAllocation{ handle: h, resourceAllocationScorer: resourceAllocationScorer{ diff --git a/pkg/scheduler/framework/plugins/noderesources/balanced_allocation_test.go b/pkg/scheduler/framework/plugins/noderesources/balanced_allocation_test.go index 9e7412a65d0..676f28a3dba 100644 --- a/pkg/scheduler/framework/plugins/noderesources/balanced_allocation_test.go +++ b/pkg/scheduler/framework/plugins/noderesources/balanced_allocation_test.go @@ -27,8 +27,8 @@ import ( utilfeature "k8s.io/apiserver/pkg/util/feature" featuregatetesting "k8s.io/component-base/featuregate/testing" "k8s.io/kubernetes/pkg/features" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" "k8s.io/kubernetes/pkg/scheduler/internal/cache" ) diff --git a/pkg/scheduler/framework/plugins/noderesources/fit.go b/pkg/scheduler/framework/plugins/noderesources/fit.go index 3d3dc25d876..8d65cfeefc3 100644 --- a/pkg/scheduler/framework/plugins/noderesources/fit.go +++ b/pkg/scheduler/framework/plugins/noderesources/fit.go @@ -30,7 +30,7 @@ import ( v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/scheduler/apis/config" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) var _ framework.PreFilterPlugin = &Fit{} @@ -94,7 +94,7 @@ func validateFitArgs(args config.NodeResourcesFitArgs) error { } // NewFit initializes a new plugin and returns it. -func NewFit(plArgs runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { +func NewFit(plArgs runtime.Object, _ framework.Handle) (framework.Plugin, error) { args, err := getFitArgs(plArgs) if err != nil { return nil, err diff --git a/pkg/scheduler/framework/plugins/noderesources/fit_test.go b/pkg/scheduler/framework/plugins/noderesources/fit_test.go index 4e44447a45b..f0c5b04a7a4 100644 --- a/pkg/scheduler/framework/plugins/noderesources/fit_test.go +++ b/pkg/scheduler/framework/plugins/noderesources/fit_test.go @@ -27,7 +27,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" "k8s.io/kubernetes/pkg/scheduler/apis/config" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) var ( diff --git a/pkg/scheduler/framework/plugins/noderesources/least_allocated.go b/pkg/scheduler/framework/plugins/noderesources/least_allocated.go index e8d186e0eb9..32d77a7672c 100644 --- a/pkg/scheduler/framework/plugins/noderesources/least_allocated.go +++ b/pkg/scheduler/framework/plugins/noderesources/least_allocated.go @@ -24,12 +24,12 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/apis/config/validation" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) // LeastAllocated is a score plugin that favors nodes with fewer allocation requested resources based on requested resources. type LeastAllocated struct { - handle framework.FrameworkHandle + handle framework.Handle resourceAllocationScorer } @@ -65,7 +65,7 @@ func (la *LeastAllocated) ScoreExtensions() framework.ScoreExtensions { } // NewLeastAllocated initializes a new plugin and returns it. -func NewLeastAllocated(laArgs runtime.Object, h framework.FrameworkHandle) (framework.Plugin, error) { +func NewLeastAllocated(laArgs runtime.Object, h framework.Handle) (framework.Plugin, error) { args, ok := laArgs.(*config.NodeResourcesLeastAllocatedArgs) if !ok { return nil, fmt.Errorf("want args to be of type NodeResourcesLeastAllocatedArgs, got %T", laArgs) diff --git a/pkg/scheduler/framework/plugins/noderesources/least_allocated_test.go b/pkg/scheduler/framework/plugins/noderesources/least_allocated_test.go index 127a2981275..330a919a154 100644 --- a/pkg/scheduler/framework/plugins/noderesources/least_allocated_test.go +++ b/pkg/scheduler/framework/plugins/noderesources/least_allocated_test.go @@ -25,8 +25,8 @@ import ( "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/scheduler/apis/config" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" "k8s.io/kubernetes/pkg/scheduler/internal/cache" ) diff --git a/pkg/scheduler/framework/plugins/noderesources/most_allocated.go b/pkg/scheduler/framework/plugins/noderesources/most_allocated.go index 67aa2a6394f..4df34e13017 100644 --- a/pkg/scheduler/framework/plugins/noderesources/most_allocated.go +++ b/pkg/scheduler/framework/plugins/noderesources/most_allocated.go @@ -24,12 +24,12 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/apis/config/validation" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) // MostAllocated is a score plugin that favors nodes with high allocation based on requested resources. type MostAllocated struct { - handle framework.FrameworkHandle + handle framework.Handle resourceAllocationScorer } @@ -63,7 +63,7 @@ func (ma *MostAllocated) ScoreExtensions() framework.ScoreExtensions { } // NewMostAllocated initializes a new plugin and returns it. -func NewMostAllocated(maArgs runtime.Object, h framework.FrameworkHandle) (framework.Plugin, error) { +func NewMostAllocated(maArgs runtime.Object, h framework.Handle) (framework.Plugin, error) { args, ok := maArgs.(*config.NodeResourcesMostAllocatedArgs) if !ok { return nil, fmt.Errorf("want args to be of type NodeResourcesMostAllocatedArgs, got %T", args) diff --git a/pkg/scheduler/framework/plugins/noderesources/most_allocated_test.go b/pkg/scheduler/framework/plugins/noderesources/most_allocated_test.go index d10e87e8dc0..0f9a17ff3a1 100644 --- a/pkg/scheduler/framework/plugins/noderesources/most_allocated_test.go +++ b/pkg/scheduler/framework/plugins/noderesources/most_allocated_test.go @@ -25,8 +25,8 @@ import ( "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/scheduler/apis/config" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" "k8s.io/kubernetes/pkg/scheduler/internal/cache" ) diff --git a/pkg/scheduler/framework/plugins/noderesources/requested_to_capacity_ratio.go b/pkg/scheduler/framework/plugins/noderesources/requested_to_capacity_ratio.go index 436cf09cf56..6dd2f3badf3 100644 --- a/pkg/scheduler/framework/plugins/noderesources/requested_to_capacity_ratio.go +++ b/pkg/scheduler/framework/plugins/noderesources/requested_to_capacity_ratio.go @@ -25,7 +25,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/apis/config/validation" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) const ( @@ -45,7 +45,7 @@ type functionShapePoint struct { } // NewRequestedToCapacityRatio initializes a new plugin and returns it. -func NewRequestedToCapacityRatio(plArgs runtime.Object, handle framework.FrameworkHandle) (framework.Plugin, error) { +func NewRequestedToCapacityRatio(plArgs runtime.Object, handle framework.Handle) (framework.Plugin, error) { args, err := getRequestedToCapacityRatioArgs(plArgs) if err != nil { return nil, err @@ -96,7 +96,7 @@ func getRequestedToCapacityRatioArgs(obj runtime.Object) (config.RequestedToCapa // RequestedToCapacityRatio is a score plugin that allow users to apply bin packing // on core resources like CPU, Memory as well as extended resources like accelerators. type RequestedToCapacityRatio struct { - handle framework.FrameworkHandle + handle framework.Handle resourceAllocationScorer } diff --git a/pkg/scheduler/framework/plugins/noderesources/requested_to_capacity_ratio_test.go b/pkg/scheduler/framework/plugins/noderesources/requested_to_capacity_ratio_test.go index b21966afd11..d95ff6fb6e7 100644 --- a/pkg/scheduler/framework/plugins/noderesources/requested_to_capacity_ratio_test.go +++ b/pkg/scheduler/framework/plugins/noderesources/requested_to_capacity_ratio_test.go @@ -25,8 +25,8 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" "k8s.io/kubernetes/pkg/scheduler/apis/config" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" "k8s.io/kubernetes/pkg/scheduler/internal/cache" ) diff --git a/pkg/scheduler/framework/plugins/noderesources/resource_allocation.go b/pkg/scheduler/framework/plugins/noderesources/resource_allocation.go index a6a7e6ede01..b3d60a4a7ca 100644 --- a/pkg/scheduler/framework/plugins/noderesources/resource_allocation.go +++ b/pkg/scheduler/framework/plugins/noderesources/resource_allocation.go @@ -22,7 +22,7 @@ import ( "k8s.io/klog/v2" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" "k8s.io/kubernetes/pkg/features" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" schedutil "k8s.io/kubernetes/pkg/scheduler/util" ) diff --git a/pkg/scheduler/framework/plugins/nodeunschedulable/BUILD b/pkg/scheduler/framework/plugins/nodeunschedulable/BUILD index 4b5b01cb82b..64c918b7a23 100644 --- a/pkg/scheduler/framework/plugins/nodeunschedulable/BUILD +++ b/pkg/scheduler/framework/plugins/nodeunschedulable/BUILD @@ -7,7 +7,7 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/apis/core/v1/helper:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", ], @@ -18,7 +18,7 @@ go_test( srcs = ["node_unschedulable_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", ], ) diff --git a/pkg/scheduler/framework/plugins/nodeunschedulable/node_unschedulable.go b/pkg/scheduler/framework/plugins/nodeunschedulable/node_unschedulable.go index 560630de029..4b17e2d3edf 100644 --- a/pkg/scheduler/framework/plugins/nodeunschedulable/node_unschedulable.go +++ b/pkg/scheduler/framework/plugins/nodeunschedulable/node_unschedulable.go @@ -22,7 +22,7 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) // NodeUnschedulable plugin filters nodes that set node.Spec.Unschedulable=true unless @@ -65,6 +65,6 @@ func (pl *NodeUnschedulable) Filter(ctx context.Context, _ *framework.CycleState } // New initializes a new plugin and returns it. -func New(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { +func New(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &NodeUnschedulable{}, nil } diff --git a/pkg/scheduler/framework/plugins/nodeunschedulable/node_unschedulable_test.go b/pkg/scheduler/framework/plugins/nodeunschedulable/node_unschedulable_test.go index eaa6ca35bd8..339a77953b4 100644 --- a/pkg/scheduler/framework/plugins/nodeunschedulable/node_unschedulable_test.go +++ b/pkg/scheduler/framework/plugins/nodeunschedulable/node_unschedulable_test.go @@ -22,7 +22,7 @@ import ( "testing" v1 "k8s.io/api/core/v1" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) func TestNodeUnschedulable(t *testing.T) { diff --git a/pkg/scheduler/framework/plugins/nodevolumelimits/BUILD b/pkg/scheduler/framework/plugins/nodevolumelimits/BUILD index 4f3242ab737..9ff36e74e66 100644 --- a/pkg/scheduler/framework/plugins/nodevolumelimits/BUILD +++ b/pkg/scheduler/framework/plugins/nodevolumelimits/BUILD @@ -12,7 +12,7 @@ go_library( deps = [ "//pkg/apis/core/v1/helper:go_default_library", "//pkg/features:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/volume/util:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/storage/v1:go_default_library", @@ -38,8 +38,8 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/features:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", - "//pkg/scheduler/framework/v1alpha1/fake:go_default_library", + "//pkg/scheduler/framework:go_default_library", + "//pkg/scheduler/framework/fake:go_default_library", "//pkg/volume/util:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/storage/v1:go_default_library", diff --git a/pkg/scheduler/framework/plugins/nodevolumelimits/csi.go b/pkg/scheduler/framework/plugins/nodevolumelimits/csi.go index c05b49cd846..873e2c42cad 100644 --- a/pkg/scheduler/framework/plugins/nodevolumelimits/csi.go +++ b/pkg/scheduler/framework/plugins/nodevolumelimits/csi.go @@ -28,7 +28,7 @@ import ( storagelisters "k8s.io/client-go/listers/storage/v1" csitrans "k8s.io/csi-translation-lib" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" volumeutil "k8s.io/kubernetes/pkg/volume/util" "k8s.io/klog/v2" @@ -266,7 +266,7 @@ func (pl *CSILimits) getCSIDriverInfoFromSC(csiNode *storagev1.CSINode, pvc *v1. } // NewCSI initializes a new plugin and returns it. -func NewCSI(_ runtime.Object, handle framework.FrameworkHandle) (framework.Plugin, error) { +func NewCSI(_ runtime.Object, handle framework.Handle) (framework.Plugin, error) { informerFactory := handle.SharedInformerFactory() pvLister := informerFactory.Core().V1().PersistentVolumes().Lister() pvcLister := informerFactory.Core().V1().PersistentVolumeClaims().Lister() diff --git a/pkg/scheduler/framework/plugins/nodevolumelimits/csi_test.go b/pkg/scheduler/framework/plugins/nodevolumelimits/csi_test.go index 18178e20746..b92620acacc 100644 --- a/pkg/scheduler/framework/plugins/nodevolumelimits/csi_test.go +++ b/pkg/scheduler/framework/plugins/nodevolumelimits/csi_test.go @@ -34,8 +34,8 @@ import ( csitrans "k8s.io/csi-translation-lib" csilibplugins "k8s.io/csi-translation-lib/plugins" "k8s.io/kubernetes/pkg/features" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" - fakeframework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1/fake" + "k8s.io/kubernetes/pkg/scheduler/framework" + fakeframework "k8s.io/kubernetes/pkg/scheduler/framework/fake" volumeutil "k8s.io/kubernetes/pkg/volume/util" utilpointer "k8s.io/utils/pointer" ) diff --git a/pkg/scheduler/framework/plugins/nodevolumelimits/non_csi.go b/pkg/scheduler/framework/plugins/nodevolumelimits/non_csi.go index 030d86d3ca6..5f0855b313e 100644 --- a/pkg/scheduler/framework/plugins/nodevolumelimits/non_csi.go +++ b/pkg/scheduler/framework/plugins/nodevolumelimits/non_csi.go @@ -35,7 +35,7 @@ import ( "k8s.io/klog/v2" "k8s.io/kubernetes/pkg/features" kubefeatures "k8s.io/kubernetes/pkg/features" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" volumeutil "k8s.io/kubernetes/pkg/volume/util" ) @@ -68,7 +68,7 @@ const ( const AzureDiskName = "AzureDiskLimits" // NewAzureDisk returns function that initializes a new plugin and returns it. -func NewAzureDisk(_ runtime.Object, handle framework.FrameworkHandle) (framework.Plugin, error) { +func NewAzureDisk(_ runtime.Object, handle framework.Handle) (framework.Plugin, error) { informerFactory := handle.SharedInformerFactory() return newNonCSILimitsWithInformerFactory(azureDiskVolumeFilterType, informerFactory), nil } @@ -77,7 +77,7 @@ func NewAzureDisk(_ runtime.Object, handle framework.FrameworkHandle) (framework const CinderName = "CinderLimits" // NewCinder returns function that initializes a new plugin and returns it. -func NewCinder(_ runtime.Object, handle framework.FrameworkHandle) (framework.Plugin, error) { +func NewCinder(_ runtime.Object, handle framework.Handle) (framework.Plugin, error) { informerFactory := handle.SharedInformerFactory() return newNonCSILimitsWithInformerFactory(cinderVolumeFilterType, informerFactory), nil } @@ -86,7 +86,7 @@ func NewCinder(_ runtime.Object, handle framework.FrameworkHandle) (framework.Pl const EBSName = "EBSLimits" // NewEBS returns function that initializes a new plugin and returns it. -func NewEBS(_ runtime.Object, handle framework.FrameworkHandle) (framework.Plugin, error) { +func NewEBS(_ runtime.Object, handle framework.Handle) (framework.Plugin, error) { informerFactory := handle.SharedInformerFactory() return newNonCSILimitsWithInformerFactory(ebsVolumeFilterType, informerFactory), nil } @@ -95,7 +95,7 @@ func NewEBS(_ runtime.Object, handle framework.FrameworkHandle) (framework.Plugi const GCEPDName = "GCEPDLimits" // NewGCEPD returns function that initializes a new plugin and returns it. -func NewGCEPD(_ runtime.Object, handle framework.FrameworkHandle) (framework.Plugin, error) { +func NewGCEPD(_ runtime.Object, handle framework.Handle) (framework.Plugin, error) { informerFactory := handle.SharedInformerFactory() return newNonCSILimitsWithInformerFactory(gcePDVolumeFilterType, informerFactory), nil } diff --git a/pkg/scheduler/framework/plugins/nodevolumelimits/non_csi_test.go b/pkg/scheduler/framework/plugins/nodevolumelimits/non_csi_test.go index 3ad7eb514f4..35b9310371c 100644 --- a/pkg/scheduler/framework/plugins/nodevolumelimits/non_csi_test.go +++ b/pkg/scheduler/framework/plugins/nodevolumelimits/non_csi_test.go @@ -26,8 +26,8 @@ import ( v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" csilibplugins "k8s.io/csi-translation-lib/plugins" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" - fakeframework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1/fake" + "k8s.io/kubernetes/pkg/scheduler/framework" + fakeframework "k8s.io/kubernetes/pkg/scheduler/framework/fake" utilpointer "k8s.io/utils/pointer" ) diff --git a/pkg/scheduler/framework/plugins/nodevolumelimits/utils.go b/pkg/scheduler/framework/plugins/nodevolumelimits/utils.go index 3fd98da1485..56e7fcc7b13 100644 --- a/pkg/scheduler/framework/plugins/nodevolumelimits/utils.go +++ b/pkg/scheduler/framework/plugins/nodevolumelimits/utils.go @@ -26,7 +26,7 @@ import ( csilibplugins "k8s.io/csi-translation-lib/plugins" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" "k8s.io/kubernetes/pkg/features" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) // isCSIMigrationOn returns a boolean value indicating whether diff --git a/pkg/scheduler/framework/plugins/podtopologyspread/BUILD b/pkg/scheduler/framework/plugins/podtopologyspread/BUILD index 933532dbf81..d8ef3d04c21 100644 --- a/pkg/scheduler/framework/plugins/podtopologyspread/BUILD +++ b/pkg/scheduler/framework/plugins/podtopologyspread/BUILD @@ -13,8 +13,8 @@ go_library( deps = [ "//pkg/scheduler/apis/config:go_default_library", "//pkg/scheduler/apis/config/validation:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/plugins/helper:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/internal/parallelize:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", @@ -37,8 +37,8 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/scheduler/apis/config:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/runtime:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//pkg/scheduler/internal/parallelize:go_default_library", "//pkg/scheduler/testing:go_default_library", diff --git a/pkg/scheduler/framework/plugins/podtopologyspread/common.go b/pkg/scheduler/framework/plugins/podtopologyspread/common.go index 6290d7a1980..2c66b50d1f1 100644 --- a/pkg/scheduler/framework/plugins/podtopologyspread/common.go +++ b/pkg/scheduler/framework/plugins/podtopologyspread/common.go @@ -20,8 +20,8 @@ import ( v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/labels" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/helper" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" ) type topologyPair struct { diff --git a/pkg/scheduler/framework/plugins/podtopologyspread/filtering.go b/pkg/scheduler/framework/plugins/podtopologyspread/filtering.go index b9f54c8ba76..cf6099ee63b 100644 --- a/pkg/scheduler/framework/plugins/podtopologyspread/filtering.go +++ b/pkg/scheduler/framework/plugins/podtopologyspread/filtering.go @@ -25,8 +25,8 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/labels" "k8s.io/klog/v2" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/helper" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" "k8s.io/kubernetes/pkg/scheduler/internal/parallelize" ) diff --git a/pkg/scheduler/framework/plugins/podtopologyspread/filtering_test.go b/pkg/scheduler/framework/plugins/podtopologyspread/filtering_test.go index bee72352adc..d25c9f67c58 100644 --- a/pkg/scheduler/framework/plugins/podtopologyspread/filtering_test.go +++ b/pkg/scheduler/framework/plugins/podtopologyspread/filtering_test.go @@ -29,7 +29,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/informers" "k8s.io/client-go/kubernetes/fake" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/internal/cache" "k8s.io/kubernetes/pkg/scheduler/internal/parallelize" st "k8s.io/kubernetes/pkg/scheduler/testing" diff --git a/pkg/scheduler/framework/plugins/podtopologyspread/plugin.go b/pkg/scheduler/framework/plugins/podtopologyspread/plugin.go index a03eb023754..203b5590aed 100644 --- a/pkg/scheduler/framework/plugins/podtopologyspread/plugin.go +++ b/pkg/scheduler/framework/plugins/podtopologyspread/plugin.go @@ -26,7 +26,7 @@ import ( corelisters "k8s.io/client-go/listers/core/v1" "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/apis/config/validation" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) const ( @@ -75,7 +75,7 @@ func (pl *PodTopologySpread) Name() string { } // New initializes a new plugin and returns it. -func New(plArgs runtime.Object, h framework.FrameworkHandle) (framework.Plugin, error) { +func New(plArgs runtime.Object, h framework.Handle) (framework.Plugin, error) { if h.SnapshotSharedLister() == nil { return nil, fmt.Errorf("SnapshotSharedlister is nil") } diff --git a/pkg/scheduler/framework/plugins/podtopologyspread/scoring.go b/pkg/scheduler/framework/plugins/podtopologyspread/scoring.go index 85c92fb4d81..5a33f097028 100644 --- a/pkg/scheduler/framework/plugins/podtopologyspread/scoring.go +++ b/pkg/scheduler/framework/plugins/podtopologyspread/scoring.go @@ -24,8 +24,8 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/sets" + "k8s.io/kubernetes/pkg/scheduler/framework" pluginhelper "k8s.io/kubernetes/pkg/scheduler/framework/plugins/helper" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" "k8s.io/kubernetes/pkg/scheduler/internal/parallelize" ) diff --git a/pkg/scheduler/framework/plugins/podtopologyspread/scoring_test.go b/pkg/scheduler/framework/plugins/podtopologyspread/scoring_test.go index 147b4d082c0..5a90841723b 100644 --- a/pkg/scheduler/framework/plugins/podtopologyspread/scoring_test.go +++ b/pkg/scheduler/framework/plugins/podtopologyspread/scoring_test.go @@ -28,8 +28,8 @@ import ( "k8s.io/client-go/informers" "k8s.io/client-go/kubernetes/fake" "k8s.io/kubernetes/pkg/scheduler/apis/config" + "k8s.io/kubernetes/pkg/scheduler/framework" frameworkruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" "k8s.io/kubernetes/pkg/scheduler/internal/cache" "k8s.io/kubernetes/pkg/scheduler/internal/parallelize" st "k8s.io/kubernetes/pkg/scheduler/testing" diff --git a/pkg/scheduler/framework/plugins/queuesort/BUILD b/pkg/scheduler/framework/plugins/queuesort/BUILD index a02f9e79a4f..f9fdecc31e7 100644 --- a/pkg/scheduler/framework/plugins/queuesort/BUILD +++ b/pkg/scheduler/framework/plugins/queuesort/BUILD @@ -6,7 +6,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/scheduler/framework/plugins/queuesort", visibility = ["//visibility:public"], deps = [ - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/component-helpers/scheduling/corev1:go_default_library", ], @@ -17,7 +17,7 @@ go_test( srcs = ["priority_sort_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", ], ) diff --git a/pkg/scheduler/framework/plugins/queuesort/priority_sort.go b/pkg/scheduler/framework/plugins/queuesort/priority_sort.go index 6d65ce22d95..b8acf0cc436 100644 --- a/pkg/scheduler/framework/plugins/queuesort/priority_sort.go +++ b/pkg/scheduler/framework/plugins/queuesort/priority_sort.go @@ -19,7 +19,7 @@ package queuesort import ( "k8s.io/apimachinery/pkg/runtime" corev1helpers "k8s.io/component-helpers/scheduling/corev1" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) // Name is the name of the plugin used in the plugin registry and configurations. @@ -45,6 +45,6 @@ func (pl *PrioritySort) Less(pInfo1, pInfo2 *framework.QueuedPodInfo) bool { } // New initializes a new plugin and returns it. -func New(_ runtime.Object, handle framework.FrameworkHandle) (framework.Plugin, error) { +func New(_ runtime.Object, handle framework.Handle) (framework.Plugin, error) { return &PrioritySort{}, nil } diff --git a/pkg/scheduler/framework/plugins/queuesort/priority_sort_test.go b/pkg/scheduler/framework/plugins/queuesort/priority_sort_test.go index 412d64bd6e2..0e660f99fcf 100644 --- a/pkg/scheduler/framework/plugins/queuesort/priority_sort_test.go +++ b/pkg/scheduler/framework/plugins/queuesort/priority_sort_test.go @@ -17,11 +17,10 @@ limitations under the License. package queuesort import ( + v1 "k8s.io/api/core/v1" + "k8s.io/kubernetes/pkg/scheduler/framework" "testing" "time" - - v1 "k8s.io/api/core/v1" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" ) func TestLess(t *testing.T) { diff --git a/pkg/scheduler/framework/plugins/selectorspread/BUILD b/pkg/scheduler/framework/plugins/selectorspread/BUILD index 177a45bfbca..36855668904 100644 --- a/pkg/scheduler/framework/plugins/selectorspread/BUILD +++ b/pkg/scheduler/framework/plugins/selectorspread/BUILD @@ -6,8 +6,8 @@ go_library( importpath = "k8s.io/kubernetes/pkg/scheduler/framework/plugins/selectorspread", visibility = ["//visibility:public"], deps = [ + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/plugins/helper:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/util/node:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", @@ -25,8 +25,8 @@ go_test( ], embed = [":go_default_library"], deps = [ + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/runtime:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//pkg/scheduler/internal/parallelize:go_default_library", "//pkg/scheduler/testing:go_default_library", diff --git a/pkg/scheduler/framework/plugins/selectorspread/selector_spread.go b/pkg/scheduler/framework/plugins/selectorspread/selector_spread.go index b332d9e9124..987503ffa4e 100644 --- a/pkg/scheduler/framework/plugins/selectorspread/selector_spread.go +++ b/pkg/scheduler/framework/plugins/selectorspread/selector_spread.go @@ -25,8 +25,8 @@ import ( "k8s.io/apimachinery/pkg/runtime" appslisters "k8s.io/client-go/listers/apps/v1" corelisters "k8s.io/client-go/listers/core/v1" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/helper" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" utilnode "k8s.io/kubernetes/pkg/util/node" ) @@ -197,7 +197,7 @@ func (pl *SelectorSpread) PreScore(ctx context.Context, cycleState *framework.Cy } // New initializes a new plugin and returns it. -func New(_ runtime.Object, handle framework.FrameworkHandle) (framework.Plugin, error) { +func New(_ runtime.Object, handle framework.Handle) (framework.Plugin, error) { sharedLister := handle.SnapshotSharedLister() if sharedLister == nil { return nil, fmt.Errorf("SnapshotSharedLister is nil") diff --git a/pkg/scheduler/framework/plugins/selectorspread/selector_spread_perf_test.go b/pkg/scheduler/framework/plugins/selectorspread/selector_spread_perf_test.go index d169e4ff52e..9b76d181031 100644 --- a/pkg/scheduler/framework/plugins/selectorspread/selector_spread_perf_test.go +++ b/pkg/scheduler/framework/plugins/selectorspread/selector_spread_perf_test.go @@ -23,8 +23,8 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/client-go/informers" "k8s.io/client-go/kubernetes/fake" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" "k8s.io/kubernetes/pkg/scheduler/internal/cache" "k8s.io/kubernetes/pkg/scheduler/internal/parallelize" st "k8s.io/kubernetes/pkg/scheduler/testing" diff --git a/pkg/scheduler/framework/plugins/selectorspread/selector_spread_test.go b/pkg/scheduler/framework/plugins/selectorspread/selector_spread_test.go index 59ca448d378..ea8baea84c2 100644 --- a/pkg/scheduler/framework/plugins/selectorspread/selector_spread_test.go +++ b/pkg/scheduler/framework/plugins/selectorspread/selector_spread_test.go @@ -29,8 +29,8 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/informers" clientsetfake "k8s.io/client-go/kubernetes/fake" + "k8s.io/kubernetes/pkg/scheduler/framework" frameworkruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" "k8s.io/kubernetes/pkg/scheduler/internal/cache" ) diff --git a/pkg/scheduler/framework/plugins/serviceaffinity/BUILD b/pkg/scheduler/framework/plugins/serviceaffinity/BUILD index ac005623cc3..61d975c6368 100644 --- a/pkg/scheduler/framework/plugins/serviceaffinity/BUILD +++ b/pkg/scheduler/framework/plugins/serviceaffinity/BUILD @@ -7,8 +7,8 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/scheduler/apis/config:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/plugins/helper:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", @@ -22,8 +22,8 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/scheduler/apis/config:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", - "//pkg/scheduler/framework/v1alpha1/fake:go_default_library", + "//pkg/scheduler/framework:go_default_library", + "//pkg/scheduler/framework/fake:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity.go b/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity.go index 2bff04bcafe..c365d2385c0 100644 --- a/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity.go +++ b/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity.go @@ -25,8 +25,8 @@ import ( "k8s.io/apimachinery/pkg/runtime" corelisters "k8s.io/client-go/listers/core/v1" "k8s.io/kubernetes/pkg/scheduler/apis/config" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/helper" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" ) const ( @@ -63,7 +63,7 @@ func (s *preFilterState) Clone() framework.StateData { } // New initializes a new plugin and returns it. -func New(plArgs runtime.Object, handle framework.FrameworkHandle) (framework.Plugin, error) { +func New(plArgs runtime.Object, handle framework.Handle) (framework.Plugin, error) { args, err := getArgs(plArgs) if err != nil { return nil, err diff --git a/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity_test.go b/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity_test.go index 6801ee7805d..e9a8c320057 100644 --- a/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity_test.go +++ b/pkg/scheduler/framework/plugins/serviceaffinity/service_affinity_test.go @@ -25,8 +25,8 @@ import ( v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/kubernetes/pkg/scheduler/apis/config" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" - fakeframework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1/fake" + "k8s.io/kubernetes/pkg/scheduler/framework" + fakeframework "k8s.io/kubernetes/pkg/scheduler/framework/fake" "k8s.io/kubernetes/pkg/scheduler/internal/cache" ) diff --git a/pkg/scheduler/framework/plugins/tainttoleration/BUILD b/pkg/scheduler/framework/plugins/tainttoleration/BUILD index 52557086536..ff88b1d0cb5 100644 --- a/pkg/scheduler/framework/plugins/tainttoleration/BUILD +++ b/pkg/scheduler/framework/plugins/tainttoleration/BUILD @@ -7,8 +7,8 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/apis/core/v1/helper:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/plugins/helper:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", ], @@ -33,8 +33,8 @@ go_test( srcs = ["taint_toleration_test.go"], embed = [":go_default_library"], deps = [ + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/runtime:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/pkg/scheduler/framework/plugins/tainttoleration/taint_toleration.go b/pkg/scheduler/framework/plugins/tainttoleration/taint_toleration.go index 8e6f11047b1..ffaecb5a6ab 100644 --- a/pkg/scheduler/framework/plugins/tainttoleration/taint_toleration.go +++ b/pkg/scheduler/framework/plugins/tainttoleration/taint_toleration.go @@ -23,13 +23,13 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" + "k8s.io/kubernetes/pkg/scheduler/framework" pluginhelper "k8s.io/kubernetes/pkg/scheduler/framework/plugins/helper" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" ) // TaintToleration is a plugin that checks if a pod tolerates a node's taints. type TaintToleration struct { - handle framework.FrameworkHandle + handle framework.Handle } var _ framework.FilterPlugin = &TaintToleration{} @@ -162,6 +162,6 @@ func (pl *TaintToleration) ScoreExtensions() framework.ScoreExtensions { } // New initializes a new plugin and returns it. -func New(_ runtime.Object, h framework.FrameworkHandle) (framework.Plugin, error) { +func New(_ runtime.Object, h framework.Handle) (framework.Plugin, error) { return &TaintToleration{handle: h}, nil } diff --git a/pkg/scheduler/framework/plugins/tainttoleration/taint_toleration_test.go b/pkg/scheduler/framework/plugins/tainttoleration/taint_toleration_test.go index 093d4e12f17..9450d36a8a6 100644 --- a/pkg/scheduler/framework/plugins/tainttoleration/taint_toleration_test.go +++ b/pkg/scheduler/framework/plugins/tainttoleration/taint_toleration_test.go @@ -23,8 +23,8 @@ import ( v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" "k8s.io/kubernetes/pkg/scheduler/internal/cache" ) diff --git a/pkg/scheduler/framework/plugins/volumebinding/BUILD b/pkg/scheduler/framework/plugins/volumebinding/BUILD index 745e6e6a219..7e81a3d3cc2 100644 --- a/pkg/scheduler/framework/plugins/volumebinding/BUILD +++ b/pkg/scheduler/framework/plugins/volumebinding/BUILD @@ -9,7 +9,7 @@ go_library( "//pkg/controller/volume/scheduling:go_default_library", "//pkg/features:go_default_library", "//pkg/scheduler/apis/config:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", @@ -41,8 +41,8 @@ go_test( "//pkg/controller/volume/persistentvolume/util:go_default_library", "//pkg/controller/volume/scheduling:go_default_library", "//pkg/scheduler/apis/config:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/runtime:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/storage/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/pkg/scheduler/framework/plugins/volumebinding/volume_binding.go b/pkg/scheduler/framework/plugins/volumebinding/volume_binding.go index ff0005074a7..eec4d5a7e2b 100644 --- a/pkg/scheduler/framework/plugins/volumebinding/volume_binding.go +++ b/pkg/scheduler/framework/plugins/volumebinding/volume_binding.go @@ -31,7 +31,7 @@ import ( "k8s.io/kubernetes/pkg/controller/volume/scheduling" "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/scheduler/apis/config" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) const ( @@ -278,7 +278,7 @@ func (pl *VolumeBinding) Unreserve(ctx context.Context, cs *framework.CycleState } // New initializes a new plugin and returns it. -func New(plArgs runtime.Object, fh framework.FrameworkHandle) (framework.Plugin, error) { +func New(plArgs runtime.Object, fh framework.Handle) (framework.Plugin, error) { args, ok := plArgs.(*config.VolumeBindingArgs) if !ok { return nil, fmt.Errorf("want args to be of type VolumeBindingArgs, got %T", plArgs) diff --git a/pkg/scheduler/framework/plugins/volumebinding/volume_binding_test.go b/pkg/scheduler/framework/plugins/volumebinding/volume_binding_test.go index e602843ac4c..3014fd068cd 100644 --- a/pkg/scheduler/framework/plugins/volumebinding/volume_binding_test.go +++ b/pkg/scheduler/framework/plugins/volumebinding/volume_binding_test.go @@ -29,8 +29,8 @@ import ( pvutil "k8s.io/kubernetes/pkg/controller/volume/persistentvolume/util" "k8s.io/kubernetes/pkg/controller/volume/scheduling" "k8s.io/kubernetes/pkg/scheduler/apis/config" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" "k8s.io/utils/pointer" ) diff --git a/pkg/scheduler/framework/plugins/volumerestrictions/BUILD b/pkg/scheduler/framework/plugins/volumerestrictions/BUILD index 997d00086db..74d1f9dc956 100644 --- a/pkg/scheduler/framework/plugins/volumerestrictions/BUILD +++ b/pkg/scheduler/framework/plugins/volumerestrictions/BUILD @@ -6,7 +6,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumerestrictions", visibility = ["//visibility:public"], deps = [ - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", ], @@ -31,7 +31,7 @@ go_test( srcs = ["volume_restrictions_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", ], ) diff --git a/pkg/scheduler/framework/plugins/volumerestrictions/volume_restrictions.go b/pkg/scheduler/framework/plugins/volumerestrictions/volume_restrictions.go index 410fdb6d873..14ef408a30e 100644 --- a/pkg/scheduler/framework/plugins/volumerestrictions/volume_restrictions.go +++ b/pkg/scheduler/framework/plugins/volumerestrictions/volume_restrictions.go @@ -21,7 +21,7 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) // VolumeRestrictions is a plugin that checks volume restrictions. @@ -130,6 +130,6 @@ func (pl *VolumeRestrictions) Filter(ctx context.Context, _ *framework.CycleStat } // New initializes a new plugin and returns it. -func New(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { +func New(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &VolumeRestrictions{}, nil } diff --git a/pkg/scheduler/framework/plugins/volumerestrictions/volume_restrictions_test.go b/pkg/scheduler/framework/plugins/volumerestrictions/volume_restrictions_test.go index a64fbbfc048..a7208a4c76a 100644 --- a/pkg/scheduler/framework/plugins/volumerestrictions/volume_restrictions_test.go +++ b/pkg/scheduler/framework/plugins/volumerestrictions/volume_restrictions_test.go @@ -22,7 +22,7 @@ import ( "testing" v1 "k8s.io/api/core/v1" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) func TestGCEDiskConflicts(t *testing.T) { diff --git a/pkg/scheduler/framework/plugins/volumezone/BUILD b/pkg/scheduler/framework/plugins/volumezone/BUILD index 762d6b72f28..6d04f475f16 100644 --- a/pkg/scheduler/framework/plugins/volumezone/BUILD +++ b/pkg/scheduler/framework/plugins/volumezone/BUILD @@ -7,7 +7,7 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/apis/core/v1/helper:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/storage/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", @@ -24,8 +24,8 @@ go_test( srcs = ["volume_zone_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/scheduler/framework/v1alpha1:go_default_library", - "//pkg/scheduler/framework/v1alpha1/fake:go_default_library", + "//pkg/scheduler/framework:go_default_library", + "//pkg/scheduler/framework/fake:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/storage/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/pkg/scheduler/framework/plugins/volumezone/volume_zone.go b/pkg/scheduler/framework/plugins/volumezone/volume_zone.go index c62b2ea3f73..aa90d2f3959 100644 --- a/pkg/scheduler/framework/plugins/volumezone/volume_zone.go +++ b/pkg/scheduler/framework/plugins/volumezone/volume_zone.go @@ -29,7 +29,7 @@ import ( volumehelpers "k8s.io/cloud-provider/volume/helpers" "k8s.io/klog/v2" v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) // VolumeZone is a plugin that checks volume zone. @@ -172,7 +172,7 @@ func (pl *VolumeZone) Filter(ctx context.Context, _ *framework.CycleState, pod * } // New initializes a new plugin and returns it. -func New(_ runtime.Object, handle framework.FrameworkHandle) (framework.Plugin, error) { +func New(_ runtime.Object, handle framework.Handle) (framework.Plugin, error) { informerFactory := handle.SharedInformerFactory() pvLister := informerFactory.Core().V1().PersistentVolumes().Lister() pvcLister := informerFactory.Core().V1().PersistentVolumeClaims().Lister() diff --git a/pkg/scheduler/framework/plugins/volumezone/volume_zone_test.go b/pkg/scheduler/framework/plugins/volumezone/volume_zone_test.go index 2c6deaa70e5..738d54b66a8 100644 --- a/pkg/scheduler/framework/plugins/volumezone/volume_zone_test.go +++ b/pkg/scheduler/framework/plugins/volumezone/volume_zone_test.go @@ -24,8 +24,8 @@ import ( v1 "k8s.io/api/core/v1" storagev1 "k8s.io/api/storage/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" - fakeframework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1/fake" + "k8s.io/kubernetes/pkg/scheduler/framework" + fakeframework "k8s.io/kubernetes/pkg/scheduler/framework/fake" ) func createPodWithVolume(pod, pv, pvc string) *v1.Pod { diff --git a/pkg/scheduler/framework/runtime/BUILD b/pkg/scheduler/framework/runtime/BUILD index 78d1912d59f..4b8e776d8a3 100644 --- a/pkg/scheduler/framework/runtime/BUILD +++ b/pkg/scheduler/framework/runtime/BUILD @@ -13,7 +13,7 @@ go_library( deps = [ "//pkg/scheduler/apis/config:go_default_library", "//pkg/scheduler/apis/config/scheme:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/internal/parallelize:go_default_library", "//pkg/scheduler/metrics:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", @@ -40,7 +40,7 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/scheduler/apis/config:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/metrics:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", diff --git a/pkg/scheduler/framework/runtime/framework.go b/pkg/scheduler/framework/runtime/framework.go index a184f74a6b5..f6c715af93c 100644 --- a/pkg/scheduler/framework/runtime/framework.go +++ b/pkg/scheduler/framework/runtime/framework.go @@ -33,7 +33,7 @@ import ( "k8s.io/kube-scheduler/config/v1beta1" "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/apis/config/scheme" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/internal/parallelize" "k8s.io/kubernetes/pkg/scheduler/metrics" ) diff --git a/pkg/scheduler/framework/runtime/framework_test.go b/pkg/scheduler/framework/runtime/framework_test.go index cd3783d8cf1..cb11e1ebc13 100644 --- a/pkg/scheduler/framework/runtime/framework_test.go +++ b/pkg/scheduler/framework/runtime/framework_test.go @@ -33,7 +33,7 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/scheduler/apis/config" - "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/metrics" ) @@ -55,10 +55,10 @@ const ( // TestScoreWithNormalizePlugin implements ScoreWithNormalizePlugin interface. // TestScorePlugin only implements ScorePlugin interface. -var _ v1alpha1.ScorePlugin = &TestScoreWithNormalizePlugin{} -var _ v1alpha1.ScorePlugin = &TestScorePlugin{} +var _ framework.ScorePlugin = &TestScoreWithNormalizePlugin{} +var _ framework.ScorePlugin = &TestScorePlugin{} -func newScoreWithNormalizePlugin1(injArgs runtime.Object, f v1alpha1.FrameworkHandle) (v1alpha1.Plugin, error) { +func newScoreWithNormalizePlugin1(injArgs runtime.Object, f framework.Handle) (framework.Plugin, error) { var inj injectedResult if err := DecodeInto(injArgs, &inj); err != nil { return nil, err @@ -66,7 +66,7 @@ func newScoreWithNormalizePlugin1(injArgs runtime.Object, f v1alpha1.FrameworkHa return &TestScoreWithNormalizePlugin{scoreWithNormalizePlugin1, inj}, nil } -func newScoreWithNormalizePlugin2(injArgs runtime.Object, f v1alpha1.FrameworkHandle) (v1alpha1.Plugin, error) { +func newScoreWithNormalizePlugin2(injArgs runtime.Object, f framework.Handle) (framework.Plugin, error) { var inj injectedResult if err := DecodeInto(injArgs, &inj); err != nil { return nil, err @@ -74,7 +74,7 @@ func newScoreWithNormalizePlugin2(injArgs runtime.Object, f v1alpha1.FrameworkHa return &TestScoreWithNormalizePlugin{scoreWithNormalizePlugin2, inj}, nil } -func newScorePlugin1(injArgs runtime.Object, f v1alpha1.FrameworkHandle) (v1alpha1.Plugin, error) { +func newScorePlugin1(injArgs runtime.Object, f framework.Handle) (framework.Plugin, error) { var inj injectedResult if err := DecodeInto(injArgs, &inj); err != nil { return nil, err @@ -82,7 +82,7 @@ func newScorePlugin1(injArgs runtime.Object, f v1alpha1.FrameworkHandle) (v1alph return &TestScorePlugin{scorePlugin1, inj}, nil } -func newPluginNotImplementingScore(_ runtime.Object, _ v1alpha1.FrameworkHandle) (v1alpha1.Plugin, error) { +func newPluginNotImplementingScore(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &PluginNotImplementingScore{}, nil } @@ -95,15 +95,15 @@ func (pl *TestScoreWithNormalizePlugin) Name() string { return pl.name } -func (pl *TestScoreWithNormalizePlugin) NormalizeScore(ctx context.Context, state *v1alpha1.CycleState, pod *v1.Pod, scores v1alpha1.NodeScoreList) *v1alpha1.Status { +func (pl *TestScoreWithNormalizePlugin) NormalizeScore(ctx context.Context, state *framework.CycleState, pod *v1.Pod, scores framework.NodeScoreList) *framework.Status { return injectNormalizeRes(pl.inj, scores) } -func (pl *TestScoreWithNormalizePlugin) Score(ctx context.Context, state *v1alpha1.CycleState, p *v1.Pod, nodeName string) (int64, *v1alpha1.Status) { +func (pl *TestScoreWithNormalizePlugin) Score(ctx context.Context, state *framework.CycleState, p *v1.Pod, nodeName string) (int64, *framework.Status) { return setScoreRes(pl.inj) } -func (pl *TestScoreWithNormalizePlugin) ScoreExtensions() v1alpha1.ScoreExtensions { +func (pl *TestScoreWithNormalizePlugin) ScoreExtensions() framework.ScoreExtensions { return pl } @@ -117,11 +117,11 @@ func (pl *TestScorePlugin) Name() string { return pl.name } -func (pl *TestScorePlugin) Score(ctx context.Context, state *v1alpha1.CycleState, p *v1.Pod, nodeName string) (int64, *v1alpha1.Status) { +func (pl *TestScorePlugin) Score(ctx context.Context, state *framework.CycleState, p *v1.Pod, nodeName string) (int64, *framework.Status) { return setScoreRes(pl.inj) } -func (pl *TestScorePlugin) ScoreExtensions() v1alpha1.ScoreExtensions { +func (pl *TestScorePlugin) ScoreExtensions() framework.ScoreExtensions { return nil } @@ -138,69 +138,69 @@ type TestPlugin struct { inj injectedResult } -func (pl *TestPlugin) AddPod(ctx context.Context, state *v1alpha1.CycleState, podToSchedule *v1.Pod, podToAdd *v1.Pod, nodeInfo *v1alpha1.NodeInfo) *v1alpha1.Status { - return v1alpha1.NewStatus(v1alpha1.Code(pl.inj.PreFilterAddPodStatus), "injected status") +func (pl *TestPlugin) AddPod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod, podToAdd *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status { + return framework.NewStatus(framework.Code(pl.inj.PreFilterAddPodStatus), "injected status") } -func (pl *TestPlugin) RemovePod(ctx context.Context, state *v1alpha1.CycleState, podToSchedule *v1.Pod, podToRemove *v1.Pod, nodeInfo *v1alpha1.NodeInfo) *v1alpha1.Status { - return v1alpha1.NewStatus(v1alpha1.Code(pl.inj.PreFilterRemovePodStatus), "injected status") +func (pl *TestPlugin) RemovePod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod, podToRemove *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status { + return framework.NewStatus(framework.Code(pl.inj.PreFilterRemovePodStatus), "injected status") } func (pl *TestPlugin) Name() string { return pl.name } -func (pl *TestPlugin) Less(*v1alpha1.QueuedPodInfo, *v1alpha1.QueuedPodInfo) bool { +func (pl *TestPlugin) Less(*framework.QueuedPodInfo, *framework.QueuedPodInfo) bool { return false } -func (pl *TestPlugin) Score(ctx context.Context, state *v1alpha1.CycleState, p *v1.Pod, nodeName string) (int64, *v1alpha1.Status) { - return 0, v1alpha1.NewStatus(v1alpha1.Code(pl.inj.ScoreStatus), "injected status") +func (pl *TestPlugin) Score(ctx context.Context, state *framework.CycleState, p *v1.Pod, nodeName string) (int64, *framework.Status) { + return 0, framework.NewStatus(framework.Code(pl.inj.ScoreStatus), "injected status") } -func (pl *TestPlugin) ScoreExtensions() v1alpha1.ScoreExtensions { +func (pl *TestPlugin) ScoreExtensions() framework.ScoreExtensions { return nil } -func (pl *TestPlugin) PreFilter(ctx context.Context, state *v1alpha1.CycleState, p *v1.Pod) *v1alpha1.Status { - return v1alpha1.NewStatus(v1alpha1.Code(pl.inj.PreFilterStatus), "injected status") +func (pl *TestPlugin) PreFilter(ctx context.Context, state *framework.CycleState, p *v1.Pod) *framework.Status { + return framework.NewStatus(framework.Code(pl.inj.PreFilterStatus), "injected status") } -func (pl *TestPlugin) PreFilterExtensions() v1alpha1.PreFilterExtensions { +func (pl *TestPlugin) PreFilterExtensions() framework.PreFilterExtensions { return pl } -func (pl *TestPlugin) Filter(ctx context.Context, state *v1alpha1.CycleState, pod *v1.Pod, nodeInfo *v1alpha1.NodeInfo) *v1alpha1.Status { - return v1alpha1.NewStatus(v1alpha1.Code(pl.inj.FilterStatus), "injected filter status") +func (pl *TestPlugin) Filter(ctx context.Context, state *framework.CycleState, pod *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status { + return framework.NewStatus(framework.Code(pl.inj.FilterStatus), "injected filter status") } -func (pl *TestPlugin) PostFilter(_ context.Context, _ *v1alpha1.CycleState, _ *v1.Pod, _ v1alpha1.NodeToStatusMap) (*v1alpha1.PostFilterResult, *v1alpha1.Status) { - return nil, v1alpha1.NewStatus(v1alpha1.Code(pl.inj.PostFilterStatus), "injected status") +func (pl *TestPlugin) PostFilter(_ context.Context, _ *framework.CycleState, _ *v1.Pod, _ framework.NodeToStatusMap) (*framework.PostFilterResult, *framework.Status) { + return nil, framework.NewStatus(framework.Code(pl.inj.PostFilterStatus), "injected status") } -func (pl *TestPlugin) PreScore(ctx context.Context, state *v1alpha1.CycleState, pod *v1.Pod, nodes []*v1.Node) *v1alpha1.Status { - return v1alpha1.NewStatus(v1alpha1.Code(pl.inj.PreScoreStatus), "injected status") +func (pl *TestPlugin) PreScore(ctx context.Context, state *framework.CycleState, pod *v1.Pod, nodes []*v1.Node) *framework.Status { + return framework.NewStatus(framework.Code(pl.inj.PreScoreStatus), "injected status") } -func (pl *TestPlugin) Reserve(ctx context.Context, state *v1alpha1.CycleState, p *v1.Pod, nodeName string) *v1alpha1.Status { - return v1alpha1.NewStatus(v1alpha1.Code(pl.inj.ReserveStatus), "injected status") +func (pl *TestPlugin) Reserve(ctx context.Context, state *framework.CycleState, p *v1.Pod, nodeName string) *framework.Status { + return framework.NewStatus(framework.Code(pl.inj.ReserveStatus), "injected status") } -func (pl *TestPlugin) Unreserve(ctx context.Context, state *v1alpha1.CycleState, p *v1.Pod, nodeName string) { +func (pl *TestPlugin) Unreserve(ctx context.Context, state *framework.CycleState, p *v1.Pod, nodeName string) { } -func (pl *TestPlugin) PreBind(ctx context.Context, state *v1alpha1.CycleState, p *v1.Pod, nodeName string) *v1alpha1.Status { - return v1alpha1.NewStatus(v1alpha1.Code(pl.inj.PreBindStatus), "injected status") +func (pl *TestPlugin) PreBind(ctx context.Context, state *framework.CycleState, p *v1.Pod, nodeName string) *framework.Status { + return framework.NewStatus(framework.Code(pl.inj.PreBindStatus), "injected status") } -func (pl *TestPlugin) PostBind(ctx context.Context, state *v1alpha1.CycleState, p *v1.Pod, nodeName string) { +func (pl *TestPlugin) PostBind(ctx context.Context, state *framework.CycleState, p *v1.Pod, nodeName string) { } -func (pl *TestPlugin) Permit(ctx context.Context, state *v1alpha1.CycleState, p *v1.Pod, nodeName string) (*v1alpha1.Status, time.Duration) { - return v1alpha1.NewStatus(v1alpha1.Code(pl.inj.PermitStatus), "injected status"), time.Duration(0) +func (pl *TestPlugin) Permit(ctx context.Context, state *framework.CycleState, p *v1.Pod, nodeName string) (*framework.Status, time.Duration) { + return framework.NewStatus(framework.Code(pl.inj.PermitStatus), "injected status"), time.Duration(0) } -func (pl *TestPlugin) Bind(ctx context.Context, state *v1alpha1.CycleState, p *v1.Pod, nodeName string) *v1alpha1.Status { - return v1alpha1.NewStatus(v1alpha1.Code(pl.inj.BindStatus), "injected status") +func (pl *TestPlugin) Bind(ctx context.Context, state *framework.CycleState, p *v1.Pod, nodeName string) *framework.Status { + return framework.NewStatus(framework.Code(pl.inj.BindStatus), "injected status") } // TestPreFilterPlugin only implements PreFilterPlugin interface. @@ -212,12 +212,12 @@ func (pl *TestPreFilterPlugin) Name() string { return preFilterPluginName } -func (pl *TestPreFilterPlugin) PreFilter(ctx context.Context, state *v1alpha1.CycleState, p *v1.Pod) *v1alpha1.Status { +func (pl *TestPreFilterPlugin) PreFilter(ctx context.Context, state *framework.CycleState, p *v1.Pod) *framework.Status { pl.PreFilterCalled++ return nil } -func (pl *TestPreFilterPlugin) PreFilterExtensions() v1alpha1.PreFilterExtensions { +func (pl *TestPreFilterPlugin) PreFilterExtensions() framework.PreFilterExtensions { return nil } @@ -232,24 +232,24 @@ func (pl *TestPreFilterWithExtensionsPlugin) Name() string { return preFilterWithExtensionsPluginName } -func (pl *TestPreFilterWithExtensionsPlugin) PreFilter(ctx context.Context, state *v1alpha1.CycleState, p *v1.Pod) *v1alpha1.Status { +func (pl *TestPreFilterWithExtensionsPlugin) PreFilter(ctx context.Context, state *framework.CycleState, p *v1.Pod) *framework.Status { pl.PreFilterCalled++ return nil } -func (pl *TestPreFilterWithExtensionsPlugin) AddPod(ctx context.Context, state *v1alpha1.CycleState, podToSchedule *v1.Pod, - podToAdd *v1.Pod, nodeInfo *v1alpha1.NodeInfo) *v1alpha1.Status { +func (pl *TestPreFilterWithExtensionsPlugin) AddPod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod, + podToAdd *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status { pl.AddCalled++ return nil } -func (pl *TestPreFilterWithExtensionsPlugin) RemovePod(ctx context.Context, state *v1alpha1.CycleState, podToSchedule *v1.Pod, - podToRemove *v1.Pod, nodeInfo *v1alpha1.NodeInfo) *v1alpha1.Status { +func (pl *TestPreFilterWithExtensionsPlugin) RemovePod(ctx context.Context, state *framework.CycleState, podToSchedule *v1.Pod, + podToRemove *v1.Pod, nodeInfo *framework.NodeInfo) *framework.Status { pl.RemoveCalled++ return nil } -func (pl *TestPreFilterWithExtensionsPlugin) PreFilterExtensions() v1alpha1.PreFilterExtensions { +func (pl *TestPreFilterWithExtensionsPlugin) PreFilterExtensions() framework.PreFilterExtensions { return pl } @@ -260,17 +260,17 @@ func (dp *TestDuplicatePlugin) Name() string { return duplicatePluginName } -func (dp *TestDuplicatePlugin) PreFilter(ctx context.Context, state *v1alpha1.CycleState, p *v1.Pod) *v1alpha1.Status { +func (dp *TestDuplicatePlugin) PreFilter(ctx context.Context, state *framework.CycleState, p *v1.Pod) *framework.Status { return nil } -func (dp *TestDuplicatePlugin) PreFilterExtensions() v1alpha1.PreFilterExtensions { +func (dp *TestDuplicatePlugin) PreFilterExtensions() framework.PreFilterExtensions { return nil } -var _ v1alpha1.PreFilterPlugin = &TestDuplicatePlugin{} +var _ framework.PreFilterPlugin = &TestDuplicatePlugin{} -func newDuplicatePlugin(_ runtime.Object, _ v1alpha1.FrameworkHandle) (v1alpha1.Plugin, error) { +func newDuplicatePlugin(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &TestDuplicatePlugin{}, nil } @@ -282,13 +282,13 @@ type TestPermitPlugin struct { func (pp *TestPermitPlugin) Name() string { return permitPlugin } -func (pp *TestPermitPlugin) Permit(ctx context.Context, state *v1alpha1.CycleState, p *v1.Pod, nodeName string) (*v1alpha1.Status, time.Duration) { - return v1alpha1.NewStatus(v1alpha1.Wait, ""), time.Duration(10 * time.Second) +func (pp *TestPermitPlugin) Permit(ctx context.Context, state *framework.CycleState, p *v1.Pod, nodeName string) (*framework.Status, time.Duration) { + return framework.NewStatus(framework.Wait, ""), time.Duration(10 * time.Second) } -var _ v1alpha1.QueueSortPlugin = &TestQueueSortPlugin{} +var _ framework.QueueSortPlugin = &TestQueueSortPlugin{} -func newQueueSortPlugin(_ runtime.Object, _ v1alpha1.FrameworkHandle) (v1alpha1.Plugin, error) { +func newQueueSortPlugin(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &TestQueueSortPlugin{}, nil } @@ -299,13 +299,13 @@ func (pl *TestQueueSortPlugin) Name() string { return queueSortPlugin } -func (pl *TestQueueSortPlugin) Less(_, _ *v1alpha1.QueuedPodInfo) bool { +func (pl *TestQueueSortPlugin) Less(_, _ *framework.QueuedPodInfo) bool { return false } -var _ v1alpha1.BindPlugin = &TestBindPlugin{} +var _ framework.BindPlugin = &TestBindPlugin{} -func newBindPlugin(_ runtime.Object, _ v1alpha1.FrameworkHandle) (v1alpha1.Plugin, error) { +func newBindPlugin(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &TestBindPlugin{}, nil } @@ -316,7 +316,7 @@ func (t TestBindPlugin) Name() string { return bindPlugin } -func (t TestBindPlugin) Bind(ctx context.Context, state *v1alpha1.CycleState, p *v1.Pod, nodeName string) *v1alpha1.Status { +func (t TestBindPlugin) Bind(ctx context.Context, state *framework.CycleState, p *v1.Pod, nodeName string) *framework.Status { return nil } @@ -337,7 +337,7 @@ var defaultWeights = map[string]int32{ } var emptyArgs = make([]config.PluginConfig, 0) -var state = &v1alpha1.CycleState{} +var state = &framework.CycleState{} // Pod is only used for logging errors. var pod = &v1.Pod{} @@ -348,7 +348,7 @@ var nodes = []*v1.Node{ var errInjectedStatus = errors.New("injected status") -func newFrameworkWithQueueSortAndBind(r Registry, pl *config.Plugins, plc []config.PluginConfig, opts ...Option) (v1alpha1.Framework, error) { +func newFrameworkWithQueueSortAndBind(r Registry, pl *config.Plugins, plc []config.PluginConfig, opts ...Option) (framework.Framework, error) { if _, ok := r[queueSortPlugin]; !ok { r[queueSortPlugin] = newQueueSortPlugin } @@ -472,7 +472,7 @@ func TestNewFrameworkErrors(t *testing.T) { } func recordingPluginFactory(name string, result map[string]runtime.Object) PluginFactory { - return func(args runtime.Object, f v1alpha1.FrameworkHandle) (v1alpha1.Plugin, error) { + return func(args runtime.Object, f framework.Handle) (framework.Plugin, error) { result[name] = args return &TestPlugin{ name: name, @@ -629,14 +629,14 @@ func TestRunScorePlugins(t *testing.T) { registry Registry plugins *config.Plugins pluginConfigs []config.PluginConfig - want v1alpha1.PluginToNodeScores + want framework.PluginToNodeScores // If err is true, we expect RunScorePlugin to fail. err bool }{ { name: "no Score plugins", plugins: buildScoreConfigDefaultWeights(), - want: v1alpha1.PluginToNodeScores{}, + want: framework.PluginToNodeScores{}, }, { name: "single Score plugin", @@ -650,7 +650,7 @@ func TestRunScorePlugins(t *testing.T) { }, }, // scorePlugin1 Score returns 1, weight=1, so want=1. - want: v1alpha1.PluginToNodeScores{ + want: framework.PluginToNodeScores{ scorePlugin1: {{Name: "node1", Score: 1}, {Name: "node2", Score: 1}}, }, }, @@ -667,7 +667,7 @@ func TestRunScorePlugins(t *testing.T) { }, }, // scoreWithNormalizePlugin1 Score returns 10, but NormalizeScore overrides to 5, weight=1, so want=5 - want: v1alpha1.PluginToNodeScores{ + want: framework.PluginToNodeScores{ scoreWithNormalizePlugin1: {{Name: "node1", Score: 5}, {Name: "node2", Score: 5}}, }, }, @@ -697,7 +697,7 @@ func TestRunScorePlugins(t *testing.T) { // scorePlugin1 Score returns 1, weight =1, so want=1. // scoreWithNormalizePlugin1 Score returns 3, but NormalizeScore overrides to 4, weight=1, so want=4. // scoreWithNormalizePlugin2 Score returns 4, but NormalizeScore overrides to 5, weight=2, so want=10. - want: v1alpha1.PluginToNodeScores{ + want: framework.PluginToNodeScores{ scorePlugin1: {{Name: "node1", Score: 1}, {Name: "node2", Score: 1}}, scoreWithNormalizePlugin1: {{Name: "node1", Score: 4}, {Name: "node2", Score: 4}}, scoreWithNormalizePlugin2: {{Name: "node1", Score: 10}, {Name: "node2", Score: 10}}, @@ -736,7 +736,7 @@ func TestRunScorePlugins(t *testing.T) { { Name: scorePlugin1, Args: &runtime.Unknown{ - Raw: []byte(fmt.Sprintf(`{ "scoreRes": %d }`, v1alpha1.MaxNodeScore+1)), + Raw: []byte(fmt.Sprintf(`{ "scoreRes": %d }`, framework.MaxNodeScore+1)), }, }, }, @@ -749,7 +749,7 @@ func TestRunScorePlugins(t *testing.T) { { Name: scorePlugin1, Args: &runtime.Unknown{ - Raw: []byte(fmt.Sprintf(`{ "scoreRes": %d }`, v1alpha1.MinNodeScore-1)), + Raw: []byte(fmt.Sprintf(`{ "scoreRes": %d }`, framework.MinNodeScore-1)), }, }, }, @@ -762,7 +762,7 @@ func TestRunScorePlugins(t *testing.T) { { Name: scoreWithNormalizePlugin1, Args: &runtime.Unknown{ - Raw: []byte(fmt.Sprintf(`{ "normalizeRes": %d }`, v1alpha1.MaxNodeScore+1)), + Raw: []byte(fmt.Sprintf(`{ "normalizeRes": %d }`, framework.MaxNodeScore+1)), }, }, }, @@ -775,7 +775,7 @@ func TestRunScorePlugins(t *testing.T) { { Name: scoreWithNormalizePlugin1, Args: &runtime.Unknown{ - Raw: []byte(fmt.Sprintf(`{ "normalizeRes": %d }`, v1alpha1.MinNodeScore-1)), + Raw: []byte(fmt.Sprintf(`{ "normalizeRes": %d }`, framework.MinNodeScore-1)), }, }, }, @@ -815,11 +815,11 @@ func TestPreFilterPlugins(t *testing.T) { preFilter2 := &TestPreFilterWithExtensionsPlugin{} r := make(Registry) r.Register(preFilterPluginName, - func(_ runtime.Object, fh v1alpha1.FrameworkHandle) (v1alpha1.Plugin, error) { + func(_ runtime.Object, fh framework.Handle) (framework.Plugin, error) { return preFilter1, nil }) r.Register(preFilterWithExtensionsPluginName, - func(_ runtime.Object, fh v1alpha1.FrameworkHandle) (v1alpha1.Plugin, error) { + func(_ runtime.Object, fh framework.Handle) (framework.Plugin, error) { return preFilter2, nil }) plugins := &config.Plugins{PreFilter: &config.PluginSet{Enabled: []config.Plugin{{Name: preFilterWithExtensionsPluginName}, {Name: preFilterPluginName}}}} @@ -851,8 +851,8 @@ func TestFilterPlugins(t *testing.T) { tests := []struct { name string plugins []*TestPlugin - wantStatus *v1alpha1.Status - wantStatusMap v1alpha1.PluginToStatus + wantStatus *framework.Status + wantStatusMap framework.PluginToStatus runAllFilters bool }{ { @@ -860,33 +860,33 @@ func TestFilterPlugins(t *testing.T) { plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{FilterStatus: int(v1alpha1.Success)}, + inj: injectedResult{FilterStatus: int(framework.Success)}, }, }, wantStatus: nil, - wantStatusMap: v1alpha1.PluginToStatus{}, + wantStatusMap: framework.PluginToStatus{}, }, { name: "ErrorFilter", plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{FilterStatus: int(v1alpha1.Error)}, + inj: injectedResult{FilterStatus: int(framework.Error)}, }, }, - wantStatus: v1alpha1.NewStatus(v1alpha1.Error, `running "TestPlugin" filter plugin for pod "": injected filter status`), - wantStatusMap: v1alpha1.PluginToStatus{"TestPlugin": v1alpha1.NewStatus(v1alpha1.Error, `running "TestPlugin" filter plugin for pod "": injected filter status`)}, + wantStatus: framework.NewStatus(framework.Error, `running "TestPlugin" filter plugin for pod "": injected filter status`), + wantStatusMap: framework.PluginToStatus{"TestPlugin": framework.NewStatus(framework.Error, `running "TestPlugin" filter plugin for pod "": injected filter status`)}, }, { name: "UnschedulableFilter", plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{FilterStatus: int(v1alpha1.Unschedulable)}, + inj: injectedResult{FilterStatus: int(framework.Unschedulable)}, }, }, - wantStatus: v1alpha1.NewStatus(v1alpha1.Unschedulable, "injected filter status"), - wantStatusMap: v1alpha1.PluginToStatus{"TestPlugin": v1alpha1.NewStatus(v1alpha1.Unschedulable, "injected filter status")}, + wantStatus: framework.NewStatus(framework.Unschedulable, "injected filter status"), + wantStatusMap: framework.PluginToStatus{"TestPlugin": framework.NewStatus(framework.Unschedulable, "injected filter status")}, }, { name: "UnschedulableAndUnresolvableFilter", @@ -894,11 +894,11 @@ func TestFilterPlugins(t *testing.T) { { name: "TestPlugin", inj: injectedResult{ - FilterStatus: int(v1alpha1.UnschedulableAndUnresolvable)}, + FilterStatus: int(framework.UnschedulableAndUnresolvable)}, }, }, - wantStatus: v1alpha1.NewStatus(v1alpha1.UnschedulableAndUnresolvable, "injected filter status"), - wantStatusMap: v1alpha1.PluginToStatus{"TestPlugin": v1alpha1.NewStatus(v1alpha1.UnschedulableAndUnresolvable, "injected filter status")}, + wantStatus: framework.NewStatus(framework.UnschedulableAndUnresolvable, "injected filter status"), + wantStatusMap: framework.PluginToStatus{"TestPlugin": framework.NewStatus(framework.UnschedulableAndUnresolvable, "injected filter status")}, }, // followings tests cover multiple-plugins scenarios { @@ -906,47 +906,47 @@ func TestFilterPlugins(t *testing.T) { plugins: []*TestPlugin{ { name: "TestPlugin1", - inj: injectedResult{FilterStatus: int(v1alpha1.Error)}, + inj: injectedResult{FilterStatus: int(framework.Error)}, }, { name: "TestPlugin2", - inj: injectedResult{FilterStatus: int(v1alpha1.Error)}, + inj: injectedResult{FilterStatus: int(framework.Error)}, }, }, - wantStatus: v1alpha1.NewStatus(v1alpha1.Error, `running "TestPlugin1" filter plugin for pod "": injected filter status`), - wantStatusMap: v1alpha1.PluginToStatus{"TestPlugin1": v1alpha1.NewStatus(v1alpha1.Error, `running "TestPlugin1" filter plugin for pod "": injected filter status`)}, + wantStatus: framework.NewStatus(framework.Error, `running "TestPlugin1" filter plugin for pod "": injected filter status`), + wantStatusMap: framework.PluginToStatus{"TestPlugin1": framework.NewStatus(framework.Error, `running "TestPlugin1" filter plugin for pod "": injected filter status`)}, }, { name: "SuccessAndSuccessFilters", plugins: []*TestPlugin{ { name: "TestPlugin1", - inj: injectedResult{FilterStatus: int(v1alpha1.Success)}, + inj: injectedResult{FilterStatus: int(framework.Success)}, }, { name: "TestPlugin2", - inj: injectedResult{FilterStatus: int(v1alpha1.Success)}, + inj: injectedResult{FilterStatus: int(framework.Success)}, }, }, wantStatus: nil, - wantStatusMap: v1alpha1.PluginToStatus{}, + wantStatusMap: framework.PluginToStatus{}, }, { name: "ErrorAndSuccessFilters", plugins: []*TestPlugin{ { name: "TestPlugin1", - inj: injectedResult{FilterStatus: int(v1alpha1.Error)}, + inj: injectedResult{FilterStatus: int(framework.Error)}, }, { name: "TestPlugin2", - inj: injectedResult{FilterStatus: int(v1alpha1.Success)}, + inj: injectedResult{FilterStatus: int(framework.Success)}, }, }, - wantStatus: v1alpha1.NewStatus(v1alpha1.Error, `running "TestPlugin1" filter plugin for pod "": injected filter status`), - wantStatusMap: v1alpha1.PluginToStatus{"TestPlugin1": v1alpha1.NewStatus(v1alpha1.Error, `running "TestPlugin1" filter plugin for pod "": injected filter status`)}, + wantStatus: framework.NewStatus(framework.Error, `running "TestPlugin1" filter plugin for pod "": injected filter status`), + wantStatusMap: framework.PluginToStatus{"TestPlugin1": framework.NewStatus(framework.Error, `running "TestPlugin1" filter plugin for pod "": injected filter status`)}, }, { name: "SuccessAndErrorFilters", @@ -954,78 +954,78 @@ func TestFilterPlugins(t *testing.T) { { name: "TestPlugin1", - inj: injectedResult{FilterStatus: int(v1alpha1.Success)}, + inj: injectedResult{FilterStatus: int(framework.Success)}, }, { name: "TestPlugin2", - inj: injectedResult{FilterStatus: int(v1alpha1.Error)}, + inj: injectedResult{FilterStatus: int(framework.Error)}, }, }, - wantStatus: v1alpha1.NewStatus(v1alpha1.Error, `running "TestPlugin2" filter plugin for pod "": injected filter status`), - wantStatusMap: v1alpha1.PluginToStatus{"TestPlugin2": v1alpha1.NewStatus(v1alpha1.Error, `running "TestPlugin2" filter plugin for pod "": injected filter status`)}, + wantStatus: framework.NewStatus(framework.Error, `running "TestPlugin2" filter plugin for pod "": injected filter status`), + wantStatusMap: framework.PluginToStatus{"TestPlugin2": framework.NewStatus(framework.Error, `running "TestPlugin2" filter plugin for pod "": injected filter status`)}, }, { name: "SuccessAndUnschedulableFilters", plugins: []*TestPlugin{ { name: "TestPlugin1", - inj: injectedResult{FilterStatus: int(v1alpha1.Success)}, + inj: injectedResult{FilterStatus: int(framework.Success)}, }, { name: "TestPlugin2", - inj: injectedResult{FilterStatus: int(v1alpha1.Unschedulable)}, + inj: injectedResult{FilterStatus: int(framework.Unschedulable)}, }, }, - wantStatus: v1alpha1.NewStatus(v1alpha1.Unschedulable, "injected filter status"), - wantStatusMap: v1alpha1.PluginToStatus{"TestPlugin2": v1alpha1.NewStatus(v1alpha1.Unschedulable, "injected filter status")}, + wantStatus: framework.NewStatus(framework.Unschedulable, "injected filter status"), + wantStatusMap: framework.PluginToStatus{"TestPlugin2": framework.NewStatus(framework.Unschedulable, "injected filter status")}, }, { name: "SuccessFilterWithRunAllFilters", plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{FilterStatus: int(v1alpha1.Success)}, + inj: injectedResult{FilterStatus: int(framework.Success)}, }, }, runAllFilters: true, wantStatus: nil, - wantStatusMap: v1alpha1.PluginToStatus{}, + wantStatusMap: framework.PluginToStatus{}, }, { name: "ErrorAndErrorFilters", plugins: []*TestPlugin{ { name: "TestPlugin1", - inj: injectedResult{FilterStatus: int(v1alpha1.Error)}, + inj: injectedResult{FilterStatus: int(framework.Error)}, }, { name: "TestPlugin2", - inj: injectedResult{FilterStatus: int(v1alpha1.Error)}, + inj: injectedResult{FilterStatus: int(framework.Error)}, }, }, runAllFilters: true, - wantStatus: v1alpha1.NewStatus(v1alpha1.Error, `running "TestPlugin1" filter plugin for pod "": injected filter status`), - wantStatusMap: v1alpha1.PluginToStatus{"TestPlugin1": v1alpha1.NewStatus(v1alpha1.Error, `running "TestPlugin1" filter plugin for pod "": injected filter status`)}, + wantStatus: framework.NewStatus(framework.Error, `running "TestPlugin1" filter plugin for pod "": injected filter status`), + wantStatusMap: framework.PluginToStatus{"TestPlugin1": framework.NewStatus(framework.Error, `running "TestPlugin1" filter plugin for pod "": injected filter status`)}, }, { name: "ErrorAndErrorFilters", plugins: []*TestPlugin{ { name: "TestPlugin1", - inj: injectedResult{FilterStatus: int(v1alpha1.UnschedulableAndUnresolvable)}, + inj: injectedResult{FilterStatus: int(framework.UnschedulableAndUnresolvable)}, }, { name: "TestPlugin2", - inj: injectedResult{FilterStatus: int(v1alpha1.Unschedulable)}, + inj: injectedResult{FilterStatus: int(framework.Unschedulable)}, }, }, runAllFilters: true, - wantStatus: v1alpha1.NewStatus(v1alpha1.UnschedulableAndUnresolvable, "injected filter status", "injected filter status"), - wantStatusMap: v1alpha1.PluginToStatus{ - "TestPlugin1": v1alpha1.NewStatus(v1alpha1.UnschedulableAndUnresolvable, "injected filter status"), - "TestPlugin2": v1alpha1.NewStatus(v1alpha1.Unschedulable, "injected filter status"), + wantStatus: framework.NewStatus(framework.UnschedulableAndUnresolvable, "injected filter status", "injected filter status"), + wantStatusMap: framework.PluginToStatus{ + "TestPlugin1": framework.NewStatus(framework.UnschedulableAndUnresolvable, "injected filter status"), + "TestPlugin2": framework.NewStatus(framework.Unschedulable, "injected filter status"), }, }, } @@ -1038,7 +1038,7 @@ func TestFilterPlugins(t *testing.T) { // register all plugins tmpPl := pl if err := registry.Register(pl.name, - func(_ runtime.Object, _ v1alpha1.FrameworkHandle) (v1alpha1.Plugin, error) { + func(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return tmpPl, nil }); err != nil { t.Fatalf("fail to register filter plugin (%s)", pl.name) @@ -1070,45 +1070,45 @@ func TestPostFilterPlugins(t *testing.T) { tests := []struct { name string plugins []*TestPlugin - wantStatus *v1alpha1.Status + wantStatus *framework.Status }{ { name: "a single plugin makes a Pod schedulable", plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{PostFilterStatus: int(v1alpha1.Success)}, + inj: injectedResult{PostFilterStatus: int(framework.Success)}, }, }, - wantStatus: v1alpha1.NewStatus(v1alpha1.Success, "injected status"), + wantStatus: framework.NewStatus(framework.Success, "injected status"), }, { name: "plugin1 failed to make a Pod schedulable, followed by plugin2 which makes the Pod schedulable", plugins: []*TestPlugin{ { name: "TestPlugin1", - inj: injectedResult{PostFilterStatus: int(v1alpha1.Unschedulable)}, + inj: injectedResult{PostFilterStatus: int(framework.Unschedulable)}, }, { name: "TestPlugin2", - inj: injectedResult{PostFilterStatus: int(v1alpha1.Success)}, + inj: injectedResult{PostFilterStatus: int(framework.Success)}, }, }, - wantStatus: v1alpha1.NewStatus(v1alpha1.Success, "injected status"), + wantStatus: framework.NewStatus(framework.Success, "injected status"), }, { name: "plugin1 makes a Pod schedulable, followed by plugin2 which cannot make the Pod schedulable", plugins: []*TestPlugin{ { name: "TestPlugin1", - inj: injectedResult{PostFilterStatus: int(v1alpha1.Success)}, + inj: injectedResult{PostFilterStatus: int(framework.Success)}, }, { name: "TestPlugin2", - inj: injectedResult{PostFilterStatus: int(v1alpha1.Unschedulable)}, + inj: injectedResult{PostFilterStatus: int(framework.Unschedulable)}, }, }, - wantStatus: v1alpha1.NewStatus(v1alpha1.Success, "injected status"), + wantStatus: framework.NewStatus(framework.Success, "injected status"), }, } @@ -1120,7 +1120,7 @@ func TestPostFilterPlugins(t *testing.T) { // register all plugins tmpPl := pl if err := registry.Register(pl.name, - func(_ runtime.Object, _ v1alpha1.FrameworkHandle) (v1alpha1.Plugin, error) { + func(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return tmpPl, nil }); err != nil { t.Fatalf("fail to register postFilter plugin (%s)", pl.name) @@ -1148,7 +1148,7 @@ func TestPreBindPlugins(t *testing.T) { tests := []struct { name string plugins []*TestPlugin - wantStatus *v1alpha1.Status + wantStatus *framework.Status }{ { name: "NoPreBindPlugin", @@ -1160,7 +1160,7 @@ func TestPreBindPlugins(t *testing.T) { plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{PreBindStatus: int(v1alpha1.Success)}, + inj: injectedResult{PreBindStatus: int(framework.Success)}, }, }, wantStatus: nil, @@ -1170,69 +1170,69 @@ func TestPreBindPlugins(t *testing.T) { plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{PreBindStatus: int(v1alpha1.Unschedulable)}, + inj: injectedResult{PreBindStatus: int(framework.Unschedulable)}, }, }, - wantStatus: v1alpha1.AsStatus(fmt.Errorf(`running PreBind plugin "TestPlugin": %w`, errInjectedStatus)), + wantStatus: framework.AsStatus(fmt.Errorf(`running PreBind plugin "TestPlugin": %w`, errInjectedStatus)), }, { name: "ErrorPreBindPlugin", plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{PreBindStatus: int(v1alpha1.Error)}, + inj: injectedResult{PreBindStatus: int(framework.Error)}, }, }, - wantStatus: v1alpha1.AsStatus(fmt.Errorf(`running PreBind plugin "TestPlugin": %w`, errInjectedStatus)), + wantStatus: framework.AsStatus(fmt.Errorf(`running PreBind plugin "TestPlugin": %w`, errInjectedStatus)), }, { name: "UnschedulablePreBindPlugin", plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{PreBindStatus: int(v1alpha1.UnschedulableAndUnresolvable)}, + inj: injectedResult{PreBindStatus: int(framework.UnschedulableAndUnresolvable)}, }, }, - wantStatus: v1alpha1.AsStatus(fmt.Errorf(`running PreBind plugin "TestPlugin": %w`, errInjectedStatus)), + wantStatus: framework.AsStatus(fmt.Errorf(`running PreBind plugin "TestPlugin": %w`, errInjectedStatus)), }, { name: "SuccessErrorPreBindPlugins", plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{PreBindStatus: int(v1alpha1.Success)}, + inj: injectedResult{PreBindStatus: int(framework.Success)}, }, { name: "TestPlugin 1", - inj: injectedResult{PreBindStatus: int(v1alpha1.Error)}, + inj: injectedResult{PreBindStatus: int(framework.Error)}, }, }, - wantStatus: v1alpha1.AsStatus(fmt.Errorf(`running PreBind plugin "TestPlugin 1": %w`, errInjectedStatus)), + wantStatus: framework.AsStatus(fmt.Errorf(`running PreBind plugin "TestPlugin 1": %w`, errInjectedStatus)), }, { name: "ErrorSuccessPreBindPlugin", plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{PreBindStatus: int(v1alpha1.Error)}, + inj: injectedResult{PreBindStatus: int(framework.Error)}, }, { name: "TestPlugin 1", - inj: injectedResult{PreBindStatus: int(v1alpha1.Success)}, + inj: injectedResult{PreBindStatus: int(framework.Success)}, }, }, - wantStatus: v1alpha1.AsStatus(fmt.Errorf(`running PreBind plugin "TestPlugin": %w`, errInjectedStatus)), + wantStatus: framework.AsStatus(fmt.Errorf(`running PreBind plugin "TestPlugin": %w`, errInjectedStatus)), }, { name: "SuccessSuccessPreBindPlugin", plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{PreBindStatus: int(v1alpha1.Success)}, + inj: injectedResult{PreBindStatus: int(framework.Success)}, }, { name: "TestPlugin 1", - inj: injectedResult{PreBindStatus: int(v1alpha1.Success)}, + inj: injectedResult{PreBindStatus: int(framework.Success)}, }, }, wantStatus: nil, @@ -1242,28 +1242,28 @@ func TestPreBindPlugins(t *testing.T) { plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{PreBindStatus: int(v1alpha1.Error)}, + inj: injectedResult{PreBindStatus: int(framework.Error)}, }, { name: "TestPlugin 1", - inj: injectedResult{PreBindStatus: int(v1alpha1.Error)}, + inj: injectedResult{PreBindStatus: int(framework.Error)}, }, }, - wantStatus: v1alpha1.AsStatus(fmt.Errorf(`running PreBind plugin "TestPlugin": %w`, errInjectedStatus)), + wantStatus: framework.AsStatus(fmt.Errorf(`running PreBind plugin "TestPlugin": %w`, errInjectedStatus)), }, { name: "UnschedulableAndSuccessPreBindPlugin", plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{PreBindStatus: int(v1alpha1.Unschedulable)}, + inj: injectedResult{PreBindStatus: int(framework.Unschedulable)}, }, { name: "TestPlugin 1", - inj: injectedResult{PreBindStatus: int(v1alpha1.Success)}, + inj: injectedResult{PreBindStatus: int(framework.Success)}, }, }, - wantStatus: v1alpha1.AsStatus(fmt.Errorf(`running PreBind plugin "TestPlugin": %w`, errInjectedStatus)), + wantStatus: framework.AsStatus(fmt.Errorf(`running PreBind plugin "TestPlugin": %w`, errInjectedStatus)), }, } @@ -1274,7 +1274,7 @@ func TestPreBindPlugins(t *testing.T) { for _, pl := range tt.plugins { tmpPl := pl - if err := registry.Register(pl.name, func(_ runtime.Object, _ v1alpha1.FrameworkHandle) (v1alpha1.Plugin, error) { + if err := registry.Register(pl.name, func(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return tmpPl, nil }); err != nil { t.Fatalf("Unable to register pre bind plugins: %s", pl.name) @@ -1304,7 +1304,7 @@ func TestReservePlugins(t *testing.T) { tests := []struct { name string plugins []*TestPlugin - wantStatus *v1alpha1.Status + wantStatus *framework.Status }{ { name: "NoReservePlugin", @@ -1316,7 +1316,7 @@ func TestReservePlugins(t *testing.T) { plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{ReserveStatus: int(v1alpha1.Success)}, + inj: injectedResult{ReserveStatus: int(framework.Success)}, }, }, wantStatus: nil, @@ -1326,41 +1326,41 @@ func TestReservePlugins(t *testing.T) { plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{ReserveStatus: int(v1alpha1.Unschedulable)}, + inj: injectedResult{ReserveStatus: int(framework.Unschedulable)}, }, }, - wantStatus: v1alpha1.AsStatus(fmt.Errorf(`running Reserve plugin "TestPlugin": %w`, errInjectedStatus)), + wantStatus: framework.AsStatus(fmt.Errorf(`running Reserve plugin "TestPlugin": %w`, errInjectedStatus)), }, { name: "ErrorReservePlugin", plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{ReserveStatus: int(v1alpha1.Error)}, + inj: injectedResult{ReserveStatus: int(framework.Error)}, }, }, - wantStatus: v1alpha1.AsStatus(fmt.Errorf(`running Reserve plugin "TestPlugin": %w`, errInjectedStatus)), + wantStatus: framework.AsStatus(fmt.Errorf(`running Reserve plugin "TestPlugin": %w`, errInjectedStatus)), }, { name: "UnschedulableReservePlugin", plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{ReserveStatus: int(v1alpha1.UnschedulableAndUnresolvable)}, + inj: injectedResult{ReserveStatus: int(framework.UnschedulableAndUnresolvable)}, }, }, - wantStatus: v1alpha1.AsStatus(fmt.Errorf(`running Reserve plugin "TestPlugin": %w`, errInjectedStatus)), + wantStatus: framework.AsStatus(fmt.Errorf(`running Reserve plugin "TestPlugin": %w`, errInjectedStatus)), }, { name: "SuccessSuccessReservePlugins", plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{ReserveStatus: int(v1alpha1.Success)}, + inj: injectedResult{ReserveStatus: int(framework.Success)}, }, { name: "TestPlugin 1", - inj: injectedResult{ReserveStatus: int(v1alpha1.Success)}, + inj: injectedResult{ReserveStatus: int(framework.Success)}, }, }, wantStatus: nil, @@ -1370,56 +1370,56 @@ func TestReservePlugins(t *testing.T) { plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{ReserveStatus: int(v1alpha1.Error)}, + inj: injectedResult{ReserveStatus: int(framework.Error)}, }, { name: "TestPlugin 1", - inj: injectedResult{ReserveStatus: int(v1alpha1.Error)}, + inj: injectedResult{ReserveStatus: int(framework.Error)}, }, }, - wantStatus: v1alpha1.AsStatus(fmt.Errorf(`running Reserve plugin "TestPlugin": %w`, errInjectedStatus)), + wantStatus: framework.AsStatus(fmt.Errorf(`running Reserve plugin "TestPlugin": %w`, errInjectedStatus)), }, { name: "SuccessErrorReservePlugins", plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{ReserveStatus: int(v1alpha1.Success)}, + inj: injectedResult{ReserveStatus: int(framework.Success)}, }, { name: "TestPlugin 1", - inj: injectedResult{ReserveStatus: int(v1alpha1.Error)}, + inj: injectedResult{ReserveStatus: int(framework.Error)}, }, }, - wantStatus: v1alpha1.AsStatus(fmt.Errorf(`running Reserve plugin "TestPlugin 1": %w`, errInjectedStatus)), + wantStatus: framework.AsStatus(fmt.Errorf(`running Reserve plugin "TestPlugin 1": %w`, errInjectedStatus)), }, { name: "ErrorSuccessReservePlugin", plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{ReserveStatus: int(v1alpha1.Error)}, + inj: injectedResult{ReserveStatus: int(framework.Error)}, }, { name: "TestPlugin 1", - inj: injectedResult{ReserveStatus: int(v1alpha1.Success)}, + inj: injectedResult{ReserveStatus: int(framework.Success)}, }, }, - wantStatus: v1alpha1.AsStatus(fmt.Errorf(`running Reserve plugin "TestPlugin": %w`, errInjectedStatus)), + wantStatus: framework.AsStatus(fmt.Errorf(`running Reserve plugin "TestPlugin": %w`, errInjectedStatus)), }, { name: "UnschedulableAndSuccessReservePlugin", plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{ReserveStatus: int(v1alpha1.Unschedulable)}, + inj: injectedResult{ReserveStatus: int(framework.Unschedulable)}, }, { name: "TestPlugin 1", - inj: injectedResult{ReserveStatus: int(v1alpha1.Success)}, + inj: injectedResult{ReserveStatus: int(framework.Success)}, }, }, - wantStatus: v1alpha1.AsStatus(fmt.Errorf(`running Reserve plugin "TestPlugin": %w`, errInjectedStatus)), + wantStatus: framework.AsStatus(fmt.Errorf(`running Reserve plugin "TestPlugin": %w`, errInjectedStatus)), }, } @@ -1430,7 +1430,7 @@ func TestReservePlugins(t *testing.T) { for _, pl := range tt.plugins { tmpPl := pl - if err := registry.Register(pl.name, func(_ runtime.Object, _ v1alpha1.FrameworkHandle) (v1alpha1.Plugin, error) { + if err := registry.Register(pl.name, func(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return tmpPl, nil }); err != nil { t.Fatalf("Unable to register pre bind plugins: %s", pl.name) @@ -1460,7 +1460,7 @@ func TestPermitPlugins(t *testing.T) { tests := []struct { name string plugins []*TestPlugin - want *v1alpha1.Status + want *framework.Status }{ { name: "NilPermitPlugin", @@ -1472,7 +1472,7 @@ func TestPermitPlugins(t *testing.T) { plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{PermitStatus: int(v1alpha1.Success)}, + inj: injectedResult{PermitStatus: int(framework.Success)}, }, }, want: nil, @@ -1482,51 +1482,51 @@ func TestPermitPlugins(t *testing.T) { plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{PermitStatus: int(v1alpha1.Unschedulable)}, + inj: injectedResult{PermitStatus: int(framework.Unschedulable)}, }, }, - want: v1alpha1.NewStatus(v1alpha1.Unschedulable, `rejected pod "" by permit plugin "TestPlugin": injected status`), + want: framework.NewStatus(framework.Unschedulable, `rejected pod "" by permit plugin "TestPlugin": injected status`), }, { name: "ErrorPermitPlugin", plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{PermitStatus: int(v1alpha1.Error)}, + inj: injectedResult{PermitStatus: int(framework.Error)}, }, }, - want: v1alpha1.AsStatus(fmt.Errorf(`running Permit plugin "TestPlugin": %w`, errInjectedStatus)), + want: framework.AsStatus(fmt.Errorf(`running Permit plugin "TestPlugin": %w`, errInjectedStatus)), }, { name: "UnschedulableAndUnresolvablePermitPlugin", plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{PermitStatus: int(v1alpha1.UnschedulableAndUnresolvable)}, + inj: injectedResult{PermitStatus: int(framework.UnschedulableAndUnresolvable)}, }, }, - want: v1alpha1.NewStatus(v1alpha1.UnschedulableAndUnresolvable, `rejected pod "" by permit plugin "TestPlugin": injected status`), + want: framework.NewStatus(framework.UnschedulableAndUnresolvable, `rejected pod "" by permit plugin "TestPlugin": injected status`), }, { name: "WaitPermitPlugin", plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{PermitStatus: int(v1alpha1.Wait)}, + inj: injectedResult{PermitStatus: int(framework.Wait)}, }, }, - want: v1alpha1.NewStatus(v1alpha1.Wait, `one or more plugins asked to wait and no plugin rejected pod ""`), + want: framework.NewStatus(framework.Wait, `one or more plugins asked to wait and no plugin rejected pod ""`), }, { name: "SuccessSuccessPermitPlugin", plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{PermitStatus: int(v1alpha1.Success)}, + inj: injectedResult{PermitStatus: int(framework.Success)}, }, { name: "TestPlugin 1", - inj: injectedResult{PermitStatus: int(v1alpha1.Success)}, + inj: injectedResult{PermitStatus: int(framework.Success)}, }, }, want: nil, @@ -1536,14 +1536,14 @@ func TestPermitPlugins(t *testing.T) { plugins: []*TestPlugin{ { name: "TestPlugin", - inj: injectedResult{PermitStatus: int(v1alpha1.Error)}, + inj: injectedResult{PermitStatus: int(framework.Error)}, }, { name: "TestPlugin 1", - inj: injectedResult{PermitStatus: int(v1alpha1.Error)}, + inj: injectedResult{PermitStatus: int(framework.Error)}, }, }, - want: v1alpha1.AsStatus(fmt.Errorf(`running Permit plugin "TestPlugin": %w`, errInjectedStatus)), + want: framework.AsStatus(fmt.Errorf(`running Permit plugin "TestPlugin": %w`, errInjectedStatus)), }, } @@ -1553,7 +1553,7 @@ func TestPermitPlugins(t *testing.T) { for _, pl := range tt.plugins { tmpPl := pl - if err := registry.Register(pl.name, func(_ runtime.Object, _ v1alpha1.FrameworkHandle) (v1alpha1.Plugin, error) { + if err := registry.Register(pl.name, func(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return tmpPl, nil }); err != nil { t.Fatalf("Unable to register Permit plugin: %s", pl.name) @@ -1579,126 +1579,126 @@ func TestPermitPlugins(t *testing.T) { } func TestRecordingMetrics(t *testing.T) { - state := &v1alpha1.CycleState{} + state := &framework.CycleState{} state.SetRecordPluginMetrics(true) tests := []struct { name string - action func(f v1alpha1.Framework) + action func(f framework.Framework) inject injectedResult wantExtensionPoint string - wantStatus v1alpha1.Code + wantStatus framework.Code }{ { name: "PreFilter - Success", - action: func(f v1alpha1.Framework) { f.RunPreFilterPlugins(context.Background(), state, pod) }, + action: func(f framework.Framework) { f.RunPreFilterPlugins(context.Background(), state, pod) }, wantExtensionPoint: "PreFilter", - wantStatus: v1alpha1.Success, + wantStatus: framework.Success, }, { name: "PreScore - Success", - action: func(f v1alpha1.Framework) { f.RunPreScorePlugins(context.Background(), state, pod, nil) }, + action: func(f framework.Framework) { f.RunPreScorePlugins(context.Background(), state, pod, nil) }, wantExtensionPoint: "PreScore", - wantStatus: v1alpha1.Success, + wantStatus: framework.Success, }, { name: "Score - Success", - action: func(f v1alpha1.Framework) { f.RunScorePlugins(context.Background(), state, pod, nodes) }, + action: func(f framework.Framework) { f.RunScorePlugins(context.Background(), state, pod, nodes) }, wantExtensionPoint: "Score", - wantStatus: v1alpha1.Success, + wantStatus: framework.Success, }, { name: "Reserve - Success", - action: func(f v1alpha1.Framework) { f.RunReservePluginsReserve(context.Background(), state, pod, "") }, + action: func(f framework.Framework) { f.RunReservePluginsReserve(context.Background(), state, pod, "") }, wantExtensionPoint: "Reserve", - wantStatus: v1alpha1.Success, + wantStatus: framework.Success, }, { name: "Unreserve - Success", - action: func(f v1alpha1.Framework) { f.RunReservePluginsUnreserve(context.Background(), state, pod, "") }, + action: func(f framework.Framework) { f.RunReservePluginsUnreserve(context.Background(), state, pod, "") }, wantExtensionPoint: "Unreserve", - wantStatus: v1alpha1.Success, + wantStatus: framework.Success, }, { name: "PreBind - Success", - action: func(f v1alpha1.Framework) { f.RunPreBindPlugins(context.Background(), state, pod, "") }, + action: func(f framework.Framework) { f.RunPreBindPlugins(context.Background(), state, pod, "") }, wantExtensionPoint: "PreBind", - wantStatus: v1alpha1.Success, + wantStatus: framework.Success, }, { name: "Bind - Success", - action: func(f v1alpha1.Framework) { f.RunBindPlugins(context.Background(), state, pod, "") }, + action: func(f framework.Framework) { f.RunBindPlugins(context.Background(), state, pod, "") }, wantExtensionPoint: "Bind", - wantStatus: v1alpha1.Success, + wantStatus: framework.Success, }, { name: "PostBind - Success", - action: func(f v1alpha1.Framework) { f.RunPostBindPlugins(context.Background(), state, pod, "") }, + action: func(f framework.Framework) { f.RunPostBindPlugins(context.Background(), state, pod, "") }, wantExtensionPoint: "PostBind", - wantStatus: v1alpha1.Success, + wantStatus: framework.Success, }, { name: "Permit - Success", - action: func(f v1alpha1.Framework) { f.RunPermitPlugins(context.Background(), state, pod, "") }, + action: func(f framework.Framework) { f.RunPermitPlugins(context.Background(), state, pod, "") }, wantExtensionPoint: "Permit", - wantStatus: v1alpha1.Success, + wantStatus: framework.Success, }, { name: "PreFilter - Error", - action: func(f v1alpha1.Framework) { f.RunPreFilterPlugins(context.Background(), state, pod) }, - inject: injectedResult{PreFilterStatus: int(v1alpha1.Error)}, + action: func(f framework.Framework) { f.RunPreFilterPlugins(context.Background(), state, pod) }, + inject: injectedResult{PreFilterStatus: int(framework.Error)}, wantExtensionPoint: "PreFilter", - wantStatus: v1alpha1.Error, + wantStatus: framework.Error, }, { name: "PreScore - Error", - action: func(f v1alpha1.Framework) { f.RunPreScorePlugins(context.Background(), state, pod, nil) }, - inject: injectedResult{PreScoreStatus: int(v1alpha1.Error)}, + action: func(f framework.Framework) { f.RunPreScorePlugins(context.Background(), state, pod, nil) }, + inject: injectedResult{PreScoreStatus: int(framework.Error)}, wantExtensionPoint: "PreScore", - wantStatus: v1alpha1.Error, + wantStatus: framework.Error, }, { name: "Score - Error", - action: func(f v1alpha1.Framework) { f.RunScorePlugins(context.Background(), state, pod, nodes) }, - inject: injectedResult{ScoreStatus: int(v1alpha1.Error)}, + action: func(f framework.Framework) { f.RunScorePlugins(context.Background(), state, pod, nodes) }, + inject: injectedResult{ScoreStatus: int(framework.Error)}, wantExtensionPoint: "Score", - wantStatus: v1alpha1.Error, + wantStatus: framework.Error, }, { name: "Reserve - Error", - action: func(f v1alpha1.Framework) { f.RunReservePluginsReserve(context.Background(), state, pod, "") }, - inject: injectedResult{ReserveStatus: int(v1alpha1.Error)}, + action: func(f framework.Framework) { f.RunReservePluginsReserve(context.Background(), state, pod, "") }, + inject: injectedResult{ReserveStatus: int(framework.Error)}, wantExtensionPoint: "Reserve", - wantStatus: v1alpha1.Error, + wantStatus: framework.Error, }, { name: "PreBind - Error", - action: func(f v1alpha1.Framework) { f.RunPreBindPlugins(context.Background(), state, pod, "") }, - inject: injectedResult{PreBindStatus: int(v1alpha1.Error)}, + action: func(f framework.Framework) { f.RunPreBindPlugins(context.Background(), state, pod, "") }, + inject: injectedResult{PreBindStatus: int(framework.Error)}, wantExtensionPoint: "PreBind", - wantStatus: v1alpha1.Error, + wantStatus: framework.Error, }, { name: "Bind - Error", - action: func(f v1alpha1.Framework) { f.RunBindPlugins(context.Background(), state, pod, "") }, - inject: injectedResult{BindStatus: int(v1alpha1.Error)}, + action: func(f framework.Framework) { f.RunBindPlugins(context.Background(), state, pod, "") }, + inject: injectedResult{BindStatus: int(framework.Error)}, wantExtensionPoint: "Bind", - wantStatus: v1alpha1.Error, + wantStatus: framework.Error, }, { name: "Permit - Error", - action: func(f v1alpha1.Framework) { f.RunPermitPlugins(context.Background(), state, pod, "") }, - inject: injectedResult{PermitStatus: int(v1alpha1.Error)}, + action: func(f framework.Framework) { f.RunPermitPlugins(context.Background(), state, pod, "") }, + inject: injectedResult{PermitStatus: int(framework.Error)}, wantExtensionPoint: "Permit", - wantStatus: v1alpha1.Error, + wantStatus: framework.Error, }, { name: "Permit - Wait", - action: func(f v1alpha1.Framework) { f.RunPermitPlugins(context.Background(), state, pod, "") }, - inject: injectedResult{PermitStatus: int(v1alpha1.Wait)}, + action: func(f framework.Framework) { f.RunPermitPlugins(context.Background(), state, pod, "") }, + inject: injectedResult{PermitStatus: int(framework.Wait)}, wantExtensionPoint: "Permit", - wantStatus: v1alpha1.Wait, + wantStatus: framework.Wait, }, } @@ -1711,7 +1711,7 @@ func TestRecordingMetrics(t *testing.T) { plugin := &TestPlugin{name: testPlugin, inj: tt.inject} r := make(Registry) r.Register(testPlugin, - func(_ runtime.Object, fh v1alpha1.FrameworkHandle) (v1alpha1.Plugin, error) { + func(_ runtime.Object, fh framework.Handle) (framework.Plugin, error) { return plugin, nil }) pluginSet := &config.PluginSet{Enabled: []config.Plugin{{Name: testPlugin, Weight: 1}}} @@ -1749,68 +1749,68 @@ func TestRecordingMetrics(t *testing.T) { func TestRunBindPlugins(t *testing.T) { tests := []struct { name string - injects []v1alpha1.Code - wantStatus v1alpha1.Code + injects []framework.Code + wantStatus framework.Code }{ { name: "simple success", - injects: []v1alpha1.Code{v1alpha1.Success}, - wantStatus: v1alpha1.Success, + injects: []framework.Code{framework.Success}, + wantStatus: framework.Success, }, { name: "error on second", - injects: []v1alpha1.Code{v1alpha1.Skip, v1alpha1.Error, v1alpha1.Success}, - wantStatus: v1alpha1.Error, + injects: []framework.Code{framework.Skip, framework.Error, framework.Success}, + wantStatus: framework.Error, }, { name: "all skip", - injects: []v1alpha1.Code{v1alpha1.Skip, v1alpha1.Skip, v1alpha1.Skip}, - wantStatus: v1alpha1.Skip, + injects: []framework.Code{framework.Skip, framework.Skip, framework.Skip}, + wantStatus: framework.Skip, }, { name: "error on third, but not reached", - injects: []v1alpha1.Code{v1alpha1.Skip, v1alpha1.Success, v1alpha1.Error}, - wantStatus: v1alpha1.Success, + injects: []framework.Code{framework.Skip, framework.Success, framework.Error}, + wantStatus: framework.Success, }, { name: "no bind plugin, returns default binder", - injects: []v1alpha1.Code{}, - wantStatus: v1alpha1.Success, + injects: []framework.Code{}, + wantStatus: framework.Success, }, { name: "invalid status", - injects: []v1alpha1.Code{v1alpha1.Unschedulable}, - wantStatus: v1alpha1.Error, + injects: []framework.Code{framework.Unschedulable}, + wantStatus: framework.Error, }, { name: "simple error", - injects: []v1alpha1.Code{v1alpha1.Error}, - wantStatus: v1alpha1.Error, + injects: []framework.Code{framework.Error}, + wantStatus: framework.Error, }, { name: "success on second, returns success", - injects: []v1alpha1.Code{v1alpha1.Skip, v1alpha1.Success}, - wantStatus: v1alpha1.Success, + injects: []framework.Code{framework.Skip, framework.Success}, + wantStatus: framework.Success, }, { name: "invalid status, returns error", - injects: []v1alpha1.Code{v1alpha1.Skip, v1alpha1.UnschedulableAndUnresolvable}, - wantStatus: v1alpha1.Error, + injects: []framework.Code{framework.Skip, framework.UnschedulableAndUnresolvable}, + wantStatus: framework.Error, }, { name: "error after success status, returns success", - injects: []v1alpha1.Code{v1alpha1.Success, v1alpha1.Error}, - wantStatus: v1alpha1.Success, + injects: []framework.Code{framework.Success, framework.Error}, + wantStatus: framework.Success, }, { name: "success before invalid status, returns success", - injects: []v1alpha1.Code{v1alpha1.Success, v1alpha1.Error}, - wantStatus: v1alpha1.Success, + injects: []framework.Code{framework.Success, framework.Error}, + wantStatus: framework.Success, }, { name: "success after error status, returns error", - injects: []v1alpha1.Code{v1alpha1.Error, v1alpha1.Success}, - wantStatus: v1alpha1.Error, + injects: []framework.Code{framework.Error, framework.Success}, + wantStatus: framework.Error, }, } for _, tt := range tests { @@ -1825,7 +1825,7 @@ func TestRunBindPlugins(t *testing.T) { name := fmt.Sprintf("bind-%d", i) plugin := &TestPlugin{name: name, inj: injectedResult{BindStatus: int(inj)}} r.Register(name, - func(_ runtime.Object, fh v1alpha1.FrameworkHandle) (v1alpha1.Plugin, error) { + func(_ runtime.Object, fh framework.Handle) (framework.Plugin, error) { return plugin, nil }) pluginSet.Enabled = append(pluginSet.Enabled, config.Plugin{Name: name}) @@ -1863,7 +1863,7 @@ func TestPermitWaitDurationMetric(t *testing.T) { }, { name: "WaitOnPermit - Wait Timeout", - inject: injectedResult{PermitStatus: int(v1alpha1.Wait)}, + inject: injectedResult{PermitStatus: int(framework.Wait)}, wantRes: "Unschedulable", }, } @@ -1876,7 +1876,7 @@ func TestPermitWaitDurationMetric(t *testing.T) { plugin := &TestPlugin{name: testPlugin, inj: tt.inject} r := make(Registry) err := r.Register(testPlugin, - func(_ runtime.Object, fh v1alpha1.FrameworkHandle) (v1alpha1.Plugin, error) { + func(_ runtime.Object, fh framework.Handle) (framework.Plugin, error) { return plugin, nil }) if err != nil { @@ -1908,24 +1908,24 @@ func TestWaitOnPermit(t *testing.T) { tests := []struct { name string - action func(f v1alpha1.Framework) - wantStatus v1alpha1.Code + action func(f framework.Framework) + wantStatus framework.Code wantMessage string }{ { name: "Reject Waiting Pod", - action: func(f v1alpha1.Framework) { + action: func(f framework.Framework) { f.GetWaitingPod(pod.UID).Reject("reject message") }, - wantStatus: v1alpha1.Unschedulable, + wantStatus: framework.Unschedulable, wantMessage: "pod \"pod\" rejected while waiting on permit: reject message", }, { name: "Allow Waiting Pod", - action: func(f v1alpha1.Framework) { + action: func(f framework.Framework) { f.GetWaitingPod(pod.UID).Allow(permitPlugin) }, - wantStatus: v1alpha1.Success, + wantStatus: framework.Success, wantMessage: "", }, } @@ -1935,7 +1935,7 @@ func TestWaitOnPermit(t *testing.T) { testPermitPlugin := &TestPermitPlugin{} r := make(Registry) r.Register(permitPlugin, - func(_ runtime.Object, fh v1alpha1.FrameworkHandle) (v1alpha1.Plugin, error) { + func(_ runtime.Object, fh framework.Handle) (framework.Plugin, error) { return testPermitPlugin, nil }) plugins := &config.Plugins{ @@ -1948,9 +1948,9 @@ func TestWaitOnPermit(t *testing.T) { } runPermitPluginsStatus := f.RunPermitPlugins(context.Background(), nil, pod, "") - if runPermitPluginsStatus.Code() != v1alpha1.Wait { + if runPermitPluginsStatus.Code() != framework.Wait { t.Fatalf("Expected RunPermitPlugins to return status %v, but got %v", - v1alpha1.Wait, runPermitPluginsStatus.Code()) + framework.Wait, runPermitPluginsStatus.Code()) } go tt.action(f) @@ -2032,16 +2032,16 @@ type injectedResult struct { PermitStatus int `json:"permitStatus,omitempty"` } -func setScoreRes(inj injectedResult) (int64, *v1alpha1.Status) { - if v1alpha1.Code(inj.ScoreStatus) != v1alpha1.Success { - return 0, v1alpha1.NewStatus(v1alpha1.Code(inj.ScoreStatus), "injecting failure.") +func setScoreRes(inj injectedResult) (int64, *framework.Status) { + if framework.Code(inj.ScoreStatus) != framework.Success { + return 0, framework.NewStatus(framework.Code(inj.ScoreStatus), "injecting failure.") } return inj.ScoreRes, nil } -func injectNormalizeRes(inj injectedResult, scores v1alpha1.NodeScoreList) *v1alpha1.Status { - if v1alpha1.Code(inj.NormalizeStatus) != v1alpha1.Success { - return v1alpha1.NewStatus(v1alpha1.Code(inj.NormalizeStatus), "injecting failure.") +func injectNormalizeRes(inj injectedResult, scores framework.NodeScoreList) *framework.Status { + if framework.Code(inj.NormalizeStatus) != framework.Success { + return framework.NewStatus(framework.Code(inj.NormalizeStatus), "injecting failure.") } for i := range scores { scores[i].Score = inj.NormalizeRes @@ -2049,7 +2049,7 @@ func injectNormalizeRes(inj injectedResult, scores v1alpha1.NodeScoreList) *v1al return nil } -func collectAndComparePluginMetrics(t *testing.T, wantExtensionPoint, wantPlugin string, wantStatus v1alpha1.Code) { +func collectAndComparePluginMetrics(t *testing.T, wantExtensionPoint, wantPlugin string, wantStatus framework.Code) { t.Helper() m := collectHistogramMetric(metrics.PluginExecutionDuration) if len(m.Label) != 3 { @@ -2077,7 +2077,7 @@ func collectAndComparePluginMetrics(t *testing.T, wantExtensionPoint, wantPlugin } } -func collectAndCompareFrameworkMetrics(t *testing.T, wantExtensionPoint string, wantStatus v1alpha1.Code) { +func collectAndCompareFrameworkMetrics(t *testing.T, wantExtensionPoint string, wantStatus framework.Code) { t.Helper() m := collectHistogramMetric(metrics.FrameworkExtensionPointDuration) diff --git a/pkg/scheduler/framework/runtime/metrics_recorder.go b/pkg/scheduler/framework/runtime/metrics_recorder.go index 8454afa28d2..ef98c336eba 100644 --- a/pkg/scheduler/framework/runtime/metrics_recorder.go +++ b/pkg/scheduler/framework/runtime/metrics_recorder.go @@ -20,7 +20,7 @@ import ( "time" k8smetrics "k8s.io/component-base/metrics" - "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/metrics" ) @@ -63,7 +63,7 @@ func newMetricsRecorder(bufferSize int, interval time.Duration) *metricsRecorder // observePluginDurationAsync observes the plugin_execution_duration_seconds metric. // The metric will be flushed to Prometheus asynchronously. -func (r *metricsRecorder) observePluginDurationAsync(extensionPoint, pluginName string, status *v1alpha1.Status, value float64) { +func (r *metricsRecorder) observePluginDurationAsync(extensionPoint, pluginName string, status *framework.Status, value float64) { newMetric := &frameworkMetric{ metric: metrics.PluginExecutionDuration, labelValues: []string{pluginName, extensionPoint, status.Code().String()}, diff --git a/pkg/scheduler/framework/runtime/registry.go b/pkg/scheduler/framework/runtime/registry.go index a1a1df45a6c..8c8fcb4cee6 100644 --- a/pkg/scheduler/framework/runtime/registry.go +++ b/pkg/scheduler/framework/runtime/registry.go @@ -21,12 +21,12 @@ import ( "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/util/json" - "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" "sigs.k8s.io/yaml" ) // PluginFactory is a function that builds a plugin. -type PluginFactory = func(configuration runtime.Object, f v1alpha1.FrameworkHandle) (v1alpha1.Plugin, error) +type PluginFactory = func(configuration runtime.Object, f framework.Handle) (framework.Plugin, error) // DecodeInto decodes configuration whose type is *runtime.Unknown to the interface into. func DecodeInto(obj runtime.Object, into interface{}) error { diff --git a/pkg/scheduler/framework/runtime/registry_test.go b/pkg/scheduler/framework/runtime/registry_test.go index c1e0616844a..5f0e8aafcd6 100644 --- a/pkg/scheduler/framework/runtime/registry_test.go +++ b/pkg/scheduler/framework/runtime/registry_test.go @@ -21,7 +21,7 @@ import ( "testing" "k8s.io/apimachinery/pkg/runtime" - "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) func TestDecodeInto(t *testing.T) { @@ -103,7 +103,7 @@ func (p *mockNoopPlugin) Name() string { } func NewMockNoopPluginFactory() PluginFactory { - return func(_ runtime.Object, _ v1alpha1.FrameworkHandle) (v1alpha1.Plugin, error) { + return func(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &mockNoopPlugin{}, nil } } diff --git a/pkg/scheduler/framework/runtime/waiting_pods_map.go b/pkg/scheduler/framework/runtime/waiting_pods_map.go index 25cde8f06dd..5961240eaf2 100644 --- a/pkg/scheduler/framework/runtime/waiting_pods_map.go +++ b/pkg/scheduler/framework/runtime/waiting_pods_map.go @@ -23,7 +23,7 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" - "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) // waitingPodsMap a thread-safe map used to maintain pods waiting in the permit phase. @@ -61,7 +61,7 @@ func (m *waitingPodsMap) get(uid types.UID) *waitingPod { } // iterate acquires a read lock and iterates over the WaitingPods map. -func (m *waitingPodsMap) iterate(callback func(v1alpha1.WaitingPod)) { +func (m *waitingPodsMap) iterate(callback func(framework.WaitingPod)) { m.mu.RLock() defer m.mu.RUnlock() for _, v := range m.pods { @@ -73,11 +73,11 @@ func (m *waitingPodsMap) iterate(callback func(v1alpha1.WaitingPod)) { type waitingPod struct { pod *v1.Pod pendingPlugins map[string]*time.Timer - s chan *v1alpha1.Status + s chan *framework.Status mu sync.RWMutex } -var _ v1alpha1.WaitingPod = &waitingPod{} +var _ framework.WaitingPod = &waitingPod{} // newWaitingPod returns a new waitingPod instance. func newWaitingPod(pod *v1.Pod, pluginsMaxWaitTime map[string]time.Duration) *waitingPod { @@ -87,7 +87,7 @@ func newWaitingPod(pod *v1.Pod, pluginsMaxWaitTime map[string]time.Duration) *wa // by using non-blocking send to this channel. This channel has a buffer of size 1 // to ensure that non-blocking send will not be ignored - possible situation when // receiving from this channel happens after non-blocking send. - s: make(chan *v1alpha1.Status, 1), + s: make(chan *framework.Status, 1), } wp.pendingPlugins = make(map[string]*time.Timer, len(pluginsMaxWaitTime)) @@ -143,7 +143,7 @@ func (w *waitingPod) Allow(pluginName string) { // The select clause works as a non-blocking send. // If there is no receiver, it's a no-op (default case). select { - case w.s <- v1alpha1.NewStatus(v1alpha1.Success, ""): + case w.s <- framework.NewStatus(framework.Success, ""): default: } } @@ -159,7 +159,7 @@ func (w *waitingPod) Reject(msg string) { // The select clause works as a non-blocking send. // If there is no receiver, it's a no-op (default case). select { - case w.s <- v1alpha1.NewStatus(v1alpha1.Unschedulable, msg): + case w.s <- framework.NewStatus(framework.Unschedulable, msg): default: } } diff --git a/pkg/scheduler/framework/types.go b/pkg/scheduler/framework/types.go new file mode 100644 index 00000000000..892e4c04430 --- /dev/null +++ b/pkg/scheduler/framework/types.go @@ -0,0 +1,820 @@ +/* +Copyright 2015 The Kubernetes Authors. + +Licensed 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 framework + +import ( + "errors" + "fmt" + "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/apimachinery/pkg/util/sets" + utilfeature "k8s.io/apiserver/pkg/util/feature" + "k8s.io/klog/v2" + v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" + "k8s.io/kubernetes/pkg/features" + schedutil "k8s.io/kubernetes/pkg/scheduler/util" + "sync" + "sync/atomic" + "time" +) + +var generation int64 + +// QueuedPodInfo is a Pod wrapper with additional information related to +// the pod's status in the scheduling queue, such as the timestamp when +// it's added to the queue. +type QueuedPodInfo struct { + Pod *v1.Pod + // The time pod added to the scheduling queue. + Timestamp time.Time + // Number of schedule attempts before successfully scheduled. + // It's used to record the # attempts metric. + Attempts int + // The time when the pod is added to the queue for the first time. The pod may be added + // back to the queue multiple times before it's successfully scheduled. + // It shouldn't be updated once initialized. It's used to record the e2e scheduling + // latency for a pod. + InitialAttemptTimestamp time.Time +} + +// DeepCopy returns a deep copy of the QueuedPodInfo object. +func (pqi *QueuedPodInfo) DeepCopy() *QueuedPodInfo { + return &QueuedPodInfo{ + Pod: pqi.Pod.DeepCopy(), + Timestamp: pqi.Timestamp, + Attempts: pqi.Attempts, + InitialAttemptTimestamp: pqi.InitialAttemptTimestamp, + } +} + +// PodInfo is a wrapper to a Pod with additional pre-computed information to +// accelerate processing. This information is typically immutable (e.g., pre-processed +// inter-pod affinity selectors). +type PodInfo struct { + Pod *v1.Pod + RequiredAffinityTerms []AffinityTerm + RequiredAntiAffinityTerms []AffinityTerm + PreferredAffinityTerms []WeightedAffinityTerm + PreferredAntiAffinityTerms []WeightedAffinityTerm + ParseError error +} + +// AffinityTerm is a processed version of v1.PodAffinityTerm. +type AffinityTerm struct { + Namespaces sets.String + Selector labels.Selector + TopologyKey string +} + +// WeightedAffinityTerm is a "processed" representation of v1.WeightedAffinityTerm. +type WeightedAffinityTerm struct { + AffinityTerm + Weight int32 +} + +func newAffinityTerm(pod *v1.Pod, term *v1.PodAffinityTerm) (*AffinityTerm, error) { + namespaces := schedutil.GetNamespacesFromPodAffinityTerm(pod, term) + selector, err := metav1.LabelSelectorAsSelector(term.LabelSelector) + if err != nil { + return nil, err + } + return &AffinityTerm{Namespaces: namespaces, Selector: selector, TopologyKey: term.TopologyKey}, nil +} + +// getAffinityTerms receives a Pod and affinity terms and returns the namespaces and +// selectors of the terms. +func getAffinityTerms(pod *v1.Pod, v1Terms []v1.PodAffinityTerm) ([]AffinityTerm, error) { + if v1Terms == nil { + return nil, nil + } + + var terms []AffinityTerm + for _, term := range v1Terms { + t, err := newAffinityTerm(pod, &term) + if err != nil { + // We get here if the label selector failed to process + return nil, err + } + terms = append(terms, *t) + } + return terms, nil +} + +// getWeightedAffinityTerms returns the list of processed affinity terms. +func getWeightedAffinityTerms(pod *v1.Pod, v1Terms []v1.WeightedPodAffinityTerm) ([]WeightedAffinityTerm, error) { + if v1Terms == nil { + return nil, nil + } + + var terms []WeightedAffinityTerm + for _, term := range v1Terms { + t, err := newAffinityTerm(pod, &term.PodAffinityTerm) + if err != nil { + // We get here if the label selector failed to process + return nil, err + } + terms = append(terms, WeightedAffinityTerm{AffinityTerm: *t, Weight: term.Weight}) + } + return terms, nil +} + +// NewPodInfo return a new PodInfo +func NewPodInfo(pod *v1.Pod) *PodInfo { + var preferredAffinityTerms []v1.WeightedPodAffinityTerm + var preferredAntiAffinityTerms []v1.WeightedPodAffinityTerm + if affinity := pod.Spec.Affinity; affinity != nil { + if a := affinity.PodAffinity; a != nil { + preferredAffinityTerms = a.PreferredDuringSchedulingIgnoredDuringExecution + } + if a := affinity.PodAntiAffinity; a != nil { + preferredAntiAffinityTerms = a.PreferredDuringSchedulingIgnoredDuringExecution + } + } + + // Attempt to parse the affinity terms + var parseErr error + requiredAffinityTerms, err := getAffinityTerms(pod, schedutil.GetPodAffinityTerms(pod.Spec.Affinity)) + if err != nil { + parseErr = fmt.Errorf("requiredAffinityTerms: %w", err) + } + requiredAntiAffinityTerms, err := getAffinityTerms(pod, schedutil.GetPodAntiAffinityTerms(pod.Spec.Affinity)) + if err != nil { + parseErr = fmt.Errorf("requiredAntiAffinityTerms: %w", err) + } + weightedAffinityTerms, err := getWeightedAffinityTerms(pod, preferredAffinityTerms) + if err != nil { + parseErr = fmt.Errorf("preferredAffinityTerms: %w", err) + } + weightedAntiAffinityTerms, err := getWeightedAffinityTerms(pod, preferredAntiAffinityTerms) + if err != nil { + parseErr = fmt.Errorf("preferredAntiAffinityTerms: %w", err) + } + + return &PodInfo{ + Pod: pod, + RequiredAffinityTerms: requiredAffinityTerms, + RequiredAntiAffinityTerms: requiredAntiAffinityTerms, + PreferredAffinityTerms: weightedAffinityTerms, + PreferredAntiAffinityTerms: weightedAntiAffinityTerms, + ParseError: parseErr, + } +} + +// ImageStateSummary provides summarized information about the state of an image. +type ImageStateSummary struct { + // Size of the image + Size int64 + // Used to track how many nodes have this image + NumNodes int +} + +// NodeInfo is node level aggregated information. +type NodeInfo struct { + // Overall node information. + node *v1.Node + + // Pods running on the node. + Pods []*PodInfo + + // The subset of pods with affinity. + PodsWithAffinity []*PodInfo + + // The subset of pods with required anti-affinity. + PodsWithRequiredAntiAffinity []*PodInfo + + // Ports allocated on the node. + UsedPorts HostPortInfo + + // Total requested resources of all pods on this node. This includes assumed + // pods, which scheduler has sent for binding, but may not be scheduled yet. + Requested *Resource + // Total requested resources of all pods on this node with a minimum value + // applied to each container's CPU and memory requests. This does not reflect + // the actual resource requests for this node, but is used to avoid scheduling + // many zero-request pods onto one node. + NonZeroRequested *Resource + // We store allocatedResources (which is Node.Status.Allocatable.*) explicitly + // as int64, to avoid conversions and accessing map. + Allocatable *Resource + + // ImageStates holds the entry of an image if and only if this image is on the node. The entry can be used for + // checking an image's existence and advanced usage (e.g., image locality scheduling policy) based on the image + // state information. + ImageStates map[string]*ImageStateSummary + + // TransientInfo holds the information pertaining to a scheduling cycle. This will be destructed at the end of + // scheduling cycle. + // TODO: @ravig. Remove this once we have a clear approach for message passing across predicates and priorities. + TransientInfo *TransientSchedulerInfo + + // Whenever NodeInfo changes, generation is bumped. + // This is used to avoid cloning it if the object didn't change. + Generation int64 +} + +//initializeNodeTransientInfo initializes transient information pertaining to node. +func initializeNodeTransientInfo() nodeTransientInfo { + return nodeTransientInfo{AllocatableVolumesCount: 0, RequestedVolumes: 0} +} + +// nextGeneration: Let's make sure history never forgets the name... +// Increments the generation number monotonically ensuring that generation numbers never collide. +// Collision of the generation numbers would be particularly problematic if a node was deleted and +// added back with the same name. See issue#63262. +func nextGeneration() int64 { + return atomic.AddInt64(&generation, 1) +} + +// nodeTransientInfo contains transient node information while scheduling. +type nodeTransientInfo struct { + // AllocatableVolumesCount contains number of volumes that could be attached to node. + AllocatableVolumesCount int + // Requested number of volumes on a particular node. + RequestedVolumes int +} + +// TransientSchedulerInfo is a transient structure which is destructed at the end of each scheduling cycle. +// It consists of items that are valid for a scheduling cycle and is used for message passing across predicates and +// priorities. Some examples which could be used as fields are number of volumes being used on node, current utilization +// on node etc. +// IMPORTANT NOTE: Make sure that each field in this structure is documented along with usage. Expand this structure +// only when absolutely needed as this data structure will be created and destroyed during every scheduling cycle. +type TransientSchedulerInfo struct { + TransientLock sync.Mutex + // NodeTransInfo holds the information related to nodeTransientInformation. NodeName is the key here. + TransNodeInfo nodeTransientInfo +} + +// NewTransientSchedulerInfo returns a new scheduler transient structure with initialized values. +func NewTransientSchedulerInfo() *TransientSchedulerInfo { + tsi := &TransientSchedulerInfo{ + TransNodeInfo: initializeNodeTransientInfo(), + } + return tsi +} + +// ResetTransientSchedulerInfo resets the TransientSchedulerInfo. +func (transientSchedInfo *TransientSchedulerInfo) ResetTransientSchedulerInfo() { + transientSchedInfo.TransientLock.Lock() + defer transientSchedInfo.TransientLock.Unlock() + // Reset TransientNodeInfo. + transientSchedInfo.TransNodeInfo.AllocatableVolumesCount = 0 + transientSchedInfo.TransNodeInfo.RequestedVolumes = 0 +} + +// Resource is a collection of compute resource. +type Resource struct { + MilliCPU int64 + Memory int64 + EphemeralStorage int64 + // We store allowedPodNumber (which is Node.Status.Allocatable.Pods().Value()) + // explicitly as int, to avoid conversions and improve performance. + AllowedPodNumber int + // ScalarResources + ScalarResources map[v1.ResourceName]int64 +} + +// NewResource creates a Resource from ResourceList +func NewResource(rl v1.ResourceList) *Resource { + r := &Resource{} + r.Add(rl) + return r +} + +// Add adds ResourceList into Resource. +func (r *Resource) Add(rl v1.ResourceList) { + if r == nil { + return + } + + for rName, rQuant := range rl { + switch rName { + case v1.ResourceCPU: + r.MilliCPU += rQuant.MilliValue() + case v1.ResourceMemory: + r.Memory += rQuant.Value() + case v1.ResourcePods: + r.AllowedPodNumber += int(rQuant.Value()) + case v1.ResourceEphemeralStorage: + if utilfeature.DefaultFeatureGate.Enabled(features.LocalStorageCapacityIsolation) { + // if the local storage capacity isolation feature gate is disabled, pods request 0 disk. + r.EphemeralStorage += rQuant.Value() + } + default: + if v1helper.IsScalarResourceName(rName) { + r.AddScalar(rName, rQuant.Value()) + } + } + } +} + +// ResourceList returns a resource list of this resource. +func (r *Resource) ResourceList() v1.ResourceList { + result := v1.ResourceList{ + v1.ResourceCPU: *resource.NewMilliQuantity(r.MilliCPU, resource.DecimalSI), + v1.ResourceMemory: *resource.NewQuantity(r.Memory, resource.BinarySI), + v1.ResourcePods: *resource.NewQuantity(int64(r.AllowedPodNumber), resource.BinarySI), + v1.ResourceEphemeralStorage: *resource.NewQuantity(r.EphemeralStorage, resource.BinarySI), + } + for rName, rQuant := range r.ScalarResources { + if v1helper.IsHugePageResourceName(rName) { + result[rName] = *resource.NewQuantity(rQuant, resource.BinarySI) + } else { + result[rName] = *resource.NewQuantity(rQuant, resource.DecimalSI) + } + } + return result +} + +// Clone returns a copy of this resource. +func (r *Resource) Clone() *Resource { + res := &Resource{ + MilliCPU: r.MilliCPU, + Memory: r.Memory, + AllowedPodNumber: r.AllowedPodNumber, + EphemeralStorage: r.EphemeralStorage, + } + if r.ScalarResources != nil { + res.ScalarResources = make(map[v1.ResourceName]int64) + for k, v := range r.ScalarResources { + res.ScalarResources[k] = v + } + } + return res +} + +// AddScalar adds a resource by a scalar value of this resource. +func (r *Resource) AddScalar(name v1.ResourceName, quantity int64) { + r.SetScalar(name, r.ScalarResources[name]+quantity) +} + +// SetScalar sets a resource by a scalar value of this resource. +func (r *Resource) SetScalar(name v1.ResourceName, quantity int64) { + // Lazily allocate scalar resource map. + if r.ScalarResources == nil { + r.ScalarResources = map[v1.ResourceName]int64{} + } + r.ScalarResources[name] = quantity +} + +// SetMaxResource compares with ResourceList and takes max value for each Resource. +func (r *Resource) SetMaxResource(rl v1.ResourceList) { + if r == nil { + return + } + + for rName, rQuantity := range rl { + switch rName { + case v1.ResourceMemory: + if mem := rQuantity.Value(); mem > r.Memory { + r.Memory = mem + } + case v1.ResourceCPU: + if cpu := rQuantity.MilliValue(); cpu > r.MilliCPU { + r.MilliCPU = cpu + } + case v1.ResourceEphemeralStorage: + if ephemeralStorage := rQuantity.Value(); ephemeralStorage > r.EphemeralStorage { + r.EphemeralStorage = ephemeralStorage + } + default: + if v1helper.IsScalarResourceName(rName) { + value := rQuantity.Value() + if value > r.ScalarResources[rName] { + r.SetScalar(rName, value) + } + } + } + } +} + +// NewNodeInfo returns a ready to use empty NodeInfo object. +// If any pods are given in arguments, their information will be aggregated in +// the returned object. +func NewNodeInfo(pods ...*v1.Pod) *NodeInfo { + ni := &NodeInfo{ + Requested: &Resource{}, + NonZeroRequested: &Resource{}, + Allocatable: &Resource{}, + TransientInfo: NewTransientSchedulerInfo(), + Generation: nextGeneration(), + UsedPorts: make(HostPortInfo), + ImageStates: make(map[string]*ImageStateSummary), + } + for _, pod := range pods { + ni.AddPod(pod) + } + return ni +} + +// Node returns overall information about this node. +func (n *NodeInfo) Node() *v1.Node { + if n == nil { + return nil + } + return n.node +} + +// Clone returns a copy of this node. +func (n *NodeInfo) Clone() *NodeInfo { + clone := &NodeInfo{ + node: n.node, + Requested: n.Requested.Clone(), + NonZeroRequested: n.NonZeroRequested.Clone(), + Allocatable: n.Allocatable.Clone(), + TransientInfo: n.TransientInfo, + UsedPorts: make(HostPortInfo), + ImageStates: n.ImageStates, + Generation: n.Generation, + } + if len(n.Pods) > 0 { + clone.Pods = append([]*PodInfo(nil), n.Pods...) + } + if len(n.UsedPorts) > 0 { + // HostPortInfo is a map-in-map struct + // make sure it's deep copied + for ip, portMap := range n.UsedPorts { + clone.UsedPorts[ip] = make(map[ProtocolPort]struct{}) + for protocolPort, v := range portMap { + clone.UsedPorts[ip][protocolPort] = v + } + } + } + if len(n.PodsWithAffinity) > 0 { + clone.PodsWithAffinity = append([]*PodInfo(nil), n.PodsWithAffinity...) + } + if len(n.PodsWithRequiredAntiAffinity) > 0 { + clone.PodsWithRequiredAntiAffinity = append([]*PodInfo(nil), n.PodsWithRequiredAntiAffinity...) + } + return clone +} + +// String returns representation of human readable format of this NodeInfo. +func (n *NodeInfo) String() string { + podKeys := make([]string, len(n.Pods)) + for i, p := range n.Pods { + podKeys[i] = p.Pod.Name + } + return fmt.Sprintf("&NodeInfo{Pods:%v, RequestedResource:%#v, NonZeroRequest: %#v, UsedPort: %#v, AllocatableResource:%#v}", + podKeys, n.Requested, n.NonZeroRequested, n.UsedPorts, n.Allocatable) +} + +// AddPod adds pod information to this NodeInfo. +func (n *NodeInfo) AddPod(pod *v1.Pod) { + podInfo := NewPodInfo(pod) + res, non0CPU, non0Mem := calculateResource(pod) + n.Requested.MilliCPU += res.MilliCPU + n.Requested.Memory += res.Memory + n.Requested.EphemeralStorage += res.EphemeralStorage + if n.Requested.ScalarResources == nil && len(res.ScalarResources) > 0 { + n.Requested.ScalarResources = map[v1.ResourceName]int64{} + } + for rName, rQuant := range res.ScalarResources { + n.Requested.ScalarResources[rName] += rQuant + } + n.NonZeroRequested.MilliCPU += non0CPU + n.NonZeroRequested.Memory += non0Mem + n.Pods = append(n.Pods, podInfo) + if podWithAffinity(pod) { + n.PodsWithAffinity = append(n.PodsWithAffinity, podInfo) + } + if podWithRequiredAntiAffinity(pod) { + n.PodsWithRequiredAntiAffinity = append(n.PodsWithRequiredAntiAffinity, podInfo) + } + + // Consume ports when pods added. + n.updateUsedPorts(podInfo.Pod, true) + + n.Generation = nextGeneration() +} + +func podWithAffinity(p *v1.Pod) bool { + affinity := p.Spec.Affinity + return affinity != nil && (affinity.PodAffinity != nil || affinity.PodAntiAffinity != nil) +} + +func podWithRequiredAntiAffinity(p *v1.Pod) bool { + affinity := p.Spec.Affinity + return affinity != nil && affinity.PodAntiAffinity != nil && + len(affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution) != 0 +} + +func removeFromSlice(s []*PodInfo, k string) []*PodInfo { + for i := range s { + k2, err := GetPodKey(s[i].Pod) + if err != nil { + klog.Errorf("Cannot get pod key, err: %v", err) + continue + } + if k == k2 { + // delete the element + s[i] = s[len(s)-1] + s = s[:len(s)-1] + break + } + } + return s +} + +// RemovePod subtracts pod information from this NodeInfo. +func (n *NodeInfo) RemovePod(pod *v1.Pod) error { + k, err := GetPodKey(pod) + if err != nil { + return err + } + if podWithAffinity(pod) { + n.PodsWithAffinity = removeFromSlice(n.PodsWithAffinity, k) + } + if podWithRequiredAntiAffinity(pod) { + n.PodsWithRequiredAntiAffinity = removeFromSlice(n.PodsWithRequiredAntiAffinity, k) + } + + for i := range n.Pods { + k2, err := GetPodKey(n.Pods[i].Pod) + if err != nil { + klog.Errorf("Cannot get pod key, err: %v", err) + continue + } + if k == k2 { + // delete the element + n.Pods[i] = n.Pods[len(n.Pods)-1] + n.Pods = n.Pods[:len(n.Pods)-1] + // reduce the resource data + res, non0CPU, non0Mem := calculateResource(pod) + + n.Requested.MilliCPU -= res.MilliCPU + n.Requested.Memory -= res.Memory + n.Requested.EphemeralStorage -= res.EphemeralStorage + if len(res.ScalarResources) > 0 && n.Requested.ScalarResources == nil { + n.Requested.ScalarResources = map[v1.ResourceName]int64{} + } + for rName, rQuant := range res.ScalarResources { + n.Requested.ScalarResources[rName] -= rQuant + } + n.NonZeroRequested.MilliCPU -= non0CPU + n.NonZeroRequested.Memory -= non0Mem + + // Release ports when remove Pods. + n.updateUsedPorts(pod, false) + + n.Generation = nextGeneration() + n.resetSlicesIfEmpty() + return nil + } + } + return fmt.Errorf("no corresponding pod %s in pods of node %s", pod.Name, n.node.Name) +} + +// resets the slices to nil so that we can do DeepEqual in unit tests. +func (n *NodeInfo) resetSlicesIfEmpty() { + if len(n.PodsWithAffinity) == 0 { + n.PodsWithAffinity = nil + } + if len(n.PodsWithRequiredAntiAffinity) == 0 { + n.PodsWithRequiredAntiAffinity = nil + } + if len(n.Pods) == 0 { + n.Pods = nil + } +} + +// resourceRequest = max(sum(podSpec.Containers), podSpec.InitContainers) + overHead +func calculateResource(pod *v1.Pod) (res Resource, non0CPU int64, non0Mem int64) { + resPtr := &res + for _, c := range pod.Spec.Containers { + resPtr.Add(c.Resources.Requests) + non0CPUReq, non0MemReq := schedutil.GetNonzeroRequests(&c.Resources.Requests) + non0CPU += non0CPUReq + non0Mem += non0MemReq + // No non-zero resources for GPUs or opaque resources. + } + + for _, ic := range pod.Spec.InitContainers { + resPtr.SetMaxResource(ic.Resources.Requests) + non0CPUReq, non0MemReq := schedutil.GetNonzeroRequests(&ic.Resources.Requests) + if non0CPU < non0CPUReq { + non0CPU = non0CPUReq + } + + if non0Mem < non0MemReq { + non0Mem = non0MemReq + } + } + + // If Overhead is being utilized, add to the total requests for the pod + if pod.Spec.Overhead != nil && utilfeature.DefaultFeatureGate.Enabled(features.PodOverhead) { + resPtr.Add(pod.Spec.Overhead) + if _, found := pod.Spec.Overhead[v1.ResourceCPU]; found { + non0CPU += pod.Spec.Overhead.Cpu().MilliValue() + } + + if _, found := pod.Spec.Overhead[v1.ResourceMemory]; found { + non0Mem += pod.Spec.Overhead.Memory().Value() + } + } + + return +} + +// updateUsedPorts updates the UsedPorts of NodeInfo. +func (n *NodeInfo) updateUsedPorts(pod *v1.Pod, add bool) { + for j := range pod.Spec.Containers { + container := &pod.Spec.Containers[j] + for k := range container.Ports { + podPort := &container.Ports[k] + if add { + n.UsedPorts.Add(podPort.HostIP, string(podPort.Protocol), podPort.HostPort) + } else { + n.UsedPorts.Remove(podPort.HostIP, string(podPort.Protocol), podPort.HostPort) + } + } + } +} + +// SetNode sets the overall node information. +func (n *NodeInfo) SetNode(node *v1.Node) error { + n.node = node + n.Allocatable = NewResource(node.Status.Allocatable) + n.TransientInfo = NewTransientSchedulerInfo() + n.Generation = nextGeneration() + return nil +} + +// RemoveNode removes the node object, leaving all other tracking information. +func (n *NodeInfo) RemoveNode() { + n.node = nil + n.Generation = nextGeneration() +} + +// FilterOutPods receives a list of pods and filters out those whose node names +// are equal to the node of this NodeInfo, but are not found in the pods of this NodeInfo. +// +// Preemption logic simulates removal of pods on a node by removing them from the +// corresponding NodeInfo. In order for the simulation to work, we call this method +// on the pods returned from SchedulerCache, so that predicate functions see +// only the pods that are not removed from the NodeInfo. +func (n *NodeInfo) FilterOutPods(pods []*v1.Pod) []*v1.Pod { + node := n.Node() + if node == nil { + return pods + } + filtered := make([]*v1.Pod, 0, len(pods)) + for _, p := range pods { + if p.Spec.NodeName != node.Name { + filtered = append(filtered, p) + continue + } + // If pod is on the given node, add it to 'filtered' only if it is present in nodeInfo. + podKey, err := GetPodKey(p) + if err != nil { + continue + } + for _, np := range n.Pods { + npodkey, _ := GetPodKey(np.Pod) + if npodkey == podKey { + filtered = append(filtered, p) + break + } + } + } + return filtered +} + +// GetPodKey returns the string key of a pod. +func GetPodKey(pod *v1.Pod) (string, error) { + uid := string(pod.UID) + if len(uid) == 0 { + return "", errors.New("Cannot get cache key for pod with empty UID") + } + return uid, nil +} + +// DefaultBindAllHostIP defines the default ip address used to bind to all host. +const DefaultBindAllHostIP = "0.0.0.0" + +// ProtocolPort represents a protocol port pair, e.g. tcp:80. +type ProtocolPort struct { + Protocol string + Port int32 +} + +// NewProtocolPort creates a ProtocolPort instance. +func NewProtocolPort(protocol string, port int32) *ProtocolPort { + pp := &ProtocolPort{ + Protocol: protocol, + Port: port, + } + + if len(pp.Protocol) == 0 { + pp.Protocol = string(v1.ProtocolTCP) + } + + return pp +} + +// HostPortInfo stores mapping from ip to a set of ProtocolPort +type HostPortInfo map[string]map[ProtocolPort]struct{} + +// Add adds (ip, protocol, port) to HostPortInfo +func (h HostPortInfo) Add(ip, protocol string, port int32) { + if port <= 0 { + return + } + + h.sanitize(&ip, &protocol) + + pp := NewProtocolPort(protocol, port) + if _, ok := h[ip]; !ok { + h[ip] = map[ProtocolPort]struct{}{ + *pp: {}, + } + return + } + + h[ip][*pp] = struct{}{} +} + +// Remove removes (ip, protocol, port) from HostPortInfo +func (h HostPortInfo) Remove(ip, protocol string, port int32) { + if port <= 0 { + return + } + + h.sanitize(&ip, &protocol) + + pp := NewProtocolPort(protocol, port) + if m, ok := h[ip]; ok { + delete(m, *pp) + if len(h[ip]) == 0 { + delete(h, ip) + } + } +} + +// Len returns the total number of (ip, protocol, port) tuple in HostPortInfo +func (h HostPortInfo) Len() int { + length := 0 + for _, m := range h { + length += len(m) + } + return length +} + +// CheckConflict checks if the input (ip, protocol, port) conflicts with the existing +// ones in HostPortInfo. +func (h HostPortInfo) CheckConflict(ip, protocol string, port int32) bool { + if port <= 0 { + return false + } + + h.sanitize(&ip, &protocol) + + pp := NewProtocolPort(protocol, port) + + // If ip is 0.0.0.0 check all IP's (protocol, port) pair + if ip == DefaultBindAllHostIP { + for _, m := range h { + if _, ok := m[*pp]; ok { + return true + } + } + return false + } + + // If ip isn't 0.0.0.0, only check IP and 0.0.0.0's (protocol, port) pair + for _, key := range []string{DefaultBindAllHostIP, ip} { + if m, ok := h[key]; ok { + if _, ok2 := m[*pp]; ok2 { + return true + } + } + } + + return false +} + +// sanitize the parameters +func (h HostPortInfo) sanitize(ip, protocol *string) { + if len(*ip) == 0 { + *ip = DefaultBindAllHostIP + } + if len(*protocol) == 0 { + *protocol = string(v1.ProtocolTCP) + } +} diff --git a/pkg/scheduler/framework/v1alpha1/types_test.go b/pkg/scheduler/framework/types_test.go similarity index 99% rename from pkg/scheduler/framework/v1alpha1/types_test.go rename to pkg/scheduler/framework/types_test.go index 231ce464068..00567dd3f39 100644 --- a/pkg/scheduler/framework/v1alpha1/types_test.go +++ b/pkg/scheduler/framework/types_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package v1alpha1 +package framework import ( "fmt" diff --git a/pkg/scheduler/framework/v1alpha1/BUILD b/pkg/scheduler/framework/v1alpha1/BUILD index bb970d6311d..8d7e91a2b17 100644 --- a/pkg/scheduler/framework/v1alpha1/BUILD +++ b/pkg/scheduler/framework/v1alpha1/BUILD @@ -1,33 +1,13 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library", "go_test") +load("@io_bazel_rules_go//go:def.bzl", "go_library") go_library( name = "go_default_library", - srcs = [ - "cycle_state.go", - "extender.go", - "interface.go", - "listers.go", - "types.go", - ], + srcs = ["types.go"], importpath = "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1", visibility = ["//visibility:public"], deps = [ - "//pkg/apis/core/v1/helper:go_default_library", - "//pkg/features:go_default_library", - "//pkg/scheduler/apis/config:go_default_library", - "//pkg/scheduler/util:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library", - "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", - "//staging/src/k8s.io/client-go/informers:go_default_library", - "//staging/src/k8s.io/client-go/kubernetes:go_default_library", - "//staging/src/k8s.io/client-go/tools/events:go_default_library", - "//staging/src/k8s.io/kube-scheduler/extender/v1:go_default_library", - "//vendor/k8s.io/klog/v2:go_default_library", ], ) @@ -40,26 +20,7 @@ filegroup( filegroup( name = "all-srcs", - srcs = [ - ":package-srcs", - "//pkg/scheduler/framework/v1alpha1/fake:all-srcs", - ], + srcs = [":package-srcs"], tags = ["automanaged"], visibility = ["//visibility:public"], ) - -go_test( - name = "go_default_test", - srcs = [ - "cycle_state_test.go", - "interface_test.go", - "types_test.go", - ], - embed = [":go_default_library"], - deps = [ - "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", - ], -) diff --git a/pkg/scheduler/framework/v1alpha1/types.go b/pkg/scheduler/framework/v1alpha1/types.go index b6a3efc6815..51ba87ec378 100644 --- a/pkg/scheduler/framework/v1alpha1/types.go +++ b/pkg/scheduler/framework/v1alpha1/types.go @@ -17,238 +17,46 @@ limitations under the License. package v1alpha1 import ( - "errors" - "fmt" - "sync" - "sync/atomic" - "time" - "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/resource" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/labels" - "k8s.io/apimachinery/pkg/util/sets" - utilfeature "k8s.io/apiserver/pkg/util/feature" - "k8s.io/klog/v2" - v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper" - "k8s.io/kubernetes/pkg/features" - schedutil "k8s.io/kubernetes/pkg/scheduler/util" + "k8s.io/kubernetes/pkg/scheduler/framework" ) -var generation int64 +// NodeInfo is node level aggregated information. +type NodeInfo = framework.NodeInfo -// QueuedPodInfo is a Pod wrapper with additional information related to -// the pod's status in the scheduling queue, such as the timestamp when -// it's added to the queue. -type QueuedPodInfo struct { - Pod *v1.Pod - // The time pod added to the scheduling queue. - Timestamp time.Time - // Number of schedule attempts before successfully scheduled. - // It's used to record the # attempts metric. - Attempts int - // The time when the pod is added to the queue for the first time. The pod may be added - // back to the queue multiple times before it's successfully scheduled. - // It shouldn't be updated once initialized. It's used to record the e2e scheduling - // latency for a pod. - InitialAttemptTimestamp time.Time -} - -// DeepCopy returns a deep copy of the QueuedPodInfo object. -func (pqi *QueuedPodInfo) DeepCopy() *QueuedPodInfo { - return &QueuedPodInfo{ - Pod: pqi.Pod.DeepCopy(), - Timestamp: pqi.Timestamp, - Attempts: pqi.Attempts, - InitialAttemptTimestamp: pqi.InitialAttemptTimestamp, - } -} - -// PodInfo is a wrapper to a Pod with additional pre-computed information to -// accelerate processing. This information is typically immutable (e.g., pre-processed -// inter-pod affinity selectors). -type PodInfo struct { - Pod *v1.Pod - RequiredAffinityTerms []AffinityTerm - RequiredAntiAffinityTerms []AffinityTerm - PreferredAffinityTerms []WeightedAffinityTerm - PreferredAntiAffinityTerms []WeightedAffinityTerm - ParseError error -} - -// AffinityTerm is a processed version of v1.PodAffinityTerm. -type AffinityTerm struct { - Namespaces sets.String - Selector labels.Selector - TopologyKey string -} - -// WeightedAffinityTerm is a "processed" representation of v1.WeightedAffinityTerm. -type WeightedAffinityTerm struct { - AffinityTerm - Weight int32 -} - -func newAffinityTerm(pod *v1.Pod, term *v1.PodAffinityTerm) (*AffinityTerm, error) { - namespaces := schedutil.GetNamespacesFromPodAffinityTerm(pod, term) - selector, err := metav1.LabelSelectorAsSelector(term.LabelSelector) - if err != nil { - return nil, err - } - return &AffinityTerm{Namespaces: namespaces, Selector: selector, TopologyKey: term.TopologyKey}, nil -} - -// getAffinityTerms receives a Pod and affinity terms and returns the namespaces and -// selectors of the terms. -func getAffinityTerms(pod *v1.Pod, v1Terms []v1.PodAffinityTerm) ([]AffinityTerm, error) { - if v1Terms == nil { - return nil, nil - } - - var terms []AffinityTerm - for _, term := range v1Terms { - t, err := newAffinityTerm(pod, &term) - if err != nil { - // We get here if the label selector failed to process - return nil, err - } - terms = append(terms, *t) - } - return terms, nil -} - -// getWeightedAffinityTerms returns the list of processed affinity terms. -func getWeightedAffinityTerms(pod *v1.Pod, v1Terms []v1.WeightedPodAffinityTerm) ([]WeightedAffinityTerm, error) { - if v1Terms == nil { - return nil, nil - } - - var terms []WeightedAffinityTerm - for _, term := range v1Terms { - t, err := newAffinityTerm(pod, &term.PodAffinityTerm) - if err != nil { - // We get here if the label selector failed to process - return nil, err - } - terms = append(terms, WeightedAffinityTerm{AffinityTerm: *t, Weight: term.Weight}) - } - return terms, nil +// NewNodeInfo returns a ready to use empty NodeInfo object. +// If any pods are given in arguments, their information will be aggregated in +// the returned object. +func NewNodeInfo(pods ...*v1.Pod) *NodeInfo { + return framework.NewNodeInfo(pods...) } // NewPodInfo return a new PodInfo func NewPodInfo(pod *v1.Pod) *PodInfo { - var preferredAffinityTerms []v1.WeightedPodAffinityTerm - var preferredAntiAffinityTerms []v1.WeightedPodAffinityTerm - if affinity := pod.Spec.Affinity; affinity != nil { - if a := affinity.PodAffinity; a != nil { - preferredAffinityTerms = a.PreferredDuringSchedulingIgnoredDuringExecution - } - if a := affinity.PodAntiAffinity; a != nil { - preferredAntiAffinityTerms = a.PreferredDuringSchedulingIgnoredDuringExecution - } - } - - // Attempt to parse the affinity terms - var parseErr error - requiredAffinityTerms, err := getAffinityTerms(pod, schedutil.GetPodAffinityTerms(pod.Spec.Affinity)) - if err != nil { - parseErr = fmt.Errorf("requiredAffinityTerms: %w", err) - } - requiredAntiAffinityTerms, err := getAffinityTerms(pod, schedutil.GetPodAntiAffinityTerms(pod.Spec.Affinity)) - if err != nil { - parseErr = fmt.Errorf("requiredAntiAffinityTerms: %w", err) - } - weightedAffinityTerms, err := getWeightedAffinityTerms(pod, preferredAffinityTerms) - if err != nil { - parseErr = fmt.Errorf("preferredAffinityTerms: %w", err) - } - weightedAntiAffinityTerms, err := getWeightedAffinityTerms(pod, preferredAntiAffinityTerms) - if err != nil { - parseErr = fmt.Errorf("preferredAntiAffinityTerms: %w", err) - } - - return &PodInfo{ - Pod: pod, - RequiredAffinityTerms: requiredAffinityTerms, - RequiredAntiAffinityTerms: requiredAntiAffinityTerms, - PreferredAffinityTerms: weightedAffinityTerms, - PreferredAntiAffinityTerms: weightedAntiAffinityTerms, - ParseError: parseErr, - } + return framework.NewPodInfo(pod) } +// Resource is a collection of compute resource. +type Resource = framework.Resource + +// QueuedPodInfo is a Pod wrapper with additional information related to +// the pod's status in the scheduling queue, such as the timestamp when +// it's added to the queue. +type QueuedPodInfo = framework.QueuedPodInfo + +// PodInfo is a wrapper to a Pod with additional pre-computed information to +// accelerate processing. This information is typically immutable (e.g., pre-processed +// inter-pod affinity selectors). +type PodInfo = framework.PodInfo + +// AffinityTerm is a processed version of v1.PodAffinityTerm. +type AffinityTerm = framework.AffinityTerm + +// WeightedAffinityTerm is a "processed" representation of v1.WeightedAffinityTerm. +type WeightedAffinityTerm = framework.WeightedAffinityTerm + // ImageStateSummary provides summarized information about the state of an image. -type ImageStateSummary struct { - // Size of the image - Size int64 - // Used to track how many nodes have this image - NumNodes int -} - -// NodeInfo is node level aggregated information. -type NodeInfo struct { - // Overall node information. - node *v1.Node - - // Pods running on the node. - Pods []*PodInfo - - // The subset of pods with affinity. - PodsWithAffinity []*PodInfo - - // The subset of pods with required anti-affinity. - PodsWithRequiredAntiAffinity []*PodInfo - - // Ports allocated on the node. - UsedPorts HostPortInfo - - // Total requested resources of all pods on this node. This includes assumed - // pods, which scheduler has sent for binding, but may not be scheduled yet. - Requested *Resource - // Total requested resources of all pods on this node with a minimum value - // applied to each container's CPU and memory requests. This does not reflect - // the actual resource requests for this node, but is used to avoid scheduling - // many zero-request pods onto one node. - NonZeroRequested *Resource - // We store allocatedResources (which is Node.Status.Allocatable.*) explicitly - // as int64, to avoid conversions and accessing map. - Allocatable *Resource - - // ImageStates holds the entry of an image if and only if this image is on the node. The entry can be used for - // checking an image's existence and advanced usage (e.g., image locality scheduling policy) based on the image - // state information. - ImageStates map[string]*ImageStateSummary - - // TransientInfo holds the information pertaining to a scheduling cycle. This will be destructed at the end of - // scheduling cycle. - // TODO: @ravig. Remove this once we have a clear approach for message passing across predicates and priorities. - TransientInfo *TransientSchedulerInfo - - // Whenever NodeInfo changes, generation is bumped. - // This is used to avoid cloning it if the object didn't change. - Generation int64 -} - -//initializeNodeTransientInfo initializes transient information pertaining to node. -func initializeNodeTransientInfo() nodeTransientInfo { - return nodeTransientInfo{AllocatableVolumesCount: 0, RequestedVolumes: 0} -} - -// nextGeneration: Let's make sure history never forgets the name... -// Increments the generation number monotonically ensuring that generation numbers never collide. -// Collision of the generation numbers would be particularly problematic if a node was deleted and -// added back with the same name. See issue#63262. -func nextGeneration() int64 { - return atomic.AddInt64(&generation, 1) -} - -// nodeTransientInfo contains transient node information while scheduling. -type nodeTransientInfo struct { - // AllocatableVolumesCount contains number of volumes that could be attached to node. - AllocatableVolumesCount int - // Requested number of volumes on a particular node. - RequestedVolumes int -} +type ImageStateSummary = framework.ImageStateSummary // TransientSchedulerInfo is a transient structure which is destructed at the end of each scheduling cycle. // It consists of items that are valid for a scheduling cycle and is used for message passing across predicates and @@ -256,566 +64,15 @@ type nodeTransientInfo struct { // on node etc. // IMPORTANT NOTE: Make sure that each field in this structure is documented along with usage. Expand this structure // only when absolutely needed as this data structure will be created and destroyed during every scheduling cycle. -type TransientSchedulerInfo struct { - TransientLock sync.Mutex - // NodeTransInfo holds the information related to nodeTransientInformation. NodeName is the key here. - TransNodeInfo nodeTransientInfo -} +type TransientSchedulerInfo = framework.TransientSchedulerInfo -// NewTransientSchedulerInfo returns a new scheduler transient structure with initialized values. -func NewTransientSchedulerInfo() *TransientSchedulerInfo { - tsi := &TransientSchedulerInfo{ - TransNodeInfo: initializeNodeTransientInfo(), - } - return tsi -} +// HostPortInfo stores mapping from ip to a set of ProtocolPort +type HostPortInfo = framework.HostPortInfo -// ResetTransientSchedulerInfo resets the TransientSchedulerInfo. -func (transientSchedInfo *TransientSchedulerInfo) ResetTransientSchedulerInfo() { - transientSchedInfo.TransientLock.Lock() - defer transientSchedInfo.TransientLock.Unlock() - // Reset TransientNodeInfo. - transientSchedInfo.TransNodeInfo.AllocatableVolumesCount = 0 - transientSchedInfo.TransNodeInfo.RequestedVolumes = 0 -} - -// Resource is a collection of compute resource. -type Resource struct { - MilliCPU int64 - Memory int64 - EphemeralStorage int64 - // We store allowedPodNumber (which is Node.Status.Allocatable.Pods().Value()) - // explicitly as int, to avoid conversions and improve performance. - AllowedPodNumber int - // ScalarResources - ScalarResources map[v1.ResourceName]int64 -} +// ProtocolPort represents a protocol port pair, e.g. tcp:80. +type ProtocolPort = framework.ProtocolPort // NewResource creates a Resource from ResourceList func NewResource(rl v1.ResourceList) *Resource { - r := &Resource{} - r.Add(rl) - return r -} - -// Add adds ResourceList into Resource. -func (r *Resource) Add(rl v1.ResourceList) { - if r == nil { - return - } - - for rName, rQuant := range rl { - switch rName { - case v1.ResourceCPU: - r.MilliCPU += rQuant.MilliValue() - case v1.ResourceMemory: - r.Memory += rQuant.Value() - case v1.ResourcePods: - r.AllowedPodNumber += int(rQuant.Value()) - case v1.ResourceEphemeralStorage: - if utilfeature.DefaultFeatureGate.Enabled(features.LocalStorageCapacityIsolation) { - // if the local storage capacity isolation feature gate is disabled, pods request 0 disk. - r.EphemeralStorage += rQuant.Value() - } - default: - if v1helper.IsScalarResourceName(rName) { - r.AddScalar(rName, rQuant.Value()) - } - } - } -} - -// ResourceList returns a resource list of this resource. -func (r *Resource) ResourceList() v1.ResourceList { - result := v1.ResourceList{ - v1.ResourceCPU: *resource.NewMilliQuantity(r.MilliCPU, resource.DecimalSI), - v1.ResourceMemory: *resource.NewQuantity(r.Memory, resource.BinarySI), - v1.ResourcePods: *resource.NewQuantity(int64(r.AllowedPodNumber), resource.BinarySI), - v1.ResourceEphemeralStorage: *resource.NewQuantity(r.EphemeralStorage, resource.BinarySI), - } - for rName, rQuant := range r.ScalarResources { - if v1helper.IsHugePageResourceName(rName) { - result[rName] = *resource.NewQuantity(rQuant, resource.BinarySI) - } else { - result[rName] = *resource.NewQuantity(rQuant, resource.DecimalSI) - } - } - return result -} - -// Clone returns a copy of this resource. -func (r *Resource) Clone() *Resource { - res := &Resource{ - MilliCPU: r.MilliCPU, - Memory: r.Memory, - AllowedPodNumber: r.AllowedPodNumber, - EphemeralStorage: r.EphemeralStorage, - } - if r.ScalarResources != nil { - res.ScalarResources = make(map[v1.ResourceName]int64) - for k, v := range r.ScalarResources { - res.ScalarResources[k] = v - } - } - return res -} - -// AddScalar adds a resource by a scalar value of this resource. -func (r *Resource) AddScalar(name v1.ResourceName, quantity int64) { - r.SetScalar(name, r.ScalarResources[name]+quantity) -} - -// SetScalar sets a resource by a scalar value of this resource. -func (r *Resource) SetScalar(name v1.ResourceName, quantity int64) { - // Lazily allocate scalar resource map. - if r.ScalarResources == nil { - r.ScalarResources = map[v1.ResourceName]int64{} - } - r.ScalarResources[name] = quantity -} - -// SetMaxResource compares with ResourceList and takes max value for each Resource. -func (r *Resource) SetMaxResource(rl v1.ResourceList) { - if r == nil { - return - } - - for rName, rQuantity := range rl { - switch rName { - case v1.ResourceMemory: - if mem := rQuantity.Value(); mem > r.Memory { - r.Memory = mem - } - case v1.ResourceCPU: - if cpu := rQuantity.MilliValue(); cpu > r.MilliCPU { - r.MilliCPU = cpu - } - case v1.ResourceEphemeralStorage: - if ephemeralStorage := rQuantity.Value(); ephemeralStorage > r.EphemeralStorage { - r.EphemeralStorage = ephemeralStorage - } - default: - if v1helper.IsScalarResourceName(rName) { - value := rQuantity.Value() - if value > r.ScalarResources[rName] { - r.SetScalar(rName, value) - } - } - } - } -} - -// NewNodeInfo returns a ready to use empty NodeInfo object. -// If any pods are given in arguments, their information will be aggregated in -// the returned object. -func NewNodeInfo(pods ...*v1.Pod) *NodeInfo { - ni := &NodeInfo{ - Requested: &Resource{}, - NonZeroRequested: &Resource{}, - Allocatable: &Resource{}, - TransientInfo: NewTransientSchedulerInfo(), - Generation: nextGeneration(), - UsedPorts: make(HostPortInfo), - ImageStates: make(map[string]*ImageStateSummary), - } - for _, pod := range pods { - ni.AddPod(pod) - } - return ni -} - -// Node returns overall information about this node. -func (n *NodeInfo) Node() *v1.Node { - if n == nil { - return nil - } - return n.node -} - -// Clone returns a copy of this node. -func (n *NodeInfo) Clone() *NodeInfo { - clone := &NodeInfo{ - node: n.node, - Requested: n.Requested.Clone(), - NonZeroRequested: n.NonZeroRequested.Clone(), - Allocatable: n.Allocatable.Clone(), - TransientInfo: n.TransientInfo, - UsedPorts: make(HostPortInfo), - ImageStates: n.ImageStates, - Generation: n.Generation, - } - if len(n.Pods) > 0 { - clone.Pods = append([]*PodInfo(nil), n.Pods...) - } - if len(n.UsedPorts) > 0 { - // HostPortInfo is a map-in-map struct - // make sure it's deep copied - for ip, portMap := range n.UsedPorts { - clone.UsedPorts[ip] = make(map[ProtocolPort]struct{}) - for protocolPort, v := range portMap { - clone.UsedPorts[ip][protocolPort] = v - } - } - } - if len(n.PodsWithAffinity) > 0 { - clone.PodsWithAffinity = append([]*PodInfo(nil), n.PodsWithAffinity...) - } - if len(n.PodsWithRequiredAntiAffinity) > 0 { - clone.PodsWithRequiredAntiAffinity = append([]*PodInfo(nil), n.PodsWithRequiredAntiAffinity...) - } - return clone -} - -// String returns representation of human readable format of this NodeInfo. -func (n *NodeInfo) String() string { - podKeys := make([]string, len(n.Pods)) - for i, p := range n.Pods { - podKeys[i] = p.Pod.Name - } - return fmt.Sprintf("&NodeInfo{Pods:%v, RequestedResource:%#v, NonZeroRequest: %#v, UsedPort: %#v, AllocatableResource:%#v}", - podKeys, n.Requested, n.NonZeroRequested, n.UsedPorts, n.Allocatable) -} - -// AddPod adds pod information to this NodeInfo. -func (n *NodeInfo) AddPod(pod *v1.Pod) { - podInfo := NewPodInfo(pod) - res, non0CPU, non0Mem := calculateResource(pod) - n.Requested.MilliCPU += res.MilliCPU - n.Requested.Memory += res.Memory - n.Requested.EphemeralStorage += res.EphemeralStorage - if n.Requested.ScalarResources == nil && len(res.ScalarResources) > 0 { - n.Requested.ScalarResources = map[v1.ResourceName]int64{} - } - for rName, rQuant := range res.ScalarResources { - n.Requested.ScalarResources[rName] += rQuant - } - n.NonZeroRequested.MilliCPU += non0CPU - n.NonZeroRequested.Memory += non0Mem - n.Pods = append(n.Pods, podInfo) - if podWithAffinity(pod) { - n.PodsWithAffinity = append(n.PodsWithAffinity, podInfo) - } - if podWithRequiredAntiAffinity(pod) { - n.PodsWithRequiredAntiAffinity = append(n.PodsWithRequiredAntiAffinity, podInfo) - } - - // Consume ports when pods added. - n.updateUsedPorts(podInfo.Pod, true) - - n.Generation = nextGeneration() -} - -func podWithAffinity(p *v1.Pod) bool { - affinity := p.Spec.Affinity - return affinity != nil && (affinity.PodAffinity != nil || affinity.PodAntiAffinity != nil) -} - -func podWithRequiredAntiAffinity(p *v1.Pod) bool { - affinity := p.Spec.Affinity - return affinity != nil && affinity.PodAntiAffinity != nil && - len(affinity.PodAntiAffinity.RequiredDuringSchedulingIgnoredDuringExecution) != 0 -} - -func removeFromSlice(s []*PodInfo, k string) []*PodInfo { - for i := range s { - k2, err := GetPodKey(s[i].Pod) - if err != nil { - klog.Errorf("Cannot get pod key, err: %v", err) - continue - } - if k == k2 { - // delete the element - s[i] = s[len(s)-1] - s = s[:len(s)-1] - break - } - } - return s -} - -// RemovePod subtracts pod information from this NodeInfo. -func (n *NodeInfo) RemovePod(pod *v1.Pod) error { - k, err := GetPodKey(pod) - if err != nil { - return err - } - if podWithAffinity(pod) { - n.PodsWithAffinity = removeFromSlice(n.PodsWithAffinity, k) - } - if podWithRequiredAntiAffinity(pod) { - n.PodsWithRequiredAntiAffinity = removeFromSlice(n.PodsWithRequiredAntiAffinity, k) - } - - for i := range n.Pods { - k2, err := GetPodKey(n.Pods[i].Pod) - if err != nil { - klog.Errorf("Cannot get pod key, err: %v", err) - continue - } - if k == k2 { - // delete the element - n.Pods[i] = n.Pods[len(n.Pods)-1] - n.Pods = n.Pods[:len(n.Pods)-1] - // reduce the resource data - res, non0CPU, non0Mem := calculateResource(pod) - - n.Requested.MilliCPU -= res.MilliCPU - n.Requested.Memory -= res.Memory - n.Requested.EphemeralStorage -= res.EphemeralStorage - if len(res.ScalarResources) > 0 && n.Requested.ScalarResources == nil { - n.Requested.ScalarResources = map[v1.ResourceName]int64{} - } - for rName, rQuant := range res.ScalarResources { - n.Requested.ScalarResources[rName] -= rQuant - } - n.NonZeroRequested.MilliCPU -= non0CPU - n.NonZeroRequested.Memory -= non0Mem - - // Release ports when remove Pods. - n.updateUsedPorts(pod, false) - - n.Generation = nextGeneration() - n.resetSlicesIfEmpty() - return nil - } - } - return fmt.Errorf("no corresponding pod %s in pods of node %s", pod.Name, n.node.Name) -} - -// resets the slices to nil so that we can do DeepEqual in unit tests. -func (n *NodeInfo) resetSlicesIfEmpty() { - if len(n.PodsWithAffinity) == 0 { - n.PodsWithAffinity = nil - } - if len(n.PodsWithRequiredAntiAffinity) == 0 { - n.PodsWithRequiredAntiAffinity = nil - } - if len(n.Pods) == 0 { - n.Pods = nil - } -} - -// resourceRequest = max(sum(podSpec.Containers), podSpec.InitContainers) + overHead -func calculateResource(pod *v1.Pod) (res Resource, non0CPU int64, non0Mem int64) { - resPtr := &res - for _, c := range pod.Spec.Containers { - resPtr.Add(c.Resources.Requests) - non0CPUReq, non0MemReq := schedutil.GetNonzeroRequests(&c.Resources.Requests) - non0CPU += non0CPUReq - non0Mem += non0MemReq - // No non-zero resources for GPUs or opaque resources. - } - - for _, ic := range pod.Spec.InitContainers { - resPtr.SetMaxResource(ic.Resources.Requests) - non0CPUReq, non0MemReq := schedutil.GetNonzeroRequests(&ic.Resources.Requests) - if non0CPU < non0CPUReq { - non0CPU = non0CPUReq - } - - if non0Mem < non0MemReq { - non0Mem = non0MemReq - } - } - - // If Overhead is being utilized, add to the total requests for the pod - if pod.Spec.Overhead != nil && utilfeature.DefaultFeatureGate.Enabled(features.PodOverhead) { - resPtr.Add(pod.Spec.Overhead) - if _, found := pod.Spec.Overhead[v1.ResourceCPU]; found { - non0CPU += pod.Spec.Overhead.Cpu().MilliValue() - } - - if _, found := pod.Spec.Overhead[v1.ResourceMemory]; found { - non0Mem += pod.Spec.Overhead.Memory().Value() - } - } - - return -} - -// updateUsedPorts updates the UsedPorts of NodeInfo. -func (n *NodeInfo) updateUsedPorts(pod *v1.Pod, add bool) { - for j := range pod.Spec.Containers { - container := &pod.Spec.Containers[j] - for k := range container.Ports { - podPort := &container.Ports[k] - if add { - n.UsedPorts.Add(podPort.HostIP, string(podPort.Protocol), podPort.HostPort) - } else { - n.UsedPorts.Remove(podPort.HostIP, string(podPort.Protocol), podPort.HostPort) - } - } - } -} - -// SetNode sets the overall node information. -func (n *NodeInfo) SetNode(node *v1.Node) error { - n.node = node - n.Allocatable = NewResource(node.Status.Allocatable) - n.TransientInfo = NewTransientSchedulerInfo() - n.Generation = nextGeneration() - return nil -} - -// RemoveNode removes the node object, leaving all other tracking information. -func (n *NodeInfo) RemoveNode() { - n.node = nil - n.Generation = nextGeneration() -} - -// FilterOutPods receives a list of pods and filters out those whose node names -// are equal to the node of this NodeInfo, but are not found in the pods of this NodeInfo. -// -// Preemption logic simulates removal of pods on a node by removing them from the -// corresponding NodeInfo. In order for the simulation to work, we call this method -// on the pods returned from SchedulerCache, so that predicate functions see -// only the pods that are not removed from the NodeInfo. -func (n *NodeInfo) FilterOutPods(pods []*v1.Pod) []*v1.Pod { - node := n.Node() - if node == nil { - return pods - } - filtered := make([]*v1.Pod, 0, len(pods)) - for _, p := range pods { - if p.Spec.NodeName != node.Name { - filtered = append(filtered, p) - continue - } - // If pod is on the given node, add it to 'filtered' only if it is present in nodeInfo. - podKey, err := GetPodKey(p) - if err != nil { - continue - } - for _, np := range n.Pods { - npodkey, _ := GetPodKey(np.Pod) - if npodkey == podKey { - filtered = append(filtered, p) - break - } - } - } - return filtered -} - -// GetPodKey returns the string key of a pod. -func GetPodKey(pod *v1.Pod) (string, error) { - uid := string(pod.UID) - if len(uid) == 0 { - return "", errors.New("Cannot get cache key for pod with empty UID") - } - return uid, nil -} - -// DefaultBindAllHostIP defines the default ip address used to bind to all host. -const DefaultBindAllHostIP = "0.0.0.0" - -// ProtocolPort represents a protocol port pair, e.g. tcp:80. -type ProtocolPort struct { - Protocol string - Port int32 -} - -// NewProtocolPort creates a ProtocolPort instance. -func NewProtocolPort(protocol string, port int32) *ProtocolPort { - pp := &ProtocolPort{ - Protocol: protocol, - Port: port, - } - - if len(pp.Protocol) == 0 { - pp.Protocol = string(v1.ProtocolTCP) - } - - return pp -} - -// HostPortInfo stores mapping from ip to a set of ProtocolPort -type HostPortInfo map[string]map[ProtocolPort]struct{} - -// Add adds (ip, protocol, port) to HostPortInfo -func (h HostPortInfo) Add(ip, protocol string, port int32) { - if port <= 0 { - return - } - - h.sanitize(&ip, &protocol) - - pp := NewProtocolPort(protocol, port) - if _, ok := h[ip]; !ok { - h[ip] = map[ProtocolPort]struct{}{ - *pp: {}, - } - return - } - - h[ip][*pp] = struct{}{} -} - -// Remove removes (ip, protocol, port) from HostPortInfo -func (h HostPortInfo) Remove(ip, protocol string, port int32) { - if port <= 0 { - return - } - - h.sanitize(&ip, &protocol) - - pp := NewProtocolPort(protocol, port) - if m, ok := h[ip]; ok { - delete(m, *pp) - if len(h[ip]) == 0 { - delete(h, ip) - } - } -} - -// Len returns the total number of (ip, protocol, port) tuple in HostPortInfo -func (h HostPortInfo) Len() int { - length := 0 - for _, m := range h { - length += len(m) - } - return length -} - -// CheckConflict checks if the input (ip, protocol, port) conflicts with the existing -// ones in HostPortInfo. -func (h HostPortInfo) CheckConflict(ip, protocol string, port int32) bool { - if port <= 0 { - return false - } - - h.sanitize(&ip, &protocol) - - pp := NewProtocolPort(protocol, port) - - // If ip is 0.0.0.0 check all IP's (protocol, port) pair - if ip == DefaultBindAllHostIP { - for _, m := range h { - if _, ok := m[*pp]; ok { - return true - } - } - return false - } - - // If ip isn't 0.0.0.0, only check IP and 0.0.0.0's (protocol, port) pair - for _, key := range []string{DefaultBindAllHostIP, ip} { - if m, ok := h[key]; ok { - if _, ok2 := m[*pp]; ok2 { - return true - } - } - } - - return false -} - -// sanitize the parameters -func (h HostPortInfo) sanitize(ip, protocol *string) { - if len(*ip) == 0 { - *ip = DefaultBindAllHostIP - } - if len(*protocol) == 0 { - *protocol = string(v1.ProtocolTCP) - } + return framework.NewResource(rl) } diff --git a/pkg/scheduler/internal/cache/BUILD b/pkg/scheduler/internal/cache/BUILD index a359f89db2c..ecea58f857c 100644 --- a/pkg/scheduler/internal/cache/BUILD +++ b/pkg/scheduler/internal/cache/BUILD @@ -12,7 +12,7 @@ go_library( visibility = ["//pkg/scheduler:__subpackages__"], deps = [ "//pkg/features:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/metrics:go_default_library", "//pkg/util/node:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", @@ -33,7 +33,7 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/features:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/util:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", diff --git a/pkg/scheduler/internal/cache/cache.go b/pkg/scheduler/internal/cache/cache.go index fac755c8a70..2443b6a1fdd 100644 --- a/pkg/scheduler/internal/cache/cache.go +++ b/pkg/scheduler/internal/cache/cache.go @@ -27,7 +27,7 @@ import ( utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/klog/v2" "k8s.io/kubernetes/pkg/features" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/metrics" ) diff --git a/pkg/scheduler/internal/cache/cache_test.go b/pkg/scheduler/internal/cache/cache_test.go index 690b9e1bb84..f008ac75e8a 100644 --- a/pkg/scheduler/internal/cache/cache_test.go +++ b/pkg/scheduler/internal/cache/cache_test.go @@ -31,7 +31,7 @@ import ( utilfeature "k8s.io/apiserver/pkg/util/feature" featuregatetesting "k8s.io/component-base/featuregate/testing" "k8s.io/kubernetes/pkg/features" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" schedutil "k8s.io/kubernetes/pkg/scheduler/util" ) diff --git a/pkg/scheduler/internal/cache/debugger/BUILD b/pkg/scheduler/internal/cache/debugger/BUILD index 19d87e7b145..78966d83d47 100644 --- a/pkg/scheduler/internal/cache/debugger/BUILD +++ b/pkg/scheduler/internal/cache/debugger/BUILD @@ -12,7 +12,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger", visibility = ["//pkg/scheduler:__subpackages__"], deps = [ - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/internal/cache:go_default_library", "//pkg/scheduler/internal/queue:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", @@ -27,7 +27,7 @@ go_test( srcs = ["comparer_test.go"], embed = [":go_default_library"], deps = [ - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", ], diff --git a/pkg/scheduler/internal/cache/debugger/comparer.go b/pkg/scheduler/internal/cache/debugger/comparer.go index 432113f72cd..21c1ac889d7 100644 --- a/pkg/scheduler/internal/cache/debugger/comparer.go +++ b/pkg/scheduler/internal/cache/debugger/comparer.go @@ -24,7 +24,7 @@ import ( "k8s.io/apimachinery/pkg/labels" corelisters "k8s.io/client-go/listers/core/v1" "k8s.io/klog/v2" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue" ) diff --git a/pkg/scheduler/internal/cache/debugger/comparer_test.go b/pkg/scheduler/internal/cache/debugger/comparer_test.go index e0348e81525..59dd3fa5c11 100644 --- a/pkg/scheduler/internal/cache/debugger/comparer_test.go +++ b/pkg/scheduler/internal/cache/debugger/comparer_test.go @@ -22,7 +22,7 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) func TestCompareNodes(t *testing.T) { diff --git a/pkg/scheduler/internal/cache/debugger/dumper.go b/pkg/scheduler/internal/cache/debugger/dumper.go index 63792166088..562e4cfc041 100644 --- a/pkg/scheduler/internal/cache/debugger/dumper.go +++ b/pkg/scheduler/internal/cache/debugger/dumper.go @@ -23,7 +23,7 @@ import ( "k8s.io/klog/v2" "k8s.io/api/core/v1" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" "k8s.io/kubernetes/pkg/scheduler/internal/queue" ) diff --git a/pkg/scheduler/internal/cache/interface.go b/pkg/scheduler/internal/cache/interface.go index fc60f429355..06dd2b2451b 100644 --- a/pkg/scheduler/internal/cache/interface.go +++ b/pkg/scheduler/internal/cache/interface.go @@ -17,8 +17,8 @@ limitations under the License. package cache import ( - v1 "k8s.io/api/core/v1" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/api/core/v1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) // Cache collects pods' information and provides node-level aggregated information. diff --git a/pkg/scheduler/internal/cache/snapshot.go b/pkg/scheduler/internal/cache/snapshot.go index 674de0b276f..bf312fcdf9c 100644 --- a/pkg/scheduler/internal/cache/snapshot.go +++ b/pkg/scheduler/internal/cache/snapshot.go @@ -21,7 +21,7 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/sets" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) // Snapshot is a snapshot of cache NodeInfo and NodeTree order. The scheduler takes a diff --git a/pkg/scheduler/internal/cache/snapshot_test.go b/pkg/scheduler/internal/cache/snapshot_test.go index 0aa927c2bbd..e4e9712b87a 100644 --- a/pkg/scheduler/internal/cache/snapshot_test.go +++ b/pkg/scheduler/internal/cache/snapshot_test.go @@ -23,7 +23,7 @@ import ( "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/sets" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" ) const mb int64 = 1024 * 1024 diff --git a/pkg/scheduler/internal/queue/BUILD b/pkg/scheduler/internal/queue/BUILD index ab10f365df1..1c4a50ef227 100644 --- a/pkg/scheduler/internal/queue/BUILD +++ b/pkg/scheduler/internal/queue/BUILD @@ -9,7 +9,7 @@ go_library( importpath = "k8s.io/kubernetes/pkg/scheduler/internal/queue", visibility = ["//pkg/scheduler:__subpackages__"], deps = [ - "//pkg/scheduler/framework/v1alpha1:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/internal/heap:go_default_library", "//pkg/scheduler/metrics:go_default_library", "//pkg/scheduler/util:go_default_library", @@ -28,8 +28,8 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/api/v1/pod:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/plugins/queuesort:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/metrics:go_default_library", "//pkg/scheduler/util:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", diff --git a/pkg/scheduler/internal/queue/scheduling_queue.go b/pkg/scheduler/internal/queue/scheduling_queue.go index 3ec0e6f159b..56504cf77b5 100644 --- a/pkg/scheduler/internal/queue/scheduling_queue.go +++ b/pkg/scheduler/internal/queue/scheduling_queue.go @@ -36,7 +36,7 @@ import ( ktypes "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/client-go/tools/cache" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/internal/heap" "k8s.io/kubernetes/pkg/scheduler/metrics" "k8s.io/kubernetes/pkg/scheduler/util" diff --git a/pkg/scheduler/internal/queue/scheduling_queue_test.go b/pkg/scheduler/internal/queue/scheduling_queue_test.go index 597bce881fe..476d3b5a983 100644 --- a/pkg/scheduler/internal/queue/scheduling_queue_test.go +++ b/pkg/scheduler/internal/queue/scheduling_queue_test.go @@ -30,8 +30,8 @@ import ( "k8s.io/apimachinery/pkg/util/clock" "k8s.io/component-base/metrics/testutil" podutil "k8s.io/kubernetes/pkg/api/v1/pod" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/queuesort" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" "k8s.io/kubernetes/pkg/scheduler/metrics" "k8s.io/kubernetes/pkg/scheduler/util" ) diff --git a/pkg/scheduler/profile/BUILD b/pkg/scheduler/profile/BUILD index 8dee306ce40..6b7e566d0e4 100644 --- a/pkg/scheduler/profile/BUILD +++ b/pkg/scheduler/profile/BUILD @@ -7,8 +7,8 @@ go_library( visibility = ["//visibility:public"], deps = [ "//pkg/scheduler/apis/config:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/runtime:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library", "//staging/src/k8s.io/client-go/tools/events:go_default_library", @@ -36,8 +36,8 @@ go_test( embed = [":go_default_library"], deps = [ "//pkg/scheduler/apis/config:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/runtime:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/events/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", diff --git a/pkg/scheduler/profile/profile.go b/pkg/scheduler/profile/profile.go index 0dc28324502..4b025955234 100644 --- a/pkg/scheduler/profile/profile.go +++ b/pkg/scheduler/profile/profile.go @@ -26,8 +26,8 @@ import ( "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/tools/events" "k8s.io/kubernetes/pkg/scheduler/apis/config" + "k8s.io/kubernetes/pkg/scheduler/framework" frameworkruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" ) // RecorderFactory builds an EventRecorder for a given scheduler name. diff --git a/pkg/scheduler/profile/profile_test.go b/pkg/scheduler/profile/profile_test.go index 45611bedc01..2db63063b83 100644 --- a/pkg/scheduler/profile/profile_test.go +++ b/pkg/scheduler/profile/profile_test.go @@ -28,8 +28,8 @@ import ( "k8s.io/client-go/kubernetes/fake" "k8s.io/client-go/tools/events" "k8s.io/kubernetes/pkg/scheduler/apis/config" + "k8s.io/kubernetes/pkg/scheduler/framework" frameworkruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" ) var fakeRegistry = frameworkruntime.Registry{ @@ -348,7 +348,7 @@ func (p *fakePlugin) Bind(context.Context, *framework.CycleState, *v1.Pod, strin return nil } -func newFakePlugin(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { +func newFakePlugin(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &fakePlugin{}, nil } diff --git a/pkg/scheduler/scheduler.go b/pkg/scheduler/scheduler.go index 5eaa0308c42..3ab718dde35 100644 --- a/pkg/scheduler/scheduler.go +++ b/pkg/scheduler/scheduler.go @@ -38,9 +38,9 @@ import ( schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/apis/config/scheme" "k8s.io/kubernetes/pkg/scheduler/core" + "k8s.io/kubernetes/pkg/scheduler/framework" frameworkplugins "k8s.io/kubernetes/pkg/scheduler/framework/plugins" frameworkruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue" "k8s.io/kubernetes/pkg/scheduler/metrics" diff --git a/pkg/scheduler/scheduler_test.go b/pkg/scheduler/scheduler_test.go index 476c59de23e..6a7681ced7f 100644 --- a/pkg/scheduler/scheduler_test.go +++ b/pkg/scheduler/scheduler_test.go @@ -49,13 +49,13 @@ import ( "k8s.io/kubernetes/pkg/controller/volume/scheduling" schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/core" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultbinder" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodeports" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/noderesources" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/queuesort" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumebinding" frameworkruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" internalcache "k8s.io/kubernetes/pkg/scheduler/internal/cache" fakecache "k8s.io/kubernetes/pkg/scheduler/internal/cache/fake" internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue" @@ -402,7 +402,7 @@ type fakeNodeSelector struct { fakeNodeSelectorArgs } -func newFakeNodeSelector(args runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { +func newFakeNodeSelector(args runtime.Object, _ framework.Handle) (framework.Plugin, error) { pl := &fakeNodeSelector{} if err := frameworkruntime.DecodeInto(args, &pl.fakeNodeSelectorArgs); err != nil { return nil, err @@ -869,7 +869,7 @@ func setupTestSchedulerWithVolumeBinding(volumeBinder scheduling.SchedulerVolume fns := []st.RegisterPluginFunc{ st.RegisterQueueSortPlugin(queuesort.Name, queuesort.New), st.RegisterBindPlugin(defaultbinder.Name, defaultbinder.New), - st.RegisterPluginAsExtensions(volumebinding.Name, func(plArgs runtime.Object, handle framework.FrameworkHandle) (framework.Plugin, error) { + st.RegisterPluginAsExtensions(volumebinding.Name, func(plArgs runtime.Object, handle framework.Handle) (framework.Plugin, error) { return &volumebinding.VolumeBinding{Binder: volumeBinder, PVCLister: pvcInformer.Lister()}, nil }, "PreFilter", "Filter", "Reserve", "PreBind"), } diff --git a/pkg/scheduler/testing/BUILD b/pkg/scheduler/testing/BUILD index 5783783f53f..824ca2fa08c 100644 --- a/pkg/scheduler/testing/BUILD +++ b/pkg/scheduler/testing/BUILD @@ -14,8 +14,8 @@ go_library( importpath = "k8s.io/kubernetes/pkg/scheduler/testing", deps = [ "//pkg/scheduler/apis/config:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/runtime:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/util:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", diff --git a/pkg/scheduler/testing/fake_extender.go b/pkg/scheduler/testing/fake_extender.go index b1053bf23ef..bf73b1855f0 100644 --- a/pkg/scheduler/testing/fake_extender.go +++ b/pkg/scheduler/testing/fake_extender.go @@ -25,8 +25,8 @@ import ( "k8s.io/apimachinery/pkg/runtime" corev1helpers "k8s.io/component-helpers/scheduling/corev1" extenderv1 "k8s.io/kube-scheduler/extender/v1" + "k8s.io/kubernetes/pkg/scheduler/framework" frameworkruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" "k8s.io/kubernetes/pkg/scheduler/util" ) @@ -112,7 +112,7 @@ type node2PrioritizerPlugin struct{} // NewNode2PrioritizerPlugin returns a factory function to build node2PrioritizerPlugin. func NewNode2PrioritizerPlugin() frameworkruntime.PluginFactory { - return func(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { + return func(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &node2PrioritizerPlugin{}, nil } } diff --git a/pkg/scheduler/testing/fake_plugins.go b/pkg/scheduler/testing/fake_plugins.go index 41427db7078..b025cb15cef 100644 --- a/pkg/scheduler/testing/fake_plugins.go +++ b/pkg/scheduler/testing/fake_plugins.go @@ -24,8 +24,8 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/kubernetes/pkg/scheduler/framework" frameworkruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" ) // ErrReasonFake is a fake error message denotes the filter function errored. @@ -45,7 +45,7 @@ func (pl *FalseFilterPlugin) Filter(_ context.Context, _ *framework.CycleState, } // NewFalseFilterPlugin initializes a FalseFilterPlugin and returns it. -func NewFalseFilterPlugin(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { +func NewFalseFilterPlugin(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &FalseFilterPlugin{}, nil } @@ -63,7 +63,7 @@ func (pl *TrueFilterPlugin) Filter(_ context.Context, _ *framework.CycleState, p } // NewTrueFilterPlugin initializes a TrueFilterPlugin and returns it. -func NewTrueFilterPlugin(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { +func NewTrueFilterPlugin(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &TrueFilterPlugin{}, nil } @@ -92,7 +92,7 @@ func (pl *FakeFilterPlugin) Filter(_ context.Context, _ *framework.CycleState, p // NewFakeFilterPlugin initializes a fakeFilterPlugin and returns it. func NewFakeFilterPlugin(failedNodeReturnCodeMap map[string]framework.Code) frameworkruntime.PluginFactory { - return func(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { + return func(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &FakeFilterPlugin{ FailedNodeReturnCodeMap: failedNodeReturnCodeMap, }, nil @@ -121,7 +121,7 @@ func (pl *MatchFilterPlugin) Filter(_ context.Context, _ *framework.CycleState, } // NewMatchFilterPlugin initializes a MatchFilterPlugin and returns it. -func NewMatchFilterPlugin(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { +func NewMatchFilterPlugin(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &MatchFilterPlugin{}, nil } @@ -147,7 +147,7 @@ func (pl *FakePreFilterPlugin) PreFilterExtensions() framework.PreFilterExtensio // NewFakePreFilterPlugin initializes a fakePreFilterPlugin and returns it. func NewFakePreFilterPlugin(status *framework.Status) frameworkruntime.PluginFactory { - return func(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { + return func(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &FakePreFilterPlugin{ Status: status, }, nil @@ -175,7 +175,7 @@ func (pl *FakeReservePlugin) Unreserve(_ context.Context, _ *framework.CycleStat // NewFakeReservePlugin initializes a fakeReservePlugin and returns it. func NewFakeReservePlugin(status *framework.Status) frameworkruntime.PluginFactory { - return func(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { + return func(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &FakeReservePlugin{ Status: status, }, nil @@ -199,7 +199,7 @@ func (pl *FakePreBindPlugin) PreBind(_ context.Context, _ *framework.CycleState, // NewFakePreBindPlugin initializes a fakePreBindPlugin and returns it. func NewFakePreBindPlugin(status *framework.Status) frameworkruntime.PluginFactory { - return func(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { + return func(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &FakePreBindPlugin{ Status: status, }, nil @@ -224,7 +224,7 @@ func (pl *FakePermitPlugin) Permit(_ context.Context, _ *framework.CycleState, _ // NewFakePermitPlugin initializes a fakePermitPlugin and returns it. func NewFakePermitPlugin(status *framework.Status, timeout time.Duration) frameworkruntime.PluginFactory { - return func(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { + return func(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return &FakePermitPlugin{ Status: status, Timeout: timeout, diff --git a/pkg/scheduler/testing/framework_helpers.go b/pkg/scheduler/testing/framework_helpers.go index 14c3cd9deee..cce96ff28e7 100644 --- a/pkg/scheduler/testing/framework_helpers.go +++ b/pkg/scheduler/testing/framework_helpers.go @@ -18,8 +18,8 @@ package testing import ( schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" ) // NewFramework creates a Framework from the register functions and options. diff --git a/test/e2e/framework/.import-restrictions b/test/e2e/framework/.import-restrictions index c6faeaaa071..641487a44fc 100644 --- a/test/e2e/framework/.import-restrictions +++ b/test/e2e/framework/.import-restrictions @@ -182,6 +182,7 @@ rules: - k8s.io/kubernetes/pkg/registry/core/service/allocator - k8s.io/kubernetes/pkg/registry/core/service/portallocator - k8s.io/kubernetes/pkg/scheduler/api + - k8s.io/kubernetes/pkg/scheduler/framework - k8s.io/kubernetes/pkg/scheduler/framework/plugins/helper - k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodeaffinity - k8s.io/kubernetes/pkg/scheduler/framework/plugins/nodename diff --git a/test/integration/scheduler/BUILD b/test/integration/scheduler/BUILD index 41afd3119ef..6c99e8aad51 100644 --- a/test/integration/scheduler/BUILD +++ b/test/integration/scheduler/BUILD @@ -28,13 +28,13 @@ go_test( "//pkg/features:go_default_library", "//pkg/scheduler:go_default_library", "//pkg/scheduler/apis/config:go_default_library", + "//pkg/scheduler/framework:go_default_library", "//pkg/scheduler/framework/plugins/defaultbinder:go_default_library", "//pkg/scheduler/framework/plugins/imagelocality:go_default_library", "//pkg/scheduler/framework/plugins/interpodaffinity:go_default_library", "//pkg/scheduler/framework/plugins/nodeaffinity:go_default_library", "//pkg/scheduler/framework/plugins/podtopologyspread:go_default_library", "//pkg/scheduler/framework/runtime:go_default_library", - "//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/profile:go_default_library", "//pkg/scheduler/testing:go_default_library", "//plugin/pkg/admission/podtolerationrestriction:go_default_library", diff --git a/test/integration/scheduler/framework_test.go b/test/integration/scheduler/framework_test.go index fa3291a3b6a..188dbd2d1f9 100644 --- a/test/integration/scheduler/framework_test.go +++ b/test/integration/scheduler/framework_test.go @@ -31,9 +31,9 @@ import ( clientset "k8s.io/client-go/kubernetes" "k8s.io/kubernetes/pkg/scheduler" schedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config" + "k8s.io/kubernetes/pkg/scheduler/framework" "k8s.io/kubernetes/pkg/scheduler/framework/plugins/defaultbinder" frameworkruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" st "k8s.io/kubernetes/pkg/scheduler/testing" testutils "k8s.io/kubernetes/test/integration/util" ) @@ -62,7 +62,7 @@ type FilterPlugin struct { } type PostFilterPlugin struct { - fh framework.FrameworkHandle + fh framework.Handle numPostFilterCalled int failPostFilter bool rejectPostFilter bool @@ -113,7 +113,7 @@ type PermitPlugin struct { waitingPod string rejectingPod string allowingPod string - fh framework.FrameworkHandle + fh framework.Handle } const ( @@ -144,14 +144,14 @@ var _ framework.PermitPlugin = &PermitPlugin{} // newPlugin returns a plugin factory with specified Plugin. func newPlugin(plugin framework.Plugin) frameworkruntime.PluginFactory { - return func(_ runtime.Object, fh framework.FrameworkHandle) (framework.Plugin, error) { + return func(_ runtime.Object, fh framework.Handle) (framework.Plugin, error) { return plugin, nil } } // newPlugin returns a plugin factory with specified Plugin. func newPostFilterPlugin(plugin *PostFilterPlugin) frameworkruntime.PluginFactory { - return func(_ runtime.Object, fh framework.FrameworkHandle) (framework.Plugin, error) { + return func(_ runtime.Object, fh framework.Handle) (framework.Plugin, error) { plugin.fh = fh return plugin, nil } @@ -497,7 +497,7 @@ func (pp *PermitPlugin) reset() { // newPermitPlugin returns a factory for permit plugin with specified PermitPlugin. func newPermitPlugin(permitPlugin *PermitPlugin) frameworkruntime.PluginFactory { - return func(_ runtime.Object, fh framework.FrameworkHandle) (framework.Plugin, error) { + return func(_ runtime.Object, fh framework.Handle) (framework.Plugin, error) { permitPlugin.fh = fh return permitPlugin, nil } @@ -1140,16 +1140,16 @@ func TestBindPlugin(t *testing.T) { // Create a plugin registry for testing. Register reserve, bind, and // postBind plugins. registry := frameworkruntime.Registry{ - reservePlugin.Name(): func(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { + reservePlugin.Name(): func(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return reservePlugin, nil }, - bindPlugin1.Name(): func(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { + bindPlugin1.Name(): func(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return bindPlugin1, nil }, - bindPlugin2.Name(): func(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { + bindPlugin2.Name(): func(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return bindPlugin2, nil }, - postBindPlugin.Name(): func(_ runtime.Object, _ framework.FrameworkHandle) (framework.Plugin, error) { + postBindPlugin.Name(): func(_ runtime.Object, _ framework.Handle) (framework.Plugin, error) { return postBindPlugin, nil }, } diff --git a/test/integration/scheduler/preemption_test.go b/test/integration/scheduler/preemption_test.go index 214763ee3e1..6637a61bd9c 100644 --- a/test/integration/scheduler/preemption_test.go +++ b/test/integration/scheduler/preemption_test.go @@ -45,8 +45,8 @@ import ( "k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/scheduler" schedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config" + framework "k8s.io/kubernetes/pkg/scheduler/framework" frameworkruntime "k8s.io/kubernetes/pkg/scheduler/framework/runtime" - framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" st "k8s.io/kubernetes/pkg/scheduler/testing" "k8s.io/kubernetes/plugin/pkg/admission/priority" testutils "k8s.io/kubernetes/test/integration/util" @@ -126,7 +126,7 @@ func TestPreemption(t *testing.T) { // Initialize scheduler with a filter plugin. var filter tokenFilter registry := make(frameworkruntime.Registry) - err := registry.Register(filterPluginName, func(_ runtime.Object, fh framework.FrameworkHandle) (framework.Plugin, error) { + err := registry.Register(filterPluginName, func(_ runtime.Object, fh framework.Handle) (framework.Plugin, error) { return &filter, nil }) if err != nil {