From b7a0b1abf9c6ebfc987b954848653640338572b3 Mon Sep 17 00:00:00 2001 From: learner0810 Date: Fri, 10 Oct 2025 14:12:07 +0800 Subject: [PATCH] fix-multiple-scheduling-profiles --- pkg/epp/config/loader/configloader.go | 5 +++++ pkg/epp/config/loader/configloader_test.go | 25 ++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/pkg/epp/config/loader/configloader.go b/pkg/epp/config/loader/configloader.go index 8e80b037d..865eae28b 100644 --- a/pkg/epp/config/loader/configloader.go +++ b/pkg/epp/config/loader/configloader.go @@ -31,6 +31,7 @@ import ( "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/plugins" "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling" "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/framework" + "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/framework/plugins/profile" ) var scheme = runtime.NewScheme() @@ -113,6 +114,10 @@ func loadSchedulerConfig(configProfiles []configapi.SchedulingProfile, handle pl return nil, errors.New("no profile handler was specified") } + if profileHandler.TypedName().Type == profile.SingleProfileHandlerType && len(profiles) > 1 { + return nil, errors.New("single profile handler is intended to be used with a single profile, but multiple profiles were specified") + } + return scheduling.NewSchedulerConfig(profileHandler, profiles), nil } diff --git a/pkg/epp/config/loader/configloader_test.go b/pkg/epp/config/loader/configloader_test.go index b0b0741c1..9e428c277 100644 --- a/pkg/epp/config/loader/configloader_test.go +++ b/pkg/epp/config/loader/configloader_test.go @@ -420,6 +420,11 @@ func TestLoadConfig(t *testing.T) { configText: errorNoProfileHandlersText, wantErr: true, }, + { + name: "errorMultiProfilesUseSingleProfileHandler", + configText: errorMultiProfilesUseSingleProfileHandlerText, + wantErr: true, + }, } registerNeededPlgugins() @@ -890,3 +895,23 @@ schedulingProfiles: plugins: - pluginRef: maxScore ` + +// multiple profiles using SingleProfileHandler +// +//nolint:dupword +const errorMultiProfilesUseSingleProfileHandlerText = ` +apiVersion: inference.networking.x-k8s.io/v1alpha1 +kind: EndpointPickerConfig +plugins: +- name: profileHandler + type: single-profile-handler +- name: maxScore + type: max-score-picker +schedulingProfiles: +- name: default + plugins: + - pluginRef: maxScore +- name: prof2 + plugins: + - pluginRef: maxScore +`