Skip to content

Commit 8bce886

Browse files
Update: Refactor ErrorUtilizationPenalty to use integer type with percentage-based representation in Gateway CRDs, configurations, and tests. Adjust related documentation and ensure backward compatibility.
Signed-off-by: anurag.ag <[email protected]>
1 parent 14d1d59 commit 8bce886

File tree

10 files changed

+290
-73
lines changed

10 files changed

+290
-73
lines changed

internal/gatewayapi/clustersettings.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -362,8 +362,7 @@ func buildLoadBalancer(policy *egv1a1.ClusterSettings) (*ir.LoadBalancer, error)
362362
}
363363
}
364364
if cswrr.ErrorUtilizationPenalty != nil {
365-
v := float32(*cswrr.ErrorUtilizationPenalty) / 100.0
366-
lb.ClientSideWeightedRoundRobin.ErrorUtilizationPenalty = &v
365+
lb.ClientSideWeightedRoundRobin.ErrorUtilizationPenalty = ptr.To(*cswrr.ErrorUtilizationPenalty)
367366
}
368367
if len(cswrr.MetricNamesForComputingUtilization) > 0 {
369368
lb.ClientSideWeightedRoundRobin.MetricNamesForComputingUtilization = append([]string(nil), cswrr.MetricNamesForComputingUtilization...)

internal/gatewayapi/clustersettings_cswrr_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,6 @@ func TestBuildLoadBalancer_ClientSideWeightedRoundRobin(t *testing.T) {
4343
require.Equal(t, ptr.To(metav1.Duration{Duration: 3 * time.Minute}), got.WeightExpirationPeriod)
4444
require.Equal(t, ptr.To(metav1.Duration{Duration: 1 * time.Second}), got.WeightUpdatePeriod)
4545
require.NotNil(t, got.ErrorUtilizationPenalty)
46-
require.InDelta(t, 1.5, *got.ErrorUtilizationPenalty, 0.0001)
46+
require.EqualValues(t, 150, *got.ErrorUtilizationPenalty)
4747
require.Equal(t, []string{"named_metrics.foo", "cpu_utilization"}, got.MetricNamesForComputingUtilization)
4848
}

internal/gatewayapi/testdata/backendtrafficpolicy-with-loadbalancer.out.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -705,7 +705,7 @@ xdsIR:
705705
loadBalancer:
706706
clientSideWeightedRoundRobin:
707707
blackoutPeriod: 10s
708-
errorUtilizationPenalty: 1
708+
errorUtilizationPenalty: 100
709709
metricNamesForComputingUtilization:
710710
- cpu_utilization
711711
weightExpirationPeriod: 1m0s

internal/ir/xds.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2640,7 +2640,7 @@ type ClientSideWeightedRoundRobin struct {
26402640
BlackoutPeriod *metav1.Duration `json:"blackoutPeriod,omitempty" yaml:"blackoutPeriod,omitempty"`
26412641
WeightExpirationPeriod *metav1.Duration `json:"weightExpirationPeriod,omitempty" yaml:"weightExpirationPeriod,omitempty"`
26422642
WeightUpdatePeriod *metav1.Duration `json:"weightUpdatePeriod,omitempty" yaml:"weightUpdatePeriod,omitempty"`
2643-
ErrorUtilizationPenalty *float32 `json:"errorUtilizationPenalty,omitempty" yaml:"errorUtilizationPenalty,omitempty"`
2643+
ErrorUtilizationPenalty *uint32 `json:"errorUtilizationPenalty,omitempty" yaml:"errorUtilizationPenalty,omitempty"`
26442644
MetricNamesForComputingUtilization []string `json:"metricNamesForComputingUtilization,omitempty" yaml:"metricNamesForComputingUtilization,omitempty"`
26452645
}
26462646

internal/ir/zz_generated.deepcopy.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/xds/translator/cluster.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -413,7 +413,7 @@ func buildXdsCluster(args *xdsClusterArgs) (*buildClusterResult, error) {
413413
cswrr.WeightUpdatePeriod = durationpb.New(v.WeightUpdatePeriod.Duration)
414414
}
415415
if v.ErrorUtilizationPenalty != nil {
416-
cswrr.ErrorUtilizationPenalty = wrapperspb.Float(float32(*v.ErrorUtilizationPenalty))
416+
cswrr.ErrorUtilizationPenalty = wrapperspb.Float(float32(*v.ErrorUtilizationPenalty) / 100.0)
417417
}
418418
if len(v.MetricNamesForComputingUtilization) > 0 {
419419
cswrr.MetricNamesForComputingUtilization = append([]string(nil), v.MetricNamesForComputingUtilization...)

internal/xds/translator/testdata/in/xds-ir/load-balancer.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ http:
210210
blackoutPeriod: 30s
211211
weightExpirationPeriod: 60s
212212
weightUpdatePeriod: 10s
213-
errorUtilizationPenalty: 1
213+
errorUtilizationPenalty: 100
214214
metricNamesForComputingUtilization:
215215
- "cpu_utilization"
216216
destination:

test/cel-validation/backendtrafficpolicy_test.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -623,7 +623,7 @@ func TestBackendTrafficPolicyTarget(t *testing.T) {
623623
},
624624
},
625625
{
626-
desc: "cswrr with negative penalty is invalid",
626+
desc: "cswrr with zero penalty is valid",
627627
mutate: func(btp *egv1a1.BackendTrafficPolicy) {
628628
btp.Spec = egv1a1.BackendTrafficPolicySpec{
629629
PolicyTargetReferences: egv1a1.PolicyTargetReferences{
@@ -638,14 +638,12 @@ func TestBackendTrafficPolicyTarget(t *testing.T) {
638638
ClusterSettings: egv1a1.ClusterSettings{
639639
LoadBalancer: &egv1a1.LoadBalancer{
640640
Type: egv1a1.ClientSideWeightedRoundRobinLoadBalancerType,
641-
ClientSideWeightedRoundRobin: &egv1a1.ClientSideWeightedRoundRobin{ErrorUtilizationPenalty: ptr.To[float32](-1)},
641+
ClientSideWeightedRoundRobin: &egv1a1.ClientSideWeightedRoundRobin{ErrorUtilizationPenalty: ptr.To[uint32](0)},
642642
},
643643
},
644644
}
645645
},
646-
wantErrors: []string{
647-
"Invalid value: -1: spec.loadBalancer.clientSideWeightedRoundRobin.errorUtilizationPenalty in body should be greater than or equal to 0",
648-
},
646+
wantErrors: []string{},
649647
},
650648
{
651649
desc: "Using both httpStatus and grpcStatus in abort fault injection",

0 commit comments

Comments
 (0)