NET-6943 - Replace usage of deprecated Envoy field envoy.config.router.v3.WeightedCluster.total_weight. (#20011)

This commit is contained in:
John Murret 2023-12-22 12:49:44 -07:00 committed by GitHub
parent 90cd56c5c3
commit 2f335113f8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 20 additions and 49 deletions

3
.changelog/20011.txt Normal file
View File

@ -0,0 +1,3 @@
```release-note:improvement
connect: replace usage of deprecated Envoy field `envoy.config.router.v3.WeightedCluster.total_weight`.
```

View File

@ -17,16 +17,14 @@ import (
"golang.org/x/exp/maps" "golang.org/x/exp/maps"
"golang.org/x/exp/slices" "golang.org/x/exp/slices"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/types/known/durationpb"
"google.golang.org/protobuf/types/known/wrapperspb"
"github.com/hashicorp/consul/agent/connect" "github.com/hashicorp/consul/agent/connect"
"github.com/hashicorp/consul/agent/consul/discoverychain" "github.com/hashicorp/consul/agent/consul/discoverychain"
"github.com/hashicorp/consul/agent/proxycfg" "github.com/hashicorp/consul/agent/proxycfg"
"github.com/hashicorp/consul/agent/structs" "github.com/hashicorp/consul/agent/structs"
"github.com/hashicorp/consul/agent/xds/config" "github.com/hashicorp/consul/agent/xds/config"
"github.com/hashicorp/consul/agent/xds/response" "github.com/hashicorp/consul/agent/xds/response"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/types/known/durationpb"
) )
// routesFromSnapshot returns the xDS API representation of the "routes" in the // routesFromSnapshot returns the xDS API representation of the "routes" in the
@ -1016,7 +1014,6 @@ func (s *ResourceGenerator) makeRouteActionForSplitter(
forMeshGateway bool, forMeshGateway bool,
) (*envoy_route_v3.Route_Route, error) { ) (*envoy_route_v3.Route_Route, error) {
clusters := make([]*envoy_route_v3.WeightedCluster_ClusterWeight, 0, len(splits)) clusters := make([]*envoy_route_v3.WeightedCluster_ClusterWeight, 0, len(splits))
totalWeight := 0
for _, split := range splits { for _, split := range splits {
nextNode := chain.Nodes[split.NextNode] nextNode := chain.Nodes[split.NextNode]
@ -1033,7 +1030,6 @@ func (s *ResourceGenerator) makeRouteActionForSplitter(
// The smallest representable weight is 1/10000 or .01% but envoy // The smallest representable weight is 1/10000 or .01% but envoy
// deals with integers so scale everything up by 100x. // deals with integers so scale everything up by 100x.
weight := int(split.Weight * 100) weight := int(split.Weight * 100)
totalWeight += weight
cw := &envoy_route_v3.WeightedCluster_ClusterWeight{ cw := &envoy_route_v3.WeightedCluster_ClusterWeight{
Weight: response.MakeUint32Value(weight), Weight: response.MakeUint32Value(weight),
Name: clusterName, Name: clusterName,
@ -1049,18 +1045,11 @@ func (s *ResourceGenerator) makeRouteActionForSplitter(
return nil, fmt.Errorf("number of clusters in splitter must be > 0; got %d", len(clusters)) return nil, fmt.Errorf("number of clusters in splitter must be > 0; got %d", len(clusters))
} }
var envoyWeightScale *wrapperspb.UInt32Value
if totalWeight == 10000 {
envoyWeightScale = response.MakeUint32Value(10000)
}
return &envoy_route_v3.Route_Route{ return &envoy_route_v3.Route_Route{
Route: &envoy_route_v3.RouteAction{ Route: &envoy_route_v3.RouteAction{
ClusterSpecifier: &envoy_route_v3.RouteAction_WeightedClusters{ ClusterSpecifier: &envoy_route_v3.RouteAction_WeightedClusters{
WeightedClusters: &envoy_route_v3.WeightedCluster{ WeightedClusters: &envoy_route_v3.WeightedCluster{
Clusters: clusters, Clusters: clusters,
// this field is deprecated, and we should get the desired behavior with the front-end validation
TotalWeight: envoyWeightScale, // scaled up 100%
}, },
}, },
}, },

View File

@ -28,8 +28,7 @@
"name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", "name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul",
"weight": 5000 "weight": 5000
} }
], ]
"totalWeight": 10000
} }
} }
} }

View File

