Skip to content

Commit 958ef7a

Browse files
authored
move ordering gateway-api resources to provider (#6695)
1 parent 406537f commit 958ef7a

File tree

54 files changed

+1557
-1509
lines changed

Some content is hidden

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

54 files changed

+1557
-1509
lines changed

internal/cmd/egctl/translate_test.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import (
2222
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2323
"sigs.k8s.io/yaml"
2424

25-
"github.com/envoyproxy/gateway/internal/gatewayapi/resource"
2625
"github.com/envoyproxy/gateway/internal/utils/field"
2726
"github.com/envoyproxy/gateway/internal/utils/file"
2827
"github.com/envoyproxy/gateway/internal/utils/test"
@@ -377,7 +376,6 @@ func TestTranslate(t *testing.T) {
377376

378377
opts := []cmp.Option{
379378
cmpopts.IgnoreFields(metav1.Condition{}, "LastTransitionTime"),
380-
cmpopts.IgnoreFields(resource.Resources{}, "serviceMap"),
381379
}
382380

383381
require.Empty(t, cmp.Diff(want, got, opts...))

internal/gatewayapi/backendtrafficpolicy.go

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,19 +42,7 @@ func (t *Translator) ProcessBackendTrafficPolicies(resources *resource.Resources
4242
res := make([]*egv1a1.BackendTrafficPolicy, 0, len(resources.BackendTrafficPolicies))
4343

4444
backendTrafficPolicies := resources.BackendTrafficPolicies
45-
46-
// Initially, backendTrafficPolicies sort by creation timestamp
47-
// or sort alphabetically by “{namespace}/{name}” if multiple policies share same timestamp.
48-
sort.Slice(backendTrafficPolicies, func(i, j int) bool {
49-
if backendTrafficPolicies[i].CreationTimestamp.Equal(&(backendTrafficPolicies[j].CreationTimestamp)) {
50-
policyKeyI := fmt.Sprintf("%s/%s", backendTrafficPolicies[i].Namespace, backendTrafficPolicies[i].Name)
51-
policyKeyJ := fmt.Sprintf("%s/%s", backendTrafficPolicies[j].Namespace, backendTrafficPolicies[j].Name)
52-
return policyKeyI < policyKeyJ
53-
}
54-
// Not identical CreationTimestamps
55-
56-
return backendTrafficPolicies[i].CreationTimestamp.Before(&(backendTrafficPolicies[j].CreationTimestamp))
57-
})
45+
// BackendTrafficPolicies are already sorted by the provider layer
5846

5947
// First build a map out of the routes and gateways for faster lookup since users might have thousands of routes or more.
6048
routeMap := map[policyTargetRouteKey]*policyRouteTargetContext{}

internal/gatewayapi/clienttrafficpolicy.go

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,7 @@ func (t *Translator) ProcessClientTrafficPolicies(
4545
var res []*egv1a1.ClientTrafficPolicy
4646

4747
clientTrafficPolicies := resources.ClientTrafficPolicies
48-
49-
// Initially, clientTrafficPolicies sort by creation timestamp
50-
// or sort alphabetically by “{namespace}/{name}” if multiple policies share same timestamp.
51-
sort.Slice(clientTrafficPolicies, func(i, j int) bool {
52-
if clientTrafficPolicies[i].CreationTimestamp.Equal(&(clientTrafficPolicies[j].CreationTimestamp)) {
53-
policyKeyI := fmt.Sprintf("%s/%s", clientTrafficPolicies[i].Namespace, clientTrafficPolicies[i].Name)
54-
policyKeyJ := fmt.Sprintf("%s/%s", clientTrafficPolicies[j].Namespace, clientTrafficPolicies[j].Name)
55-
return policyKeyI < policyKeyJ
56-
}
57-
// Not identical CreationTimestamps
58-
59-
return clientTrafficPolicies[i].CreationTimestamp.Before(&(clientTrafficPolicies[j].CreationTimestamp))
60-
})
48+
// ClientTrafficPolicies are already sorted by the provider layer
6149

6250
policyMap := make(map[types.NamespacedName]sets.Set[string])
6351

internal/gatewayapi/envoyextensionpolicy.go

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -42,19 +42,7 @@ func (t *Translator) ProcessEnvoyExtensionPolicies(envoyExtensionPolicies []*egv
4242
xdsIR resource.XdsIRMap,
4343
) []*egv1a1.EnvoyExtensionPolicy {
4444
var res []*egv1a1.EnvoyExtensionPolicy
45-
46-
// Initially, policies sort by creation timestamp
47-
// or sort alphabetically by “{namespace}/{name}” if multiple gateways share same timestamp.
48-
sort.Slice(envoyExtensionPolicies, func(i, j int) bool {
49-
if envoyExtensionPolicies[i].CreationTimestamp.Equal(&(envoyExtensionPolicies[j].CreationTimestamp)) {
50-
policyKeyI := fmt.Sprintf("%s/%s", envoyExtensionPolicies[i].Namespace, envoyExtensionPolicies[i].Name)
51-
policyKeyJ := fmt.Sprintf("%s/%s", envoyExtensionPolicies[j].Namespace, envoyExtensionPolicies[j].Name)
52-
return policyKeyI < policyKeyJ
53-
}
54-
// Not identical CreationTimestamps
55-
56-
return envoyExtensionPolicies[i].CreationTimestamp.Before(&(envoyExtensionPolicies[j].CreationTimestamp))
57-
})
45+
// EnvoyExtensionPolicies are already sorted by the provider layer
5846

5947
// First build a map out of the routes and gateways for faster lookup since users might have thousands of routes or more.
6048
routeMap := map[policyTargetRouteKey]*policyRouteTargetContext{}

internal/gatewayapi/envoypatchpolicy.go

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ package gatewayapi
77

88
import (
99
"fmt"
10-
"sort"
1110

1211
"k8s.io/apimachinery/pkg/types"
1312
gwapiv1 "sigs.k8s.io/gateway-api/apis/v1"
@@ -20,22 +19,7 @@ import (
2019
)
2120

2221
func (t *Translator) ProcessEnvoyPatchPolicies(envoyPatchPolicies []*egv1a1.EnvoyPatchPolicy, xdsIR resource.XdsIRMap) {
23-
// Initially, envoyPatchPolicies sort by priority
24-
// if the priority is equal, they sort based on creation timestamp
25-
// or sort alphabetically by “{namespace}/{name}” if multiple policies share same timestamp.
26-
sort.Slice(envoyPatchPolicies, func(i, j int) bool {
27-
if envoyPatchPolicies[i].Spec.Priority == envoyPatchPolicies[j].Spec.Priority {
28-
if envoyPatchPolicies[i].CreationTimestamp.Equal(&(envoyPatchPolicies[j].CreationTimestamp)) {
29-
policyKeyI := fmt.Sprintf("%s/%s", envoyPatchPolicies[i].Namespace, envoyPatchPolicies[i].Name)
30-
policyKeyJ := fmt.Sprintf("%s/%s", envoyPatchPolicies[j].Namespace, envoyPatchPolicies[j].Name)
31-
return policyKeyI < policyKeyJ
32-
}
33-
// Not identical CreationTimestamps
34-
return envoyPatchPolicies[i].CreationTimestamp.Before(&(envoyPatchPolicies[j].CreationTimestamp))
35-
}
36-
// Not identical Priorities
37-
return envoyPatchPolicies[i].Spec.Priority < envoyPatchPolicies[j].Spec.Priority
38-
})
22+
// EnvoyPatchPolicies are already sorted by the provider layer (priority, then timestamp, then name)
3923

4024
for _, policy := range envoyPatchPolicies {
4125
var (

internal/gatewayapi/extensionserverpolicy.go

Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import (
99
"encoding/json"
1010
"errors"
1111
"fmt"
12-
"sort"
1312
"strings"
1413

1514
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -28,21 +27,7 @@ func (t *Translator) ProcessExtensionServerPolicies(policies []unstructured.Unst
2827
xdsIR resource.XdsIRMap,
2928
) ([]unstructured.Unstructured, error) {
3029
res := []unstructured.Unstructured{}
31-
32-
// Initially, policies sort by creation timestamp
33-
// or sort alphabetically by “{namespace}/{name}” if multiple gateways share same timestamp.
34-
sort.Slice(policies, func(i, j int) bool {
35-
tsI := policies[i].GetCreationTimestamp()
36-
tsJ := policies[j].GetCreationTimestamp()
37-
if tsI.Equal(&tsJ) {
38-
policyKeyI := fmt.Sprintf("%s/%s", policies[i].GetNamespace(), policies[i].GetName())
39-
policyKeyJ := fmt.Sprintf("%s/%s", policies[j].GetNamespace(), policies[j].GetName())
40-
return policyKeyI < policyKeyJ
41-
}
42-
// Not identical CreationTimestamps
43-
44-
return tsI.Before(&tsJ)
45-
})
30+
// ExtensionServerPolicies are already sorted by the provider layer
4631

4732
// First build a map out of the gateways for faster lookup
4833
gatewayMap := map[types.NamespacedName]*policyGatewayTargetContext{}

internal/gatewayapi/resource/load.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,13 @@ func LoadResourcesFromYAMLBytes(yamlBytes []byte, addMissingResources bool) (*Re
4242
return nil, err
4343
}
4444

45+
// Sort to:
46+
// 1. ensure identical resources are not retranslated
47+
// and updates are avoided by the watchable layer
48+
// 2. ensure gateway-api layer receives resources in order
49+
// which impacts translation output
50+
r.Sort()
51+
4552
return r, nil
4653
}
4754

internal/gatewayapi/resource/load_test.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,6 @@ func TestLoadAllSupportedResourcesFromYAMLBytes(t *testing.T) {
6262
mustUnmarshal(t, outFile, want)
6363

6464
opts := []cmp.Option{
65-
cmpopts.IgnoreFields(Resources{}, "serviceMap"),
6665
cmpopts.EquateEmpty(),
6766
}
6867
require.Empty(t, cmp.Diff(want, got, opts...))

0 commit comments

Comments
 (0)