diff --git a/pkg/scheduler/scheduler.go b/pkg/scheduler/scheduler.go index 4e1d522145c..c4865d1195f 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 d126204ada2..e3e1d017dc5 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" @@ -201,6 +202,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) {