diff --git a/pkg/scheduler/scheduler.go b/pkg/scheduler/scheduler.go index 3d8afb6277c..2e0dc546b22 100644 --- a/pkg/scheduler/scheduler.go +++ b/pkg/scheduler/scheduler.go @@ -303,7 +303,9 @@ func New(client clientset.Interface, VolumeBinder: volumeBinder, }) } - registry.Merge(options.frameworkOutOfTreeRegistry) + if err := registry.Merge(options.frameworkOutOfTreeRegistry); err != nil { + return nil, err + } snapshot := nodeinfosnapshot.NewEmptySnapshot() diff --git a/pkg/scheduler/scheduler_test.go b/pkg/scheduler/scheduler_test.go index 855ad601a2c..72d177986e8 100644 --- a/pkg/scheduler/scheduler_test.go +++ b/pkg/scheduler/scheduler_test.go @@ -48,6 +48,7 @@ import ( "k8s.io/kubernetes/pkg/scheduler/algorithm/priorities" schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config" "k8s.io/kubernetes/pkg/scheduler/core" + frameworkplugins "k8s.io/kubernetes/pkg/scheduler/framework/plugins" 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" @@ -202,6 +203,32 @@ func TestSchedulerCreation(t *testing.T) { if err != nil { t.Fatalf("Failed to create scheduler: %v", err) } + + // Test case for when a plugin name in frameworkOutOfTreeRegistry already exist in defaultRegistry. + fakeFrameworkPluginName := "" + for name := range frameworkplugins.NewDefaultRegistry(&frameworkplugins.RegistryArgs{}) { + fakeFrameworkPluginName = name + break + } + registryFake := map[string]framework.PluginFactory{ + fakeFrameworkPluginName: func(_ *runtime.Unknown, fh framework.FrameworkHandle) (framework.Plugin, error) { + return nil, nil + }, + } + _, err = New(client, + informerFactory, + NewPodInformer(client, 0), + eventBroadcaster.NewRecorder(scheme.Scheme, "scheduler"), + stopCh, + WithAlgorithmSource(schedulerapi.SchedulerAlgorithmSource{Provider: &testSource}), + WithPodInitialBackoffSeconds(1), + WithPodMaxBackoffSeconds(10), + WithFrameworkOutOfTreeRegistry(registryFake), + ) + + if err == nil { + t.Fatalf("Create scheduler should fail") + } } func TestScheduler(t *testing.T) {