Skip to content

Commit a830886

Browse files
refactor: share EndpointPool construction logic
Signed-off-by: Varad <[email protected]>
1 parent c3c2f89 commit a830886

File tree

3 files changed

+54
-13
lines changed

3 files changed

+54
-13
lines changed

cmd/epp/runner/runner.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@ import (
3636
uberzap "go.uber.org/zap"
3737
"google.golang.org/grpc"
3838
healthPb "google.golang.org/grpc/health/grpc_health_v1"
39-
"k8s.io/apimachinery/pkg/labels"
4039
"k8s.io/apimachinery/pkg/runtime/schema"
4140
"k8s.io/apimachinery/pkg/types"
4241
"k8s.io/client-go/rest"
@@ -350,18 +349,15 @@ func (r *Runner) Run(ctx context.Context) error {
350349

351350
func setupDatastore(ctx context.Context, epFactory datalayer.EndpointFactory, modelServerMetricsPort int32,
352351
startCrdReconcilers bool, namespace, name, endpointSelector string, endpointTargetPorts []int) (datastore.Datastore, error) {
352+
353353
if startCrdReconcilers {
354354
return datastore.NewDatastore(ctx, epFactory, modelServerMetricsPort), nil
355355
} else {
356-
endpointPool := datalayer.NewEndpointPool(namespace, name)
357-
labelsMap, err := labels.ConvertSelectorToLabelsMap(endpointSelector)
356+
endpointPool, err := runserver.NewEndpointPoolFromOptions(namespace, name, endpointSelector, endpointTargetPorts)
358357
if err != nil {
359-
setupLog.Error(err, "Failed to parse flag %q with error: %w", "endpoint-selector", err)
358+
setupLog.Error(err, "Failed to construct endpoint pool from options")
360359
return nil, err
361360
}
362-
endpointPool.Selector = labelsMap
363-
endpointPool.TargetPorts = append(endpointPool.TargetPorts, endpointTargetPorts...)
364-
365361
endpointPoolOption := datastore.WithEndpointPool(endpointPool)
366362
return datastore.NewDatastore(ctx, epFactory, modelServerMetricsPort, endpointPoolOption), nil
367363
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package server
2+
3+
import (
4+
"errors"
5+
"fmt"
6+
7+
"k8s.io/apimachinery/pkg/labels"
8+
9+
"sigs.k8s.io/gateway-api-inference-extension/pkg/epp/datalayer"
10+
)
11+
12+
// NewEndpointPoolFromOptions constructs an EndpointPool from standalone options.
13+
// This is shared between the production runner and standalone integration tests.
14+
func NewEndpointPoolFromOptions(
15+
namespace string,
16+
name string,
17+
endpointSelector string,
18+
endpointTargetPorts []int,
19+
) (*datalayer.EndpointPool, error) {
20+
21+
if namespace == "" {
22+
return nil, errors.New("namespace must not be empty")
23+
}
24+
if name == "" {
25+
return nil, errors.New("name must not be empty")
26+
}
27+
if endpointSelector == "" {
28+
return nil, errors.New("endpoint selector must not be empty")
29+
}
30+
if len(endpointTargetPorts) == 0 {
31+
return nil, errors.New("endpoint target ports must not be empty")
32+
}
33+
34+
selectorMap, err := labels.ConvertSelectorToLabelsMap(endpointSelector)
35+
if err != nil {
36+
return nil, fmt.Errorf("failed to parse endpoint selector %q: %w", endpointSelector, err)
37+
}
38+
39+
pool := datalayer.NewEndpointPool(namespace, name)
40+
pool.Selector = selectorMap
41+
pool.TargetPorts = append(pool.TargetPorts, endpointTargetPorts...)
42+
43+
return pool, nil
44+
}

test/integration/epp/harness.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -180,12 +180,13 @@ func NewTestHarness(t *testing.T, ctx context.Context, opts ...HarnessOption) *T
180180
// Disable CRD watching for Standalone mode.
181181
runner.ControllerCfg = server.NewControllerConfig(false)
182182

183-
// Inject static Endpoint Pool.
184-
// This replicates the manual pool construction that happens in runner.go CLI parsing.
185-
// TODO(#2174): Refactor this to share logic with runner.go.
186-
endpointPool := datalayer.NewEndpointPool(nsName, testPoolName)
187-
endpointPool.Selector = map[string]string{"app": testPoolName}
188-
endpointPool.TargetPorts = []int{epptestutil.DefaultTestPort}
183+
endpointPool, err := server.NewEndpointPoolFromOptions(
184+
nsName,
185+
testPoolName,
186+
"app="+testPoolName,
187+
[]int{epptestutil.DefaultTestPort},
188+
)
189+
require.NoError(t, err)
189190

190191
runner.Datastore = datastore.NewDatastore(ctx, pmf, 0, datastore.WithEndpointPool(endpointPool))
191192
} else {

0 commit comments

Comments
 (0)