-
Notifications
You must be signed in to change notification settings - Fork 106
Add APIs for the instantiated plugins to the EPP Handle #1039
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
✅ Deploy Preview for gateway-api-inference-extension ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
Hi @shmuelk. Thanks for your PR. I'm waiting for a kubernetes-sigs member to verify that this patch is reasonable to test. If it is, they should reply with Once the patch is verified, the new status will be reflected by the I understand the commands that are listed here. Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. |
@@ -39,7 +39,7 @@ type SchedulerConfig struct { | |||
profiles map[string]*framework.SchedulerProfile | |||
} | |||
|
|||
func LoadSchedulerConfig(configProfiles []v1alpha1.SchedulingProfile, references map[string]plugins.Plugin) (*SchedulerConfig, error) { | |||
func LoadSchedulerConfig(configProfiles []v1alpha1.SchedulingProfile, handle plugins.Handle) (*SchedulerConfig, error) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ideally, I think it would be better if this function (and same one in requestcontrol config) gets out of this package and into a dedicated package for file configuration parsing.
this function is not part of the struct and is a free function. I think it would be better to define a configurationParser struct with receiver functions like LoadSchedulerConfig
.
skipped this comment in previous PR cause it was too big and we had too many comments on it..
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All of the functions in this file are static functions (without a receiver). Why is this so different from NewSchedulerConfig? This just an additional way to create a SchedulerConfig.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
there are no functions other than NewSchedulerConfig :).
the main point I was trying to make is that as we make progress and add more extension points (e.g., in flow control) the code to iterate over the plugins and call some "AddPlugins" or similar function will be duplicated across different places. instead, I think we should have a single package and struct where we handle the file parsing and creation of the relevant configs from it.
this is a matter of decoupling between scheduler package and the configuration parsing.
IMO the scheduler or any other layer shouldn't care about the configuration file and it should get from outside its configuration. Additionally, scheduling package shouldn't have unit-tests to test configuration file parsing and validity.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
All of the configuration loading code has been moved to pkg/epp/common/config/loader
@@ -25,6 +25,7 @@ import ( | |||
"sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/framework/plugins/multi/prefix" | |||
"sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/framework/plugins/picker" | |||
"sigs.k8s.io/gateway-api-inference-extension/pkg/epp/scheduling/framework/plugins/profile" | |||
"sigs.k8s.io/gateway-api-inference-extension/test/utils" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ditto about this file.
nothing in this file is testing SchedulerConfig. this is testing the configuration file parsing and the logic around it.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This file has been merged into config_loader_test.go in the new loader package.
/ok-to-test |
/lgtm |
theConfig, err := config.LoadConfig([]byte(*configText), *configFile) | ||
theConfig, err := loader.LoadConfig([]byte(*configText), *configFile) | ||
if err != nil { | ||
setupLog.Error(err, "Failed to load the configuration") | ||
return err | ||
} | ||
|
||
epp := eppHandle{} | ||
instantiatedPlugins, err := config.LoadPluginReferences(theConfig.Plugins, epp) | ||
epp := newEppHandle() | ||
|
||
err = loader.LoadPluginReferences(theConfig.Plugins, epp) | ||
if err != nil { | ||
setupLog.Error(err, "Failed to instantiate the plugins") | ||
return err | ||
} | ||
|
||
r.schedulerConfig, err = scheduling.LoadSchedulerConfig(theConfig.SchedulingProfiles, instantiatedPlugins) | ||
r.schedulerConfig, err = loader.LoadSchedulerConfig(theConfig.SchedulingProfiles, epp) | ||
if err != nil { | ||
setupLog.Error(err, "Failed to create Scheduler configuration") | ||
return err | ||
} | ||
|
||
// Add requestcontrol plugins | ||
if instantiatedPlugins != nil { | ||
r.requestControlConfig = requestcontrol.LoadRequestControlConfig(instantiatedPlugins) | ||
} | ||
// Add requestControl plugins | ||
r.requestControlConfig.AddPlugins(epp.Plugins().GetAllPlugins()...) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
in the follow up PR you plan to do, can we extract this to a helper function?
something like parseConfigFile
or loadConfigFromFile
or any similar name?
/lgtm |
Signed-off-by: Shmuel Kallner <kallner@il.ibm.com>
Signed-off-by: Shmuel Kallner <kallner@il.ibm.com>
Signed-off-by: Shmuel Kallner <kallner@il.ibm.com>
Signed-off-by: Shmuel Kallner <kallner@il.ibm.com>
Signed-off-by: Shmuel Kallner <kallner@il.ibm.com>
/lgtm Thanks! |
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: nirrozenbaum, shmuelk The full list of commands accepted by this bot can be found here. The pull request process is described here
Needs approval from an approver in each of these files:
Approvers can indicate their approval by writing |
This PR adds a set of APIs for managing the instantiated plugins in the EPP. These APIs include:
Plugin
- returns the named plugin instanceAddPlugin
- Adds a plugin to the set of known plugin instancesGetAllPlugins
- Returns all of the known pluginsGetAllPluginsWithNames
- Returns all of the known plugins with their namesThis PR is the first of two to solve issue #1011 which requires referencing other instantiated plugins.