From 5def91d7785c7894b523dc86d3b0cd12f3bdae4f Mon Sep 17 00:00:00 2001 From: skilxn-go Date: Wed, 8 Jan 2020 11:22:51 +0800 Subject: [PATCH] Add VolumeBinder to FrameworkHandle interface --- pkg/scheduler/factory.go | 1 + pkg/scheduler/framework/v1alpha1/BUILD | 1 + pkg/scheduler/framework/v1alpha1/framework.go | 16 ++++++++++++++++ pkg/scheduler/framework/v1alpha1/interface.go | 4 ++++ pkg/scheduler/internal/queue/BUILD | 1 + .../internal/queue/scheduling_queue_test.go | 5 +++++ 6 files changed, 28 insertions(+) diff --git a/pkg/scheduler/factory.go b/pkg/scheduler/factory.go index 6e14360fd3b..ec36122f302 100644 --- a/pkg/scheduler/factory.go +++ b/pkg/scheduler/factory.go @@ -122,6 +122,7 @@ func (c *Configurator) create(extenders []algorithm.SchedulerExtender) (*Schedul framework.WithInformerFactory(c.informerFactory), framework.WithSnapshotSharedLister(c.nodeInfoSnapshot), framework.WithRunAllFilters(c.alwaysCheckAllPredicates), + framework.WithVolumeBinder(c.volumeBinder), ) if err != nil { klog.Fatalf("error initializing the scheduling framework: %v", err) diff --git a/pkg/scheduler/framework/v1alpha1/BUILD b/pkg/scheduler/framework/v1alpha1/BUILD index 761b0df22ba..630b522ac32 100644 --- a/pkg/scheduler/framework/v1alpha1/BUILD +++ b/pkg/scheduler/framework/v1alpha1/BUILD @@ -18,6 +18,7 @@ go_library( "//pkg/scheduler/metrics:go_default_library", "//pkg/scheduler/nodeinfo:go_default_library", "//pkg/scheduler/util:go_default_library", + "//pkg/scheduler/volumebinder:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/types:go_default_library", diff --git a/pkg/scheduler/framework/v1alpha1/framework.go b/pkg/scheduler/framework/v1alpha1/framework.go index 730d908528f..c91fdfa56eb 100644 --- a/pkg/scheduler/framework/v1alpha1/framework.go +++ b/pkg/scheduler/framework/v1alpha1/framework.go @@ -35,6 +35,7 @@ import ( "k8s.io/kubernetes/pkg/scheduler/metrics" schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" schedutil "k8s.io/kubernetes/pkg/scheduler/util" + "k8s.io/kubernetes/pkg/scheduler/volumebinder" ) const ( @@ -76,6 +77,7 @@ type framework struct { clientSet clientset.Interface informerFactory informers.SharedInformerFactory + volumeBinder *volumebinder.VolumeBinder metricsRecorder *metricsRecorder @@ -116,6 +118,7 @@ type frameworkOptions struct { informerFactory informers.SharedInformerFactory snapshotSharedLister schedulerlisters.SharedLister metricsRecorder *metricsRecorder + volumeBinder *volumebinder.VolumeBinder runAllFilters bool } @@ -158,6 +161,13 @@ func withMetricsRecorder(recorder *metricsRecorder) Option { } } +// WithVolumeBinder sets volume binder for the scheduling framework. +func WithVolumeBinder(binder *volumebinder.VolumeBinder) Option { + return func(o *frameworkOptions) { + o.volumeBinder = binder + } +} + var defaultFrameworkOptions = frameworkOptions{ metricsRecorder: newMetricsRecorder(1000, time.Second), } @@ -178,6 +188,7 @@ func NewFramework(r Registry, plugins *config.Plugins, args []config.PluginConfi waitingPods: newWaitingPodsMap(), clientSet: options.clientSet, informerFactory: options.informerFactory, + volumeBinder: options.volumeBinder, metricsRecorder: options.metricsRecorder, runAllFilters: options.runAllFilters, } @@ -893,6 +904,11 @@ func (f *framework) SharedInformerFactory() informers.SharedInformerFactory { return f.informerFactory } +// VolumeBinder returns the volume binder used by scheduler. +func (f *framework) VolumeBinder() *volumebinder.VolumeBinder { + return f.volumeBinder +} + func (f *framework) pluginsNeeded(plugins *config.Plugins) map[string]config.Plugin { pgMap := make(map[string]config.Plugin) diff --git a/pkg/scheduler/framework/v1alpha1/interface.go b/pkg/scheduler/framework/v1alpha1/interface.go index d1351745241..52c2ad6df76 100644 --- a/pkg/scheduler/framework/v1alpha1/interface.go +++ b/pkg/scheduler/framework/v1alpha1/interface.go @@ -32,6 +32,7 @@ import ( "k8s.io/kubernetes/pkg/scheduler/apis/config" schedulerlisters "k8s.io/kubernetes/pkg/scheduler/listers" schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" + "k8s.io/kubernetes/pkg/scheduler/volumebinder" ) // NodeScoreList declares a list of nodes and their scores. @@ -483,4 +484,7 @@ type FrameworkHandle interface { ClientSet() clientset.Interface SharedInformerFactory() informers.SharedInformerFactory + + // VolumeBinder returns the volume binder used by scheduler. + VolumeBinder() *volumebinder.VolumeBinder } diff --git a/pkg/scheduler/internal/queue/BUILD b/pkg/scheduler/internal/queue/BUILD index b54047c5351..ed3723c4297 100644 --- a/pkg/scheduler/internal/queue/BUILD +++ b/pkg/scheduler/internal/queue/BUILD @@ -41,6 +41,7 @@ go_test( "//pkg/scheduler/nodeinfo:go_default_library", "//pkg/scheduler/nodeinfo/snapshot:go_default_library", "//pkg/scheduler/util:go_default_library", + "//pkg/scheduler/volumebinder: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/types:go_default_library", diff --git a/pkg/scheduler/internal/queue/scheduling_queue_test.go b/pkg/scheduler/internal/queue/scheduling_queue_test.go index aa634a96f0c..7b324976574 100644 --- a/pkg/scheduler/internal/queue/scheduling_queue_test.go +++ b/pkg/scheduler/internal/queue/scheduling_queue_test.go @@ -40,6 +40,7 @@ import ( schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo" nodeinfosnapshot "k8s.io/kubernetes/pkg/scheduler/nodeinfo/snapshot" "k8s.io/kubernetes/pkg/scheduler/util" + "k8s.io/kubernetes/pkg/scheduler/volumebinder" ) const queueMetricMetadata = ` @@ -258,6 +259,10 @@ func (*fakeFramework) SnapshotSharedLister() schedulerlisters.SharedLister { return nil } +func (*fakeFramework) VolumeBinder() *volumebinder.VolumeBinder { + return nil +} + func TestPriorityQueue_AddWithReversePriorityLessFunc(t *testing.T) { q := createAndRunPriorityQueue(&fakeFramework{}) if err := q.Add(&medPriorityPod); err != nil {