Skip to content

Commit 8007dfd

Browse files
fix: dedup candidate namespaces in getObjectsForGateway (#2304)
1 parent bcfaf10 commit 8007dfd

2 files changed

Lines changed: 35 additions & 1 deletion

File tree

internal/controller/gateway.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1148,8 +1148,14 @@ func (c *GatewayController) getObjectsForGateway(ctx context.Context, gw *gwapiv
11481148
"%s=%s,%s=%s", egOwningGatewayNameLabel, gw.Name, egOwningGatewayNamespaceLabel, gw.Namespace,
11491149
)}
11501150

1151+
candidateNamespaces := make([]string, 1, 2)
1152+
candidateNamespaces[0] = gw.Namespace
1153+
if c.envoyGatewayNamespace != gw.Namespace {
1154+
candidateNamespaces = append(candidateNamespaces, c.envoyGatewayNamespace)
1155+
}
1156+
11511157
var distinctNamespaces []string
1152-
for _, ns := range []string{gw.Namespace, c.envoyGatewayNamespace} {
1158+
for _, ns := range candidateNamespaces {
11531159
var ps *corev1.PodList
11541160
ps, err = c.kube.CoreV1().Pods(ns).List(ctx, listOption)
11551161
if err != nil {

internal/controller/gateway_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2837,3 +2837,31 @@ func TestGatewayController_getObjectsForGatewayNamespaceInconsistency(t *testing
28372837
require.Error(t, err)
28382838
require.Contains(t, err.Error(), "found gateway-labeled objects in multiple namespaces")
28392839
}
2840+
2841+
func TestGatewayController_getObjectsForGatewaySameNamespace(t *testing.T) {
2842+
const gwName, ns = "gw", "shared"
2843+
labels := map[string]string{
2844+
egOwningGatewayNameLabel: gwName,
2845+
egOwningGatewayNamespaceLabel: ns,
2846+
}
2847+
gw := &gwapiv1.Gateway{ObjectMeta: metav1.ObjectMeta{Name: gwName, Namespace: ns}}
2848+
2849+
kube := fake2.NewClientset()
2850+
c := NewGatewayController(requireNewFakeClientWithIndexes(t), kube, ctrl.Log, ns,
2851+
"docker.io/envoyproxy/ai-gateway-extproc:latest", "info", false, nil, true)
2852+
2853+
_, err := kube.CoreV1().Pods(ns).Create(t.Context(), &corev1.Pod{
2854+
ObjectMeta: metav1.ObjectMeta{Name: "pod-1", Namespace: ns, Labels: labels},
2855+
}, metav1.CreateOptions{})
2856+
require.NoError(t, err)
2857+
_, err = kube.AppsV1().Deployments(ns).Create(t.Context(), &appsv1.Deployment{
2858+
ObjectMeta: metav1.ObjectMeta{Name: "dep-1", Namespace: ns, Labels: labels},
2859+
}, metav1.CreateOptions{})
2860+
require.NoError(t, err)
2861+
2862+
namespace, pods, deployments, _, err := c.getObjectsForGateway(t.Context(), gw)
2863+
require.NoError(t, err)
2864+
require.Equal(t, ns, namespace)
2865+
require.Len(t, pods, 1)
2866+
require.Len(t, deployments, 1)
2867+
}

0 commit comments

Comments
 (0)