Update Go codegen for httproute timeout fields (#11164)

In #11008 I added Go support for the `timeouts` field in the
`HTTPRouteRule` struct. That used Go's built-in `time.Duration` type,
but based on my reading of kubernetes-sigs/gateway-api#2013, we should
instead by using apimachinery's `metav1.Duration` type.

Signed-off-by: Kevin Ingelman <ki@buoyant.io>
This commit is contained in:
Kevin Ingelman 2023-07-24 15:57:53 -07:00 committed by GitHub
parent 25ed8c2960
commit 32831ba501
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 54 additions and 38 deletions

View File

@ -1,10 +1,16 @@
/*
Adapted from https://github.com/kubernetes-sigs/gateway-api/blob/main/apis/v1alpha2/httproute_types.go
Adapted from:
- https://github.com/kubernetes-sigs/gateway-api/blob/main/apis/v1alpha2/httproute_types.go
- https://github.com/kubernetes-sigs/gateway-api/pull/2013
Copyright 2020 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@ -15,8 +21,6 @@ limitations under the License.
package v1beta3
import (
"time"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
gatewayapiv1alpha2 "sigs.k8s.io/gateway-api/apis/v1alpha2"
)
@ -229,10 +233,11 @@ type HTTPRouteRule struct {
// Timeouts defines the timeouts that can be configured for an HTTP request.
//
// Support: Core
// Support: Extended
//
// +optional
Timeouts HttpRouteTimeouts `json:"timeouts,omitempty"`
// <gateway:experimental>
Timeouts *HTTPRouteTimeouts `json:"timeouts,omitempty"`
}
// PathMatchType specifies the semantics of how HTTP paths should be compared.
@ -485,6 +490,7 @@ const (
// headers:
// - name: "version"
// value "v1"
//
// ```
type HTTPRouteMatch struct {
// Path specifies a HTTP request path matcher. If this field is not
@ -814,34 +820,42 @@ type HTTPRouteStatus struct {
}
// HTTPRouteTimeouts defines timeouts that can be configured for an HTTPRoute.
// Timeout values are formatted like 1h/1m/1s/1ms as parsed by Golang
// time.ParseDuration and MUST BE >= 1ms.
type HttpRouteTimeouts struct {
// Request specifies a timeout for the Gateway to send a response to a client
// HTTP request. Whether the gateway starts the timeout before or after the
// entire client request stream has been received, is implementation
// dependent.
// Timeout values are formatted like 1h/1m/1s/1ms as parsed by Golang time.ParseDuration
// and MUST BE >= 1ms or 0 to disable (no timeout).
type HTTPRouteTimeouts struct {
// Request specifies the duration for processing an HTTP client request after which the
// gateway will time out if unable to send a response.
//
// For example, setting the `rules.timeouts.request` field to the value `10s`
// in an `HTTPRoute` will cause a timeout if a client request is taking longer
// than 10 seconds to complete.
// For example, setting this field to the value `10s` in an HTTPRoute will cause
// a timeout if a client request is taking longer than 10 seconds to complete.
//
// Request timeouts are disabled by default.
// This timeout is intended to cover as close to the whole request-response transaction
// as possible although an implementation MAY choose to start the timeout after the entire
// request stream has been received instead of immediately after the transaction is
// initiated by the client.
//
// Support: Core
//
// +optional
Request *time.Duration `json:"request,omitempty"`
// BackendRequest specifies a timeout for an individual request from the
// gateway to a backend service. Typically used in conjunction with retry
// configuration, if supported by an implementation.
//
// The value of BackendRequest defaults to and must be <= the value of Request
// timeout.
// When this field is unspecified, request timeout behavior is implementation-dependent.
//
// Support: Extended
//
// +optional
BackendRequest *time.Duration `json:"backendRequest,omitempty"`
// +kubebuilder:validation:Format=duration
Request *metav1.Duration `json:"request,omitempty"`
// BackendRequest specifies a timeout for an individual request from the gateway
// to a backend service. This covers the time from when the request first starts being
// sent from the gateway to when the full response has been received from the backend.
//
// An entire client HTTP transaction with a gateway, covered by the Request timeout,
// may result in more than one call from the gateway to the destination backend service,
// for example, if automatic retries are supported.
//
// Because the Request timeout encompasses the BackendRequest timeout,
// the value of BackendRequest defaults to and must be <= the value of Request timeout.
//
// Support: Extended
//
// +optional
// +kubebuilder:validation:Format=duration
BackendRequest *metav1.Duration `json:"backendRequest,omitempty"`
}

View File

@ -22,8 +22,7 @@ limitations under the License.
package v1beta3
import (
time "time"
"k8s.io/apimachinery/pkg/apis/meta/v1"
runtime "k8s.io/apimachinery/pkg/runtime"
v1beta1 "sigs.k8s.io/gateway-api/apis/v1beta1"
)
@ -361,7 +360,11 @@ func (in *HTTPRouteRule) DeepCopyInto(out *HTTPRouteRule) {
(*in)[i].DeepCopyInto(&(*out)[i])
}
}
in.Timeouts.DeepCopyInto(&out.Timeouts)
if in.Timeouts != nil {
in, out := &in.Timeouts, &out.Timeouts
*out = new(HTTPRouteTimeouts)
(*in).DeepCopyInto(*out)
}
return
}
@ -422,27 +425,26 @@ func (in *HTTPRouteStatus) DeepCopy() *HTTPRouteStatus {
}
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *HttpRouteTimeouts) DeepCopyInto(out *HttpRouteTimeouts) {
func (in *HTTPRouteTimeouts) DeepCopyInto(out *HTTPRouteTimeouts) {
*out = *in
if in.Request != nil {
in, out := &in.Request, &out.Request
*out = new(time.Duration)
*out = new(v1.Duration)
**out = **in
}
if in.BackendRequest != nil {
in, out := &in.BackendRequest, &out.BackendRequest
*out = new(time.Duration)
*out = new(v1.Duration)
**out = **in
}
return
}
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HttpRouteTimeouts.
func (in *HttpRouteTimeouts) DeepCopy() *HttpRouteTimeouts {
// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new HTTPRouteTimeouts.
func (in *HTTPRouteTimeouts) DeepCopy() *HTTPRouteTimeouts {
if in == nil {
return nil
}
out := new(HttpRouteTimeouts)
out := new(HTTPRouteTimeouts)
in.DeepCopyInto(out)
return out
}