NET-2903 Normalize weight for http routes (#16512)

* NET-2903 Normalize weight for http routes

* Update website/content/docs/connect/gateways/api-gateway/configuration/http-route.mdx

Co-authored-by: trujillo-adam <47586768+trujillo-adam@users.noreply.github.com>
This commit is contained in:
Melisa Griffin 2023-03-03 16:39:59 -05:00 committed by GitHub
parent b089f93292
commit 71379b9621
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 30 additions and 2 deletions

3
.changelog/16512.txt Normal file
View File

@ -0,0 +1,3 @@
```release-note:bug
gateways: fix HTTPRoute bug where service weights could be less than or equal to 0 and result in a downstream envoy protocol error
```

View File

@ -100,7 +100,9 @@ func (e *HTTPRouteConfigEntry) Normalize() error {
func normalizeHTTPService(service HTTPService) HTTPService { func normalizeHTTPService(service HTTPService) HTTPService {
service.EnterpriseMeta.Normalize() service.EnterpriseMeta.Normalize()
if service.Weight <= 0 {
service.Weight = 1
}
return service return service
} }

View File

@ -262,6 +262,28 @@ func TestHTTPRoute(t *testing.T) {
}}, }},
}, },
}, },
"rule normalizes service weight": {
entry: &HTTPRouteConfigEntry{
Kind: HTTPRoute,
Name: "route-one",
Rules: []HTTPRouteRule{{
Services: []HTTPService{
{
Name: "test",
Weight: 0,
},
{
Name: "test2",
Weight: -1,
}},
}},
},
check: func(t *testing.T, entry ConfigEntry) {
route := entry.(*HTTPRouteConfigEntry)
require.Equal(t, 1, route.Rules[0].Services[0].Weight)
require.Equal(t, 1, route.Rules[0].Services[1].Weight)
},
},
} }
testConfigEntryNormalizeAndValidate(t, cases) testConfigEntryNormalizeAndValidate(t, cases)
} }

View File

@ -630,7 +630,8 @@ Specifies the Enterprise [admin partition](/consul/docs/enterprise/admin-partiti
### `Rules[].Services[].Weight` ### `Rules[].Services[].Weight`
Specifies the proportion of requests forwarded to the specified service. The Specifies the proportion of requests forwarded to the specified service. If no weight is specified, or if the specified
weight is set to less than or equal to `0`, the weight is normalized to `1`. The
proportion is determined by dividing the value of the weight by the sum of all proportion is determined by dividing the value of the weight by the sum of all
weights in the service list. For non-zero values, there may be some deviation weights in the service list. For non-zero values, there may be some deviation
from the exact proportion depending on the precision an implementation from the exact proportion depending on the precision an implementation