Skip to content

Commit

Permalink
Add support for LocalConnectTimeoutMs and LocalRequestTimeoutMs on th…
Browse files Browse the repository at this point in the history
…e Service Defaults CRD
  • Loading branch information
chris920820 committed Oct 24, 2022
1 parent 5668d4c commit 1c1495a
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 0 deletions.
9 changes: 9 additions & 0 deletions charts/consul/templates/crd-servicedefaults.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,15 @@ spec:
inbound connections to each service instance. Defaults to 0 (using
consul's default) if not set.
type: integer
localConnectTimeoutMs:
description: The number of milliseconds allowed to make connections to
the local application instance before timing out. Defaults to 5000.
type: integer
localRequestTimeoutMs:
description: In milliseconds, the timeout for HTTP requests to the local
application instance. Applies to HTTP-based protocols only. If not specified,
inherits the Envoy default for route timeouts (15s).
type: integer
meshGateway:
description: MeshGateway controls the default mesh gateway configuration
for this service.
Expand Down
17 changes: 17 additions & 0 deletions control-plane/api/v1alpha1/servicedefaults_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,13 @@ type ServiceDefaultsSpec struct {
// MaxInboundConnections is the maximum number of concurrent inbound connections to
// each service instance. Defaults to 0 (using consul's default) if not set.
MaxInboundConnections int `json:"maxInboundConnections,omitempty"`
// The number of milliseconds allowed to make connections to the local application
// instance before timing out. Defaults to 5000.
LocalConnectTimeoutMs int `json:"localConnectTimeoutMs,omitempty"`
// In milliseconds, the timeout for HTTP requests to the local application instance.
// Applies to HTTP-based protocols only. If not specified, inherits the Envoy default for
// route timeouts (15s).
LocalRequestTimeoutMs int `json:"localRequestTimeoutMs,omitempty"`
}

type Upstreams struct {
Expand Down Expand Up @@ -264,6 +271,8 @@ func (in *ServiceDefaults) ToConsul(datacenter string) capi.ConfigEntry {
Destination: in.Spec.Destination.toConsul(),
Meta: meta(datacenter),
MaxInboundConnections: in.Spec.MaxInboundConnections,
LocalConnectTimeoutMs: in.Spec.LocalConnectTimeoutMs,
LocalRequestTimeoutMs: in.Spec.LocalRequestTimeoutMs,
}
}

Expand Down Expand Up @@ -294,6 +303,14 @@ func (in *ServiceDefaults) Validate(consulMeta common.ConsulMeta) error {
allErrs = append(allErrs, field.Invalid(path.Child("maxinboundconnections"), in.Spec.MaxInboundConnections, "MaxInboundConnections must be > 0"))
}

if in.Spec.LocalConnectTimeoutMs < 0 {
allErrs = append(allErrs, field.Invalid(path.Child("localConnectTimeoutMs"), in.Spec.LocalConnectTimeoutMs, "LocalConnectTimeoutMs must be > 0"))
}

if in.Spec.LocalRequestTimeoutMs < 0 {
allErrs = append(allErrs, field.Invalid(path.Child("localRequestTimeoutMs"), in.Spec.LocalRequestTimeoutMs, "LocalRequestTimeoutMs must be > 0"))
}

allErrs = append(allErrs, in.Spec.UpstreamConfig.validate(path.Child("upstreamConfig"), consulMeta.PartitionsEnabled)...)
allErrs = append(allErrs, in.Spec.Expose.validate(path.Child("expose"))...)

Expand Down
4 changes: 4 additions & 0 deletions control-plane/api/v1alpha1/servicedefaults_types_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,8 @@ func TestServiceDefaults_ToConsul(t *testing.T) {
Port: 443,
},
MaxInboundConnections: 20,
LocalConnectTimeoutMs: 5000,
LocalRequestTimeoutMs: 15000,
},
},
&capi.ServiceConfigEntry{
Expand Down Expand Up @@ -252,6 +254,8 @@ func TestServiceDefaults_ToConsul(t *testing.T) {
Port: 443,
},
MaxInboundConnections: 20,
LocalConnectTimeoutMs: 5000,
LocalRequestTimeoutMs: 15000,
Meta: map[string]string{
common.SourceKey: common.SourceValue,
common.DatacenterKey: "datacenter",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,15 @@ spec:
inbound connections to each service instance. Defaults to 0 (using
consul's default) if not set.
type: integer
localConnectTimeoutMs:
description: The number of milliseconds allowed to make connections to
the local application instance before timing out. Defaults to 5000.
type: integer
localRequestTimeoutMs:
description: In milliseconds, the timeout for HTTP requests to the local
application instance. Applies to HTTP-based protocols only. If not specified,
inherits the Envoy default for route timeouts (15s).
type: integer
meshGateway:
description: MeshGateway controls the default mesh gateway configuration
for this service.
Expand Down
4 changes: 4 additions & 0 deletions control-plane/controller/configentry_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ func TestConfigEntryControllers_createsConfigEntry(t *testing.T) {
Spec: v1alpha1.ServiceDefaultsSpec{
Protocol: "http",
MaxInboundConnections: 100,
LocalConnectTimeoutMs: 5000,
LocalRequestTimeoutMs: 15000,
},
},
reconciler: func(client client.Client, cfg *consul.Config, watcher *discovery.Watcher, logger logr.Logger) testReconciler {
Expand All @@ -73,6 +75,8 @@ func TestConfigEntryControllers_createsConfigEntry(t *testing.T) {
require.True(t, ok, "cast error")
require.Equal(t, "http", svcDefault.Protocol)
require.Equal(t, 100, svcDefault.MaxInboundConnections)
require.Equal(t, 5000, svcDefault.LocalConnectTimeoutMs)
require.Equal(t, 15000, svcDefault.LocalRequestTimeoutMs)
},
},
{
Expand Down

0 comments on commit 1c1495a

Please sign in to comment.