@ -57,8 +57,7 @@
"name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul",
"weight": 450 "weight": 450
} }
], ]
"totalWeight": 10000
} }
} }
} }

View File

@ -360,8 +360,7 @@
"name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul",
"weight": 50 "weight": 50
} }
], ]
"totalWeight": 10000
} }
} }
}, },

View File

@ -125,8 +125,7 @@
], ],
"weight": 50 "weight": 50
} }
], ]
"totalWeight": 10000
} }
} }
} }

View File

@ -58,8 +58,7 @@
"name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", "name": "db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul",
"weight": 450 "weight": 450
} }
], ]
"totalWeight": 10000
} }
} }
} }

View File

@ -28,8 +28,7 @@
"name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", "name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul",
"weight": 5000 "weight": 5000
} }
], ]
"totalWeight": 10000
} }
} }
} }

View File

@ -399,8 +399,7 @@
"name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul",
"weight": 50 "weight": 50
} }
], ]
"totalWeight": 10000
} }
} }
}, },

View File

@ -361,8 +361,7 @@
"name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul",
"weight": 50 "weight": 50
} }
], ]
"totalWeight": 10000
} }
} }
}, },

View File

@ -126,8 +126,7 @@
], ],
"weight": 50 "weight": 50
} }
], ]
"totalWeight": 10000
} }
} }
} }

View File

@ -27,8 +27,7 @@
"name": "exported~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", "name": "exported~db.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul",
"weight": 4000 "weight": 4000
} }
], ]
"totalWeight": 10000
} }
} }
}, },

View File

@ -27,8 +27,7 @@
"name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul", "name": "v2.db.default.dc2.internal.11111111-2222-3333-4444-555555555555.consul",
"weight": 5000 "weight": 5000
} }
], ]
"totalWeight": 10000
} }
} }
} }

View File

@ -361,8 +361,7 @@
"name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul",
"weight": 50 "weight": 50
} }
], ]
"totalWeight": 10000
} }
} }
}, },

View File

@ -360,8 +360,7 @@
"name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul", "name": "lil-bit-side.default.dc1.internal.11111111-2222-3333-4444-555555555555.consul",
"weight": 50 "weight": 50
} }
], ]
"totalWeight": 10000
} }
} }
}, },

View File

@ -264,22 +264,15 @@ func (pr *ProxyResources) makeEnvoyRouteActionFromProxystateRouteDestination(psR
case *pbproxystate.RouteDestination_WeightedClusters: case *pbproxystate.RouteDestination_WeightedClusters:
psWeightedClusters := psRouteDestination.GetWeightedClusters() psWeightedClusters := psRouteDestination.GetWeightedClusters()
envoyClusters := make([]*envoy_route_v3.WeightedCluster_ClusterWeight, 0, len(psWeightedClusters.GetClusters())) envoyClusters := make([]*envoy_route_v3.WeightedCluster_ClusterWeight, 0, len(psWeightedClusters.GetClusters()))
totalWeight := 0
for _, psCluster := range psWeightedClusters.GetClusters() { for _, psCluster := range psWeightedClusters.GetClusters() {
pr.addEnvoyClustersAndEndpointsToEnvoyResources(psCluster.Name) pr.addEnvoyClustersAndEndpointsToEnvoyResources(psCluster.Name)
totalWeight += int(psCluster.Weight.GetValue())
envoyClusters = append(envoyClusters, makeEnvoyClusterWeightFromProxystateWeightedCluster(psCluster)) envoyClusters = append(envoyClusters, makeEnvoyClusterWeightFromProxystateWeightedCluster(psCluster))
} }
var envoyWeightScale *wrapperspb.UInt32Value
if totalWeight == 10000 {
envoyWeightScale = response.MakeUint32Value(10000)
}
envoyRouteRoute.Route.ClusterSpecifier = &envoy_route_v3.RouteAction_WeightedClusters{ envoyRouteRoute.Route.ClusterSpecifier = &envoy_route_v3.RouteAction_WeightedClusters{
WeightedClusters: &envoy_route_v3.WeightedCluster{ WeightedClusters: &envoy_route_v3.WeightedCluster{
Clusters: envoyClusters, Clusters: envoyClusters,
TotalWeight: envoyWeightScale,
}, },
} }
default: default:

View File

@ -174,8 +174,7 @@
"name": "backend2.default.dc1.internal.domain.consul", "name": "backend2.default.dc1.internal.domain.consul",
"weight": 5000 "weight": 5000
} }
], ]
"total_weight": 10000
} }
} }
} }