Skip to content

Commit c91a10c

Browse files
committed
more flow control
1 parent 2387722 commit c91a10c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+4188
-2363
lines changed

pkg/epp/flowcontroller/config.go

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,14 @@ import (
2020
"fmt"
2121
"time"
2222

23+
"github.com/go-logr/logr"
2324
"sigs.k8s.io/controller-runtime/pkg/log"
2425
v1alpha2 "sigs.k8s.io/gateway-api-inference-extension/api/v1alpha2"
26+
interd "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/flowcontroller/plugins/dispatch/interflow"
27+
intrad "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/flowcontroller/plugins/dispatch/intraflow"
28+
interp "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/flowcontroller/plugins/preemption/interflow"
29+
intrap "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/flowcontroller/plugins/preemption/intraflow"
30+
"sigs.k8s.io/gateway-api-inference-extension/pkg/epp/flowcontroller/plugins/queue"
2531
"sigs.k8s.io/gateway-api-inference-extension/pkg/epp/flowcontroller/types"
2632
envutil "sigs.k8s.io/gateway-api-inference-extension/pkg/epp/util/env"
2733
)
@@ -99,6 +105,49 @@ type FlowControllerConfig struct {
99105
CustomFairnessPolicies map[v1alpha2.Criticality]types.FairnessPolicy
100106
// TODO: Add CustomPreemptionStrategies map[v1alpha2.Criticality]types.PreemptionStrategy
101107
// if similar custom injection is desired for preemption strategies.
108+
109+
PriorityBands []PriorityBandConfig
110+
}
111+
112+
// PriorityBandConfig defines the configuration for a single priority band.
113+
type PriorityBandConfig struct {
114+
PriorityLevel uint
115+
PriorityName string
116+
InterFlowDispatchPolicy interd.RegisteredInterFlowDispatchPolicyName
117+
InterFlowPreemptionPolicy interp.RegisteredInterFlowPreemptionPolicyName
118+
IntraFlowDispatchPolicy intrad.RegisteredIntraFlowDispatchPolicyName
119+
IntraFlowPreemptionPolicy intrap.RegisteredIntraFlowPreemptionPolicyName
120+
QueueType queue.RegisteredQueueName
121+
// TODO: Add MaxBytes for this band here, replacing parts of MaxBytesPerCriticality.
122+
}
123+
124+
// validateAndApplyDefaults validates and applies defaults for a single PriorityBandConfig.
125+
func (pbc *PriorityBandConfig) validateAndApplyDefaults(logger logr.Logger) error {
126+
if pbc.PriorityName == "" {
127+
return fmt.Errorf("PriorityName cannot be empty for priority level %d", pbc.PriorityLevel)
128+
}
129+
bandLogger := logger.WithValues("priority", pbc.PriorityLevel, "priorityName", pbc.PriorityName)
130+
if pbc.InterFlowDispatchPolicy == "" {
131+
bandLogger.V(1).Info("InterFlowDispatchPolicy is empty, using default", "defaultPolicy", interd.BestHeadPriorityScoreDispatchPolicyName)
132+
pbc.InterFlowDispatchPolicy = interd.BestHeadPriorityScoreDispatchPolicyName
133+
}
134+
if pbc.InterFlowPreemptionPolicy == "" {
135+
bandLogger.V(1).Info("InterFlowPreemptionPolicy is empty, using default", "defaultPolicy", interp.RoundRobinPreemptionPolicyName)
136+
pbc.InterFlowPreemptionPolicy = interp.RoundRobinPreemptionPolicyName
137+
}
138+
if pbc.IntraFlowDispatchPolicy == "" {
139+
bandLogger.V(1).Info("IntraFlowDispatchPolicy is empty, using default", "defaultPolicy", intrad.FCFSDispatchPolicyName)
140+
pbc.IntraFlowDispatchPolicy = intrad.FCFSDispatchPolicyName
141+
}
142+
if pbc.IntraFlowPreemptionPolicy == "" {
143+
bandLogger.V(1).Info("IntraFlowPreemptionPolicy is empty, using default", "defaultPolicy", intrap.TailPreemptionPolicyName)
144+
pbc.IntraFlowPreemptionPolicy = intrap.TailPreemptionPolicyName
145+
}
146+
if pbc.QueueType == "" {
147+
bandLogger.V(1).Info("QueueType is empty, using default", "defaultQueue", queue.ListQueueName)
148+
pbc.QueueType = queue.ListQueueName
149+
}
150+
return nil
102151
}
103152

104153
// validateAndApplyDefaults validates the provided config and assigns default
@@ -144,6 +193,15 @@ func (cfg *FlowControllerConfig) validateAndApplyDefaults() error {
144193
}
145194
}
146195

196+
// Validate and apply defaults for each priority band.
197+
// This assumes PriorityBands is the source of truth for band-specific policies.
198+
// The top-level policy strings might become deprecated or used as global defaults if a band doesn't specify.
199+
logger := log.Log.WithName("flow-controller-config-validation") // Use a local logger for this phase
200+
for i := range cfg.PriorityBands {
201+
if err := cfg.PriorityBands[i].validateAndApplyDefaults(logger); err != nil {
202+
return fmt.Errorf("invalid config for priority band %s (level %d): %w", cfg.PriorityBands[i].PriorityName, cfg.PriorityBands[i].PriorityLevel, err)
203+
}
204+
}
147205
return nil
148206
}
149207

0 commit comments

Comments
 (0)