diff --git a/go/destination/destination.pb.go b/go/destination/destination.pb.go index a770c2e21..474786982 100644 --- a/go/destination/destination.pb.go +++ b/go/destination/destination.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 -// protoc v4.25.9 +// protoc v6.32.1 // source: destination.proto package destination diff --git a/go/destination/destination_grpc.pb.go b/go/destination/destination_grpc.pb.go index 525fac183..898f2bb7d 100644 --- a/go/destination/destination_grpc.pb.go +++ b/go/destination/destination_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.6.1 -// - protoc v4.25.9 +// - protoc-gen-go-grpc v1.6.2 +// - protoc v6.32.1 // source: destination.proto package destination diff --git a/go/grpc_route/grpc_route.pb.go b/go/grpc_route/grpc_route.pb.go index 8476b8921..a09a57e42 100644 --- a/go/grpc_route/grpc_route.pb.go +++ b/go/grpc_route/grpc_route.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 -// protoc v4.25.9 +// protoc v6.32.1 // source: grpc_route.proto package grpc_route diff --git a/go/http_route/http_route.pb.go b/go/http_route/http_route.pb.go index 9f841a6c3..0e2c7a5fb 100644 --- a/go/http_route/http_route.pb.go +++ b/go/http_route/http_route.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 -// protoc v4.25.9 +// protoc v6.32.1 // source: http_route.proto package http_route diff --git a/go/http_types/http_types.pb.go b/go/http_types/http_types.pb.go index 925e36f8a..f7354e2e3 100644 --- a/go/http_types/http_types.pb.go +++ b/go/http_types/http_types.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 -// protoc v4.25.9 +// protoc v6.32.1 // source: http_types.proto package http_types diff --git a/go/identity/identity.pb.go b/go/identity/identity.pb.go index 687923b5f..82f67694e 100644 --- a/go/identity/identity.pb.go +++ b/go/identity/identity.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 -// protoc v4.25.9 +// protoc v6.32.1 // source: identity.proto package identity diff --git a/go/identity/identity_grpc.pb.go b/go/identity/identity_grpc.pb.go index 259c80367..73876462f 100644 --- a/go/identity/identity_grpc.pb.go +++ b/go/identity/identity_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.6.1 -// - protoc v4.25.9 +// - protoc-gen-go-grpc v1.6.2 +// - protoc v6.32.1 // source: identity.proto package identity diff --git a/go/inbound/inbound.pb.go b/go/inbound/inbound.pb.go index 5df25b95b..0964e057f 100644 --- a/go/inbound/inbound.pb.go +++ b/go/inbound/inbound.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 -// protoc v4.25.9 +// protoc v6.32.1 // source: inbound.proto package inbound diff --git a/go/inbound/inbound_grpc.pb.go b/go/inbound/inbound_grpc.pb.go index 0d2c2988b..7bba77933 100644 --- a/go/inbound/inbound_grpc.pb.go +++ b/go/inbound/inbound_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.6.1 -// - protoc v4.25.9 +// - protoc-gen-go-grpc v1.6.2 +// - protoc v6.32.1 // source: inbound.proto package inbound diff --git a/go/meta/meta.pb.go b/go/meta/meta.pb.go index a5091fb12..1c0745e2e 100644 --- a/go/meta/meta.pb.go +++ b/go/meta/meta.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 -// protoc v4.25.9 +// protoc v6.32.1 // source: meta.proto package meta diff --git a/go/net/net.pb.go b/go/net/net.pb.go index 3391626c9..543f191e6 100644 --- a/go/net/net.pb.go +++ b/go/net/net.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 -// protoc v4.25.9 +// protoc v6.32.1 // source: net.proto package net diff --git a/go/opaque_route/opaque_route.pb.go b/go/opaque_route/opaque_route.pb.go index 583a365d9..5abbf84c8 100644 --- a/go/opaque_route/opaque_route.pb.go +++ b/go/opaque_route/opaque_route.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 -// protoc v4.25.9 +// protoc v6.32.1 // source: opaque_route.proto package opaque_route diff --git a/go/outbound/outbound.pb.go b/go/outbound/outbound.pb.go index 5435251ea..0c7a268f7 100644 --- a/go/outbound/outbound.pb.go +++ b/go/outbound/outbound.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 -// protoc v4.25.9 +// protoc v6.32.1 // source: outbound.proto package outbound @@ -734,12 +734,14 @@ func (x *Queue) GetFailfastTimeout() *duration.Duration { // Setting a numeric policy field to zero disables that policy. type FailureAccrual struct { state protoimpl.MessageState `protogen:"open.v1"` - // Must be set. Set `max_failures` to 0 to disable the consecutive - // failure policy while retaining the shared backoff. - ConsecutiveFailures *FailureAccrual_ConsecutiveFailures `protobuf:"bytes,1,opt,name=consecutive_failures,json=consecutiveFailures,proto3" json:"consecutive_failures,omitempty"` - // Success rate policy. If set, the circuit trips when the EWMA success - // rate drops below the threshold. - SuccessRate *FailureAccrual_SuccessRate `protobuf:"bytes,2,opt,name=success_rate,json=successRate,proto3" json:"success_rate,omitempty"` + // Types that are valid to be assigned to Kind: + // + // *FailureAccrual_ConsecutiveFailures_ + // *FailureAccrual_Unified_ + Kind isFailureAccrual_Kind `protobuf_oneof:"kind"` + // Ejection protection for the pool. When set, prevents circuit + // breakers from ejecting endpoints below the configured floor. + Ejection *EjectionConfig `protobuf:"bytes,3,opt,name=ejection,proto3" json:"ejection,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -774,137 +776,53 @@ func (*FailureAccrual) Descriptor() ([]byte, []int) { return file_outbound_proto_rawDescGZIP(), []int{9} } -func (x *FailureAccrual) GetConsecutiveFailures() *FailureAccrual_ConsecutiveFailures { +func (x *FailureAccrual) GetKind() isFailureAccrual_Kind { if x != nil { - return x.ConsecutiveFailures + return x.Kind } return nil } -func (x *FailureAccrual) GetSuccessRate() *FailureAccrual_SuccessRate { +func (x *FailureAccrual) GetConsecutiveFailures() *FailureAccrual_ConsecutiveFailures { if x != nil { - return x.SuccessRate + if x, ok := x.Kind.(*FailureAccrual_ConsecutiveFailures_); ok { + return x.ConsecutiveFailures + } } return nil } -// Configures load biasing for 429-aware load balancing. -// When enabled, the load balancer injects artificial penalties on -// rate-limited endpoints, causing P2C to prefer other endpoints. -type LoadBiasConfig struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Whether load biasing is enabled. When the message is present - // but `enabled` is false, biasing is inactive. - Enabled bool `protobuf:"varint,1,opt,name=enabled,proto3" json:"enabled,omitempty"` - // The penalty duration to inject when a 429 response is received. - Penalty *duration.Duration `protobuf:"bytes,2,opt,name=penalty,proto3" json:"penalty,omitempty"` - // The EWMA decay window for the penalty. - PenaltyDecay *duration.Duration `protobuf:"bytes,3,opt,name=penalty_decay,json=penaltyDecay,proto3" json:"penalty_decay,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *LoadBiasConfig) Reset() { - *x = LoadBiasConfig{} - mi := &file_outbound_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *LoadBiasConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LoadBiasConfig) ProtoMessage() {} - -func (x *LoadBiasConfig) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[10] +func (x *FailureAccrual) GetUnified() *FailureAccrual_Unified { if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) + if x, ok := x.Kind.(*FailureAccrual_Unified_); ok { + return x.Unified } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LoadBiasConfig.ProtoReflect.Descriptor instead. -func (*LoadBiasConfig) Descriptor() ([]byte, []int) { - return file_outbound_proto_rawDescGZIP(), []int{10} -} - -func (x *LoadBiasConfig) GetEnabled() bool { - if x != nil { - return x.Enabled - } - return false -} - -func (x *LoadBiasConfig) GetPenalty() *duration.Duration { - if x != nil { - return x.Penalty } return nil } -func (x *LoadBiasConfig) GetPenaltyDecay() *duration.Duration { +func (x *FailureAccrual) GetEjection() *EjectionConfig { if x != nil { - return x.PenaltyDecay + return x.Ejection } return nil } -// Configures handling of rate-limiting hints: Retry-After headers -// (HTTP 429/503) and grpc-retry-pushback-ms trailers (gRPC -// RESOURCE_EXHAUSTED). The proxy uses the parsed duration to extend -// circuit breaker backoff and amplify load biaser penalties. -type RetryAfterConfig struct { - state protoimpl.MessageState `protogen:"open.v1"` - // Maximum duration the proxy will honor from either hint source. - // Values exceeding this cap are clamped. When absent, the proxy - // uses DEFAULT_RETRY_AFTER_MAX_DURATION as the cap. - MaxDuration *duration.Duration `protobuf:"bytes,1,opt,name=max_duration,json=maxDuration,proto3" json:"max_duration,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache +type isFailureAccrual_Kind interface { + isFailureAccrual_Kind() } -func (x *RetryAfterConfig) Reset() { - *x = RetryAfterConfig{} - mi := &file_outbound_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +type FailureAccrual_ConsecutiveFailures_ struct { + ConsecutiveFailures *FailureAccrual_ConsecutiveFailures `protobuf:"bytes,1,opt,name=consecutive_failures,json=consecutiveFailures,proto3,oneof"` } -func (x *RetryAfterConfig) String() string { - return protoimpl.X.MessageStringOf(x) +type FailureAccrual_Unified_ struct { + Unified *FailureAccrual_Unified `protobuf:"bytes,2,opt,name=unified,proto3,oneof"` } -func (*RetryAfterConfig) ProtoMessage() {} +func (*FailureAccrual_ConsecutiveFailures_) isFailureAccrual_Kind() {} -func (x *RetryAfterConfig) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[11] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RetryAfterConfig.ProtoReflect.Descriptor instead. -func (*RetryAfterConfig) Descriptor() ([]byte, []int) { - return file_outbound_proto_rawDescGZIP(), []int{11} -} - -func (x *RetryAfterConfig) GetMaxDuration() *duration.Duration { - if x != nil { - return x.MaxDuration - } - return nil -} +func (*FailureAccrual_Unified_) isFailureAccrual_Kind() {} // Pool-level ejection protection. Prevents circuit breakers from // ejecting all endpoints in a load-balancing pool. @@ -921,7 +839,7 @@ type EjectionConfig struct { func (x *EjectionConfig) Reset() { *x = EjectionConfig{} - mi := &file_outbound_proto_msgTypes[12] + mi := &file_outbound_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -933,7 +851,7 @@ func (x *EjectionConfig) String() string { func (*EjectionConfig) ProtoMessage() {} func (x *EjectionConfig) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[12] + mi := &file_outbound_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -946,7 +864,7 @@ func (x *EjectionConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use EjectionConfig.ProtoReflect.Descriptor instead. func (*EjectionConfig) Descriptor() ([]byte, []int) { - return file_outbound_proto_rawDescGZIP(), []int{12} + return file_outbound_proto_rawDescGZIP(), []int{10} } func (x *EjectionConfig) GetMinReadyEndpoints() uint32 { @@ -965,14 +883,17 @@ type ExponentialBackoff struct { MaxBackoff *duration.Duration `protobuf:"bytes,2,opt,name=max_backoff,json=maxBackoff,proto3" json:"max_backoff,omitempty"` // The ratio of the base timeout that may be randomly added to a backoff. // Must be greater than or equal to 0.0. - JitterRatio float32 `protobuf:"fixed32,3,opt,name=jitter_ratio,json=jitterRatio,proto3" json:"jitter_ratio,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + JitterRatio float32 `protobuf:"fixed32,3,opt,name=jitter_ratio,json=jitterRatio,proto3" json:"jitter_ratio,omitempty"` + // If true, the proxy will use the Retry-After hint (if present on the response) + // as the initial backoff duration, clamped by min_backoff and max_backoff. + RespectRetryAfterHint bool `protobuf:"varint,4,opt,name=respect_retry_after_hint,json=respectRetryAfterHint,proto3" json:"respect_retry_after_hint,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ExponentialBackoff) Reset() { *x = ExponentialBackoff{} - mi := &file_outbound_proto_msgTypes[13] + mi := &file_outbound_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -984,7 +905,7 @@ func (x *ExponentialBackoff) String() string { func (*ExponentialBackoff) ProtoMessage() {} func (x *ExponentialBackoff) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[13] + mi := &file_outbound_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -997,7 +918,7 @@ func (x *ExponentialBackoff) ProtoReflect() protoreflect.Message { // Deprecated: Use ExponentialBackoff.ProtoReflect.Descriptor instead. func (*ExponentialBackoff) Descriptor() ([]byte, []int) { - return file_outbound_proto_rawDescGZIP(), []int{13} + return file_outbound_proto_rawDescGZIP(), []int{11} } func (x *ExponentialBackoff) GetMinBackoff() *duration.Duration { @@ -1021,6 +942,13 @@ func (x *ExponentialBackoff) GetJitterRatio() float32 { return 0 } +func (x *ExponentialBackoff) GetRespectRetryAfterHint() bool { + if x != nil { + return x.RespectRetryAfterHint + } + return false +} + type ProxyProtocol_Detect struct { state protoimpl.MessageState `protogen:"open.v1"` // Protocol detection timeout. @@ -1036,7 +964,7 @@ type ProxyProtocol_Detect struct { func (x *ProxyProtocol_Detect) Reset() { *x = ProxyProtocol_Detect{} - mi := &file_outbound_proto_msgTypes[14] + mi := &file_outbound_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1048,7 +976,7 @@ func (x *ProxyProtocol_Detect) String() string { func (*ProxyProtocol_Detect) ProtoMessage() {} func (x *ProxyProtocol_Detect) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[14] + mi := &file_outbound_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1101,7 +1029,7 @@ type ProxyProtocol_Opaque struct { func (x *ProxyProtocol_Opaque) Reset() { *x = ProxyProtocol_Opaque{} - mi := &file_outbound_proto_msgTypes[15] + mi := &file_outbound_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1113,7 +1041,7 @@ func (x *ProxyProtocol_Opaque) String() string { func (*ProxyProtocol_Opaque) ProtoMessage() {} func (x *ProxyProtocol_Opaque) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[15] + mi := &file_outbound_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1141,17 +1069,13 @@ type ProxyProtocol_Http1 struct { Routes []*HttpRoute `protobuf:"bytes,1,rep,name=routes,proto3" json:"routes,omitempty"` // If empty, circuit breaking is not performed. FailureAccrual *FailureAccrual `protobuf:"bytes,2,opt,name=failure_accrual,json=failureAccrual,proto3" json:"failure_accrual,omitempty"` - // If set, configures load biasing for 429-aware load balancing. - LoadBias *LoadBiasConfig `protobuf:"bytes,3,opt,name=load_bias,json=loadBias,proto3" json:"load_bias,omitempty"` - // If set, configures handling of Retry-After headers (HTTP 429/503). - RetryAfter *RetryAfterConfig `protobuf:"bytes,4,opt,name=retry_after,json=retryAfter,proto3" json:"retry_after,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ProxyProtocol_Http1) Reset() { *x = ProxyProtocol_Http1{} - mi := &file_outbound_proto_msgTypes[16] + mi := &file_outbound_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1163,7 +1087,7 @@ func (x *ProxyProtocol_Http1) String() string { func (*ProxyProtocol_Http1) ProtoMessage() {} func (x *ProxyProtocol_Http1) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[16] + mi := &file_outbound_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1193,36 +1117,18 @@ func (x *ProxyProtocol_Http1) GetFailureAccrual() *FailureAccrual { return nil } -func (x *ProxyProtocol_Http1) GetLoadBias() *LoadBiasConfig { - if x != nil { - return x.LoadBias - } - return nil -} - -func (x *ProxyProtocol_Http1) GetRetryAfter() *RetryAfterConfig { - if x != nil { - return x.RetryAfter - } - return nil -} - type ProxyProtocol_Http2 struct { state protoimpl.MessageState `protogen:"open.v1"` Routes []*HttpRoute `protobuf:"bytes,1,rep,name=routes,proto3" json:"routes,omitempty"` // If empty, circuit breaking is not performed. FailureAccrual *FailureAccrual `protobuf:"bytes,2,opt,name=failure_accrual,json=failureAccrual,proto3" json:"failure_accrual,omitempty"` - // If set, configures load biasing for 429-aware load balancing. - LoadBias *LoadBiasConfig `protobuf:"bytes,3,opt,name=load_bias,json=loadBias,proto3" json:"load_bias,omitempty"` - // If set, configures handling of Retry-After headers (HTTP 429/503). - RetryAfter *RetryAfterConfig `protobuf:"bytes,4,opt,name=retry_after,json=retryAfter,proto3" json:"retry_after,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ProxyProtocol_Http2) Reset() { *x = ProxyProtocol_Http2{} - mi := &file_outbound_proto_msgTypes[17] + mi := &file_outbound_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1234,7 +1140,7 @@ func (x *ProxyProtocol_Http2) String() string { func (*ProxyProtocol_Http2) ProtoMessage() {} func (x *ProxyProtocol_Http2) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[17] + mi := &file_outbound_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1264,37 +1170,18 @@ func (x *ProxyProtocol_Http2) GetFailureAccrual() *FailureAccrual { return nil } -func (x *ProxyProtocol_Http2) GetLoadBias() *LoadBiasConfig { - if x != nil { - return x.LoadBias - } - return nil -} - -func (x *ProxyProtocol_Http2) GetRetryAfter() *RetryAfterConfig { - if x != nil { - return x.RetryAfter - } - return nil -} - type ProxyProtocol_Grpc struct { state protoimpl.MessageState `protogen:"open.v1"` Routes []*GrpcRoute `protobuf:"bytes,1,rep,name=routes,proto3" json:"routes,omitempty"` // If empty, circuit breaking is not performed. FailureAccrual *FailureAccrual `protobuf:"bytes,2,opt,name=failure_accrual,json=failureAccrual,proto3" json:"failure_accrual,omitempty"` - // If set, configures load biasing for 429-aware load balancing. - LoadBias *LoadBiasConfig `protobuf:"bytes,3,opt,name=load_bias,json=loadBias,proto3" json:"load_bias,omitempty"` - // If set, configures handling of Retry-After headers (HTTP 429/503) - // and grpc-retry-pushback-ms trailers (gRPC RESOURCE_EXHAUSTED). - RetryAfter *RetryAfterConfig `protobuf:"bytes,4,opt,name=retry_after,json=retryAfter,proto3" json:"retry_after,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ProxyProtocol_Grpc) Reset() { *x = ProxyProtocol_Grpc{} - mi := &file_outbound_proto_msgTypes[18] + mi := &file_outbound_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1306,7 +1193,7 @@ func (x *ProxyProtocol_Grpc) String() string { func (*ProxyProtocol_Grpc) ProtoMessage() {} func (x *ProxyProtocol_Grpc) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[18] + mi := &file_outbound_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1336,20 +1223,6 @@ func (x *ProxyProtocol_Grpc) GetFailureAccrual() *FailureAccrual { return nil } -func (x *ProxyProtocol_Grpc) GetLoadBias() *LoadBiasConfig { - if x != nil { - return x.LoadBias - } - return nil -} - -func (x *ProxyProtocol_Grpc) GetRetryAfter() *RetryAfterConfig { - if x != nil { - return x.RetryAfter - } - return nil -} - type ProxyProtocol_Tls struct { state protoimpl.MessageState `protogen:"open.v1"` Routes []*TlsRoute `protobuf:"bytes,1,rep,name=routes,proto3" json:"routes,omitempty"` @@ -1359,7 +1232,7 @@ type ProxyProtocol_Tls struct { func (x *ProxyProtocol_Tls) Reset() { *x = ProxyProtocol_Tls{} - mi := &file_outbound_proto_msgTypes[19] + mi := &file_outbound_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1371,7 +1244,7 @@ func (x *ProxyProtocol_Tls) String() string { func (*ProxyProtocol_Tls) ProtoMessage() {} func (x *ProxyProtocol_Tls) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[19] + mi := &file_outbound_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1415,7 +1288,7 @@ type HttpRoute_Rule struct { func (x *HttpRoute_Rule) Reset() { *x = HttpRoute_Rule{} - mi := &file_outbound_proto_msgTypes[20] + mi := &file_outbound_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1427,7 +1300,7 @@ func (x *HttpRoute_Rule) String() string { func (*HttpRoute_Rule) ProtoMessage() {} func (x *HttpRoute_Rule) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[20] + mi := &file_outbound_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1508,7 +1381,7 @@ type HttpRoute_Filter struct { func (x *HttpRoute_Filter) Reset() { *x = HttpRoute_Filter{} - mi := &file_outbound_proto_msgTypes[21] + mi := &file_outbound_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1520,7 +1393,7 @@ func (x *HttpRoute_Filter) String() string { func (*HttpRoute_Filter) ProtoMessage() {} func (x *HttpRoute_Filter) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[21] + mi := &file_outbound_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1621,7 +1494,7 @@ type HttpRoute_Distribution struct { func (x *HttpRoute_Distribution) Reset() { *x = HttpRoute_Distribution{} - mi := &file_outbound_proto_msgTypes[22] + mi := &file_outbound_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1633,7 +1506,7 @@ func (x *HttpRoute_Distribution) String() string { func (*HttpRoute_Distribution) ProtoMessage() {} func (x *HttpRoute_Distribution) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[22] + mi := &file_outbound_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1720,7 +1593,7 @@ type HttpRoute_Retry struct { func (x *HttpRoute_Retry) Reset() { *x = HttpRoute_Retry{} - mi := &file_outbound_proto_msgTypes[23] + mi := &file_outbound_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1732,7 +1605,7 @@ func (x *HttpRoute_Retry) String() string { func (*HttpRoute_Retry) ProtoMessage() {} func (x *HttpRoute_Retry) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[23] + mi := &file_outbound_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1797,7 +1670,7 @@ type HttpRoute_RouteBackend struct { func (x *HttpRoute_RouteBackend) Reset() { *x = HttpRoute_RouteBackend{} - mi := &file_outbound_proto_msgTypes[24] + mi := &file_outbound_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1809,7 +1682,7 @@ func (x *HttpRoute_RouteBackend) String() string { func (*HttpRoute_RouteBackend) ProtoMessage() {} func (x *HttpRoute_RouteBackend) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[24] + mi := &file_outbound_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1857,7 +1730,7 @@ type HttpRoute_WeightedRouteBackend struct { func (x *HttpRoute_WeightedRouteBackend) Reset() { *x = HttpRoute_WeightedRouteBackend{} - mi := &file_outbound_proto_msgTypes[25] + mi := &file_outbound_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1869,7 +1742,7 @@ func (x *HttpRoute_WeightedRouteBackend) String() string { func (*HttpRoute_WeightedRouteBackend) ProtoMessage() {} func (x *HttpRoute_WeightedRouteBackend) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[25] + mi := &file_outbound_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1907,7 +1780,7 @@ type HttpRoute_Distribution_Empty struct { func (x *HttpRoute_Distribution_Empty) Reset() { *x = HttpRoute_Distribution_Empty{} - mi := &file_outbound_proto_msgTypes[26] + mi := &file_outbound_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1919,7 +1792,7 @@ func (x *HttpRoute_Distribution_Empty) String() string { func (*HttpRoute_Distribution_Empty) ProtoMessage() {} func (x *HttpRoute_Distribution_Empty) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[26] + mi := &file_outbound_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1944,7 +1817,7 @@ type HttpRoute_Distribution_FirstAvailable struct { func (x *HttpRoute_Distribution_FirstAvailable) Reset() { *x = HttpRoute_Distribution_FirstAvailable{} - mi := &file_outbound_proto_msgTypes[27] + mi := &file_outbound_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1956,7 +1829,7 @@ func (x *HttpRoute_Distribution_FirstAvailable) String() string { func (*HttpRoute_Distribution_FirstAvailable) ProtoMessage() {} func (x *HttpRoute_Distribution_FirstAvailable) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[27] + mi := &file_outbound_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1988,7 +1861,7 @@ type HttpRoute_Distribution_RandomAvailable struct { func (x *HttpRoute_Distribution_RandomAvailable) Reset() { *x = HttpRoute_Distribution_RandomAvailable{} - mi := &file_outbound_proto_msgTypes[28] + mi := &file_outbound_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2000,7 +1873,7 @@ func (x *HttpRoute_Distribution_RandomAvailable) String() string { func (*HttpRoute_Distribution_RandomAvailable) ProtoMessage() {} func (x *HttpRoute_Distribution_RandomAvailable) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[28] + mi := &file_outbound_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2034,7 +1907,7 @@ type HttpRoute_Retry_Conditions struct { func (x *HttpRoute_Retry_Conditions) Reset() { *x = HttpRoute_Retry_Conditions{} - mi := &file_outbound_proto_msgTypes[29] + mi := &file_outbound_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2046,7 +1919,7 @@ func (x *HttpRoute_Retry_Conditions) String() string { func (*HttpRoute_Retry_Conditions) ProtoMessage() {} func (x *HttpRoute_Retry_Conditions) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[29] + mi := &file_outbound_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2079,7 +1952,7 @@ type HttpRoute_Retry_Conditions_StatusRange struct { func (x *HttpRoute_Retry_Conditions_StatusRange) Reset() { *x = HttpRoute_Retry_Conditions_StatusRange{} - mi := &file_outbound_proto_msgTypes[30] + mi := &file_outbound_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2091,7 +1964,7 @@ func (x *HttpRoute_Retry_Conditions_StatusRange) String() string { func (*HttpRoute_Retry_Conditions_StatusRange) ProtoMessage() {} func (x *HttpRoute_Retry_Conditions_StatusRange) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[30] + mi := &file_outbound_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2142,7 +2015,7 @@ type GrpcRoute_Rule struct { func (x *GrpcRoute_Rule) Reset() { *x = GrpcRoute_Rule{} - mi := &file_outbound_proto_msgTypes[31] + mi := &file_outbound_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2154,7 +2027,7 @@ func (x *GrpcRoute_Rule) String() string { func (*GrpcRoute_Rule) ProtoMessage() {} func (x *GrpcRoute_Rule) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[31] + mi := &file_outbound_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2233,7 +2106,7 @@ type GrpcRoute_Filter struct { func (x *GrpcRoute_Filter) Reset() { *x = GrpcRoute_Filter{} - mi := &file_outbound_proto_msgTypes[32] + mi := &file_outbound_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2245,7 +2118,7 @@ func (x *GrpcRoute_Filter) String() string { func (*GrpcRoute_Filter) ProtoMessage() {} func (x *GrpcRoute_Filter) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[32] + mi := &file_outbound_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2316,7 +2189,7 @@ type GrpcRoute_Distribution struct { func (x *GrpcRoute_Distribution) Reset() { *x = GrpcRoute_Distribution{} - mi := &file_outbound_proto_msgTypes[33] + mi := &file_outbound_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2328,7 +2201,7 @@ func (x *GrpcRoute_Distribution) String() string { func (*GrpcRoute_Distribution) ProtoMessage() {} func (x *GrpcRoute_Distribution) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[33] + mi := &file_outbound_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2415,7 +2288,7 @@ type GrpcRoute_Retry struct { func (x *GrpcRoute_Retry) Reset() { *x = GrpcRoute_Retry{} - mi := &file_outbound_proto_msgTypes[34] + mi := &file_outbound_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2427,7 +2300,7 @@ func (x *GrpcRoute_Retry) String() string { func (*GrpcRoute_Retry) ProtoMessage() {} func (x *GrpcRoute_Retry) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[34] + mi := &file_outbound_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2492,7 +2365,7 @@ type GrpcRoute_RouteBackend struct { func (x *GrpcRoute_RouteBackend) Reset() { *x = GrpcRoute_RouteBackend{} - mi := &file_outbound_proto_msgTypes[35] + mi := &file_outbound_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2504,7 +2377,7 @@ func (x *GrpcRoute_RouteBackend) String() string { func (*GrpcRoute_RouteBackend) ProtoMessage() {} func (x *GrpcRoute_RouteBackend) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[35] + mi := &file_outbound_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2552,7 +2425,7 @@ type GrpcRoute_WeightedRouteBackend struct { func (x *GrpcRoute_WeightedRouteBackend) Reset() { *x = GrpcRoute_WeightedRouteBackend{} - mi := &file_outbound_proto_msgTypes[36] + mi := &file_outbound_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2564,7 +2437,7 @@ func (x *GrpcRoute_WeightedRouteBackend) String() string { func (*GrpcRoute_WeightedRouteBackend) ProtoMessage() {} func (x *GrpcRoute_WeightedRouteBackend) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[36] + mi := &file_outbound_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2602,7 +2475,7 @@ type GrpcRoute_Distribution_Empty struct { func (x *GrpcRoute_Distribution_Empty) Reset() { *x = GrpcRoute_Distribution_Empty{} - mi := &file_outbound_proto_msgTypes[37] + mi := &file_outbound_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2614,7 +2487,7 @@ func (x *GrpcRoute_Distribution_Empty) String() string { func (*GrpcRoute_Distribution_Empty) ProtoMessage() {} func (x *GrpcRoute_Distribution_Empty) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[37] + mi := &file_outbound_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2639,7 +2512,7 @@ type GrpcRoute_Distribution_FirstAvailable struct { func (x *GrpcRoute_Distribution_FirstAvailable) Reset() { *x = GrpcRoute_Distribution_FirstAvailable{} - mi := &file_outbound_proto_msgTypes[38] + mi := &file_outbound_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2651,7 +2524,7 @@ func (x *GrpcRoute_Distribution_FirstAvailable) String() string { func (*GrpcRoute_Distribution_FirstAvailable) ProtoMessage() {} func (x *GrpcRoute_Distribution_FirstAvailable) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[38] + mi := &file_outbound_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2683,7 +2556,7 @@ type GrpcRoute_Distribution_RandomAvailable struct { func (x *GrpcRoute_Distribution_RandomAvailable) Reset() { *x = GrpcRoute_Distribution_RandomAvailable{} - mi := &file_outbound_proto_msgTypes[39] + mi := &file_outbound_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2695,7 +2568,7 @@ func (x *GrpcRoute_Distribution_RandomAvailable) String() string { func (*GrpcRoute_Distribution_RandomAvailable) ProtoMessage() {} func (x *GrpcRoute_Distribution_RandomAvailable) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[39] + mi := &file_outbound_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2732,7 +2605,7 @@ type GrpcRoute_Retry_Conditions struct { func (x *GrpcRoute_Retry_Conditions) Reset() { *x = GrpcRoute_Retry_Conditions{} - mi := &file_outbound_proto_msgTypes[40] + mi := &file_outbound_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2744,7 +2617,7 @@ func (x *GrpcRoute_Retry_Conditions) String() string { func (*GrpcRoute_Retry_Conditions) ProtoMessage() {} func (x *GrpcRoute_Retry_Conditions) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[40] + mi := &file_outbound_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2805,7 +2678,7 @@ type OpaqueRoute_Rule struct { func (x *OpaqueRoute_Rule) Reset() { *x = OpaqueRoute_Rule{} - mi := &file_outbound_proto_msgTypes[41] + mi := &file_outbound_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2817,7 +2690,7 @@ func (x *OpaqueRoute_Rule) String() string { func (*OpaqueRoute_Rule) ProtoMessage() {} func (x *OpaqueRoute_Rule) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[41] + mi := &file_outbound_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2860,7 +2733,7 @@ type OpaqueRoute_Filter struct { func (x *OpaqueRoute_Filter) Reset() { *x = OpaqueRoute_Filter{} - mi := &file_outbound_proto_msgTypes[42] + mi := &file_outbound_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2872,7 +2745,7 @@ func (x *OpaqueRoute_Filter) String() string { func (*OpaqueRoute_Filter) ProtoMessage() {} func (x *OpaqueRoute_Filter) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[42] + mi := &file_outbound_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2943,7 +2816,7 @@ type OpaqueRoute_Distribution struct { func (x *OpaqueRoute_Distribution) Reset() { *x = OpaqueRoute_Distribution{} - mi := &file_outbound_proto_msgTypes[43] + mi := &file_outbound_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2955,7 +2828,7 @@ func (x *OpaqueRoute_Distribution) String() string { func (*OpaqueRoute_Distribution) ProtoMessage() {} func (x *OpaqueRoute_Distribution) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[43] + mi := &file_outbound_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3038,7 +2911,7 @@ type OpaqueRoute_RouteBackend struct { func (x *OpaqueRoute_RouteBackend) Reset() { *x = OpaqueRoute_RouteBackend{} - mi := &file_outbound_proto_msgTypes[44] + mi := &file_outbound_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3050,7 +2923,7 @@ func (x *OpaqueRoute_RouteBackend) String() string { func (*OpaqueRoute_RouteBackend) ProtoMessage() {} func (x *OpaqueRoute_RouteBackend) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[44] + mi := &file_outbound_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3090,7 +2963,7 @@ type OpaqueRoute_WeightedRouteBackend struct { func (x *OpaqueRoute_WeightedRouteBackend) Reset() { *x = OpaqueRoute_WeightedRouteBackend{} - mi := &file_outbound_proto_msgTypes[45] + mi := &file_outbound_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3102,7 +2975,7 @@ func (x *OpaqueRoute_WeightedRouteBackend) String() string { func (*OpaqueRoute_WeightedRouteBackend) ProtoMessage() {} func (x *OpaqueRoute_WeightedRouteBackend) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[45] + mi := &file_outbound_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3140,7 +3013,7 @@ type OpaqueRoute_Distribution_Empty struct { func (x *OpaqueRoute_Distribution_Empty) Reset() { *x = OpaqueRoute_Distribution_Empty{} - mi := &file_outbound_proto_msgTypes[46] + mi := &file_outbound_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3152,7 +3025,7 @@ func (x *OpaqueRoute_Distribution_Empty) String() string { func (*OpaqueRoute_Distribution_Empty) ProtoMessage() {} func (x *OpaqueRoute_Distribution_Empty) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[46] + mi := &file_outbound_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3177,7 +3050,7 @@ type OpaqueRoute_Distribution_FirstAvailable struct { func (x *OpaqueRoute_Distribution_FirstAvailable) Reset() { *x = OpaqueRoute_Distribution_FirstAvailable{} - mi := &file_outbound_proto_msgTypes[47] + mi := &file_outbound_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3189,7 +3062,7 @@ func (x *OpaqueRoute_Distribution_FirstAvailable) String() string { func (*OpaqueRoute_Distribution_FirstAvailable) ProtoMessage() {} func (x *OpaqueRoute_Distribution_FirstAvailable) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[47] + mi := &file_outbound_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3221,7 +3094,7 @@ type OpaqueRoute_Distribution_RandomAvailable struct { func (x *OpaqueRoute_Distribution_RandomAvailable) Reset() { *x = OpaqueRoute_Distribution_RandomAvailable{} - mi := &file_outbound_proto_msgTypes[48] + mi := &file_outbound_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3233,7 +3106,7 @@ func (x *OpaqueRoute_Distribution_RandomAvailable) String() string { func (*OpaqueRoute_Distribution_RandomAvailable) ProtoMessage() {} func (x *OpaqueRoute_Distribution_RandomAvailable) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[48] + mi := &file_outbound_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3266,7 +3139,7 @@ type TlsRoute_Rule struct { func (x *TlsRoute_Rule) Reset() { *x = TlsRoute_Rule{} - mi := &file_outbound_proto_msgTypes[49] + mi := &file_outbound_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3278,7 +3151,7 @@ func (x *TlsRoute_Rule) String() string { func (*TlsRoute_Rule) ProtoMessage() {} func (x *TlsRoute_Rule) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[49] + mi := &file_outbound_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3321,7 +3194,7 @@ type TlsRoute_Filter struct { func (x *TlsRoute_Filter) Reset() { *x = TlsRoute_Filter{} - mi := &file_outbound_proto_msgTypes[50] + mi := &file_outbound_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3333,7 +3206,7 @@ func (x *TlsRoute_Filter) String() string { func (*TlsRoute_Filter) ProtoMessage() {} func (x *TlsRoute_Filter) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[50] + mi := &file_outbound_proto_msgTypes[48] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3404,7 +3277,7 @@ type TlsRoute_Distribution struct { func (x *TlsRoute_Distribution) Reset() { *x = TlsRoute_Distribution{} - mi := &file_outbound_proto_msgTypes[51] + mi := &file_outbound_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3416,7 +3289,7 @@ func (x *TlsRoute_Distribution) String() string { func (*TlsRoute_Distribution) ProtoMessage() {} func (x *TlsRoute_Distribution) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[51] + mi := &file_outbound_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3499,7 +3372,7 @@ type TlsRoute_RouteBackend struct { func (x *TlsRoute_RouteBackend) Reset() { *x = TlsRoute_RouteBackend{} - mi := &file_outbound_proto_msgTypes[52] + mi := &file_outbound_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3511,7 +3384,7 @@ func (x *TlsRoute_RouteBackend) String() string { func (*TlsRoute_RouteBackend) ProtoMessage() {} func (x *TlsRoute_RouteBackend) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[52] + mi := &file_outbound_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3551,7 +3424,7 @@ type TlsRoute_WeightedRouteBackend struct { func (x *TlsRoute_WeightedRouteBackend) Reset() { *x = TlsRoute_WeightedRouteBackend{} - mi := &file_outbound_proto_msgTypes[53] + mi := &file_outbound_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3563,7 +3436,7 @@ func (x *TlsRoute_WeightedRouteBackend) String() string { func (*TlsRoute_WeightedRouteBackend) ProtoMessage() {} func (x *TlsRoute_WeightedRouteBackend) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[53] + mi := &file_outbound_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3601,7 +3474,7 @@ type TlsRoute_Distribution_Empty struct { func (x *TlsRoute_Distribution_Empty) Reset() { *x = TlsRoute_Distribution_Empty{} - mi := &file_outbound_proto_msgTypes[54] + mi := &file_outbound_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3613,7 +3486,7 @@ func (x *TlsRoute_Distribution_Empty) String() string { func (*TlsRoute_Distribution_Empty) ProtoMessage() {} func (x *TlsRoute_Distribution_Empty) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[54] + mi := &file_outbound_proto_msgTypes[52] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3638,7 +3511,7 @@ type TlsRoute_Distribution_FirstAvailable struct { func (x *TlsRoute_Distribution_FirstAvailable) Reset() { *x = TlsRoute_Distribution_FirstAvailable{} - mi := &file_outbound_proto_msgTypes[55] + mi := &file_outbound_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3650,7 +3523,7 @@ func (x *TlsRoute_Distribution_FirstAvailable) String() string { func (*TlsRoute_Distribution_FirstAvailable) ProtoMessage() {} func (x *TlsRoute_Distribution_FirstAvailable) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[55] + mi := &file_outbound_proto_msgTypes[53] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3682,7 +3555,7 @@ type TlsRoute_Distribution_RandomAvailable struct { func (x *TlsRoute_Distribution_RandomAvailable) Reset() { *x = TlsRoute_Distribution_RandomAvailable{} - mi := &file_outbound_proto_msgTypes[56] + mi := &file_outbound_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3694,7 +3567,7 @@ func (x *TlsRoute_Distribution_RandomAvailable) String() string { func (*TlsRoute_Distribution_RandomAvailable) ProtoMessage() {} func (x *TlsRoute_Distribution_RandomAvailable) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[56] + mi := &file_outbound_proto_msgTypes[54] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3730,7 +3603,7 @@ type Backend_EndpointDiscovery struct { func (x *Backend_EndpointDiscovery) Reset() { *x = Backend_EndpointDiscovery{} - mi := &file_outbound_proto_msgTypes[57] + mi := &file_outbound_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3742,7 +3615,7 @@ func (x *Backend_EndpointDiscovery) String() string { func (*Backend_EndpointDiscovery) ProtoMessage() {} func (x *Backend_EndpointDiscovery) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[57] + mi := &file_outbound_proto_msgTypes[55] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3795,17 +3668,15 @@ type Backend_BalanceP2C struct { // Types that are valid to be assigned to Load: // // *Backend_BalanceP2C_PeakEwma_ - Load isBackend_BalanceP2C_Load `protobuf_oneof:"load"` - // Ejection protection for the pool. When set, prevents circuit - // breakers from ejecting endpoints below the configured floor. - Ejection *EjectionConfig `protobuf:"bytes,3,opt,name=ejection,proto3" json:"ejection,omitempty"` + // *Backend_BalanceP2C_PenaltyPeakEwma_ + Load isBackend_BalanceP2C_Load `protobuf_oneof:"load"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } func (x *Backend_BalanceP2C) Reset() { *x = Backend_BalanceP2C{} - mi := &file_outbound_proto_msgTypes[58] + mi := &file_outbound_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3817,7 +3688,7 @@ func (x *Backend_BalanceP2C) String() string { func (*Backend_BalanceP2C) ProtoMessage() {} func (x *Backend_BalanceP2C) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[58] + mi := &file_outbound_proto_msgTypes[56] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3856,9 +3727,11 @@ func (x *Backend_BalanceP2C) GetPeakEwma() *Backend_BalanceP2C_PeakEwma { return nil } -func (x *Backend_BalanceP2C) GetEjection() *EjectionConfig { +func (x *Backend_BalanceP2C) GetPenaltyPeakEwma() *Backend_BalanceP2C_PenaltyPeakEwma { if x != nil { - return x.Ejection + if x, ok := x.Load.(*Backend_BalanceP2C_PenaltyPeakEwma_); ok { + return x.PenaltyPeakEwma + } } return nil } @@ -3873,8 +3746,16 @@ type Backend_BalanceP2C_PeakEwma_ struct { PeakEwma *Backend_BalanceP2C_PeakEwma `protobuf:"bytes,2,opt,name=peak_ewma,json=peakEwma,proto3,oneof"` } +type Backend_BalanceP2C_PenaltyPeakEwma_ struct { + // A variant of peak EWMA that injects artificial penalties based on response + // codes, enabling 429-aware load balancing. + PenaltyPeakEwma *Backend_BalanceP2C_PenaltyPeakEwma `protobuf:"bytes,3,opt,name=penalty_peak_ewma,json=penaltyPeakEwma,proto3,oneof"` +} + func (*Backend_BalanceP2C_PeakEwma_) isBackend_BalanceP2C_Load() {} +func (*Backend_BalanceP2C_PenaltyPeakEwma_) isBackend_BalanceP2C_Load() {} + type Backend_EndpointDiscovery_DestinationGet struct { state protoimpl.MessageState `protogen:"open.v1"` Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` @@ -3884,7 +3765,7 @@ type Backend_EndpointDiscovery_DestinationGet struct { func (x *Backend_EndpointDiscovery_DestinationGet) Reset() { *x = Backend_EndpointDiscovery_DestinationGet{} - mi := &file_outbound_proto_msgTypes[59] + mi := &file_outbound_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3896,7 +3777,7 @@ func (x *Backend_EndpointDiscovery_DestinationGet) String() string { func (*Backend_EndpointDiscovery_DestinationGet) ProtoMessage() {} func (x *Backend_EndpointDiscovery_DestinationGet) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[59] + mi := &file_outbound_proto_msgTypes[57] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3933,7 +3814,7 @@ type Backend_BalanceP2C_PeakEwma struct { func (x *Backend_BalanceP2C_PeakEwma) Reset() { *x = Backend_BalanceP2C_PeakEwma{} - mi := &file_outbound_proto_msgTypes[60] + mi := &file_outbound_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3945,7 +3826,7 @@ func (x *Backend_BalanceP2C_PeakEwma) String() string { func (*Backend_BalanceP2C_PeakEwma) ProtoMessage() {} func (x *Backend_BalanceP2C_PeakEwma) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[60] + mi := &file_outbound_proto_msgTypes[58] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3975,13 +3856,95 @@ func (x *Backend_BalanceP2C_PeakEwma) GetDecay() *duration.Duration { return nil } +type Backend_BalanceP2C_PenaltyPeakEwma struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Initial latency value used when no latencies have been + // recorded for an endpoint. + DefaultRtt *duration.Duration `protobuf:"bytes,1,opt,name=default_rtt,json=defaultRtt,proto3" json:"default_rtt,omitempty"` + // The duration of the moving window over which latency is observed. + Decay *duration.Duration `protobuf:"bytes,2,opt,name=decay,proto3" json:"decay,omitempty"` + // The penalty duration to inject when a matching response is received. + Penalty *duration.Duration `protobuf:"bytes,3,opt,name=penalty,proto3" json:"penalty,omitempty"` + // The maximum duration to respect for Retry-After hints. Hints that exceed this value will be capped. + MaxRetryAfter *duration.Duration `protobuf:"bytes,4,opt,name=max_retry_after,json=maxRetryAfter,proto3" json:"max_retry_after,omitempty"` + // The EWMA decay window for the penalty. + PenaltyDecay *duration.Duration `protobuf:"bytes,5,opt,name=penalty_decay,json=penaltyDecay,proto3" json:"penalty_decay,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Backend_BalanceP2C_PenaltyPeakEwma) Reset() { + *x = Backend_BalanceP2C_PenaltyPeakEwma{} + mi := &file_outbound_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Backend_BalanceP2C_PenaltyPeakEwma) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Backend_BalanceP2C_PenaltyPeakEwma) ProtoMessage() {} + +func (x *Backend_BalanceP2C_PenaltyPeakEwma) ProtoReflect() protoreflect.Message { + mi := &file_outbound_proto_msgTypes[59] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Backend_BalanceP2C_PenaltyPeakEwma.ProtoReflect.Descriptor instead. +func (*Backend_BalanceP2C_PenaltyPeakEwma) Descriptor() ([]byte, []int) { + return file_outbound_proto_rawDescGZIP(), []int{7, 1, 1} +} + +func (x *Backend_BalanceP2C_PenaltyPeakEwma) GetDefaultRtt() *duration.Duration { + if x != nil { + return x.DefaultRtt + } + return nil +} + +func (x *Backend_BalanceP2C_PenaltyPeakEwma) GetDecay() *duration.Duration { + if x != nil { + return x.Decay + } + return nil +} + +func (x *Backend_BalanceP2C_PenaltyPeakEwma) GetPenalty() *duration.Duration { + if x != nil { + return x.Penalty + } + return nil +} + +func (x *Backend_BalanceP2C_PenaltyPeakEwma) GetMaxRetryAfter() *duration.Duration { + if x != nil { + return x.MaxRetryAfter + } + return nil +} + +func (x *Backend_BalanceP2C_PenaltyPeakEwma) GetPenaltyDecay() *duration.Duration { + if x != nil { + return x.PenaltyDecay + } + return nil +} + type FailureAccrual_ConsecutiveFailures struct { state protoimpl.MessageState `protogen:"open.v1"` // Maximum consecutive failures before the circuit trips. // Set to 0 to disable (an unset field has the same effect). MaxFailures uint32 `protobuf:"varint,1,opt,name=max_failures,json=maxFailures,proto3" json:"max_failures,omitempty"` // Must be set. Controls the ejection duration before probe requests - // are allowed after any policy (not just CF) trips the circuit. + // are allowed after this policy trips the circuit. Backoff *ExponentialBackoff `protobuf:"bytes,2,opt,name=backoff,proto3" json:"backoff,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -3989,7 +3952,7 @@ type FailureAccrual_ConsecutiveFailures struct { func (x *FailureAccrual_ConsecutiveFailures) Reset() { *x = FailureAccrual_ConsecutiveFailures{} - mi := &file_outbound_proto_msgTypes[61] + mi := &file_outbound_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4001,7 +3964,7 @@ func (x *FailureAccrual_ConsecutiveFailures) String() string { func (*FailureAccrual_ConsecutiveFailures) ProtoMessage() {} func (x *FailureAccrual_ConsecutiveFailures) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[61] + mi := &file_outbound_proto_msgTypes[60] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4031,36 +3994,42 @@ func (x *FailureAccrual_ConsecutiveFailures) GetBackoff() *ExponentialBackoff { return nil } -type FailureAccrual_SuccessRate struct { +type FailureAccrual_Unified struct { state protoimpl.MessageState `protogen:"open.v1"` // Success rate threshold in [0.0, 1.0]. The circuit trips when the // EWMA success rate drops below this value. Set to 0.0 to disable. // Defined as `double` (not `float`) because this value is compared // against the proxy's f64 EWMA on every request. - Threshold float64 `protobuf:"fixed64,1,opt,name=threshold,proto3" json:"threshold,omitempty"` + SuccessRateThreshold float64 `protobuf:"fixed64,1,opt,name=success_rate_threshold,json=successRateThreshold,proto3" json:"success_rate_threshold,omitempty"` // EWMA decay window for success rate tracking. Decay *duration.Duration `protobuf:"bytes,2,opt,name=decay,proto3" json:"decay,omitempty"` // Minimum requests before the success rate policy can trip (cold-start guard). - MinRequests uint32 `protobuf:"varint,3,opt,name=min_requests,json=minRequests,proto3" json:"min_requests,omitempty"` + MinRequests uint32 `protobuf:"varint,3,opt,name=min_requests,json=minRequests,proto3" json:"min_requests,omitempty"` + // Maximum consecutive failures before the circuit trips. + // Set to 0 to disable (an unset field has the same effect). + MaxConsecutiveFailures uint32 `protobuf:"varint,4,opt,name=max_consecutive_failures,json=maxConsecutiveFailures,proto3" json:"max_consecutive_failures,omitempty"` + // Must be set. Controls the ejection duration before probe requests + // are allowed after this policy trips the circuit. + Backoff *ExponentialBackoff `protobuf:"bytes,5,opt,name=backoff,proto3" json:"backoff,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } -func (x *FailureAccrual_SuccessRate) Reset() { - *x = FailureAccrual_SuccessRate{} - mi := &file_outbound_proto_msgTypes[62] +func (x *FailureAccrual_Unified) Reset() { + *x = FailureAccrual_Unified{} + mi := &file_outbound_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } -func (x *FailureAccrual_SuccessRate) String() string { +func (x *FailureAccrual_Unified) String() string { return protoimpl.X.MessageStringOf(x) } -func (*FailureAccrual_SuccessRate) ProtoMessage() {} +func (*FailureAccrual_Unified) ProtoMessage() {} -func (x *FailureAccrual_SuccessRate) ProtoReflect() protoreflect.Message { - mi := &file_outbound_proto_msgTypes[62] +func (x *FailureAccrual_Unified) ProtoReflect() protoreflect.Message { + mi := &file_outbound_proto_msgTypes[61] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4071,32 +4040,46 @@ func (x *FailureAccrual_SuccessRate) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use FailureAccrual_SuccessRate.ProtoReflect.Descriptor instead. -func (*FailureAccrual_SuccessRate) Descriptor() ([]byte, []int) { +// Deprecated: Use FailureAccrual_Unified.ProtoReflect.Descriptor instead. +func (*FailureAccrual_Unified) Descriptor() ([]byte, []int) { return file_outbound_proto_rawDescGZIP(), []int{9, 1} } -func (x *FailureAccrual_SuccessRate) GetThreshold() float64 { +func (x *FailureAccrual_Unified) GetSuccessRateThreshold() float64 { if x != nil { - return x.Threshold + return x.SuccessRateThreshold } return 0 } -func (x *FailureAccrual_SuccessRate) GetDecay() *duration.Duration { +func (x *FailureAccrual_Unified) GetDecay() *duration.Duration { if x != nil { return x.Decay } return nil } -func (x *FailureAccrual_SuccessRate) GetMinRequests() uint32 { +func (x *FailureAccrual_Unified) GetMinRequests() uint32 { if x != nil { return x.MinRequests } return 0 } +func (x *FailureAccrual_Unified) GetMaxConsecutiveFailures() uint32 { + if x != nil { + return x.MaxConsecutiveFailures + } + return 0 +} + +func (x *FailureAccrual_Unified) GetBackoff() *ExponentialBackoff { + if x != nil { + return x.Backoff + } + return nil +} + var File_outbound_proto protoreflect.FileDescriptor const file_outbound_proto_rawDesc = "" + @@ -4110,7 +4093,8 @@ const file_outbound_proto_rawDesc = "" + "\x06target\"\x93\x01\n" + "\x0eOutboundPolicy\x12D\n" + "\bprotocol\x18\x01 \x01(\v2(.io.linkerd.proxy.outbound.ProxyProtocolR\bprotocol\x12;\n" + - "\bmetadata\x18\x02 \x01(\v2\x1f.io.linkerd.proxy.meta.MetadataR\bmetadata\"\xfc\r\n" + + "\bmetadata\x18\x02 \x01(\v2\x1f.io.linkerd.proxy.meta.MetadataR\bmetadata\"\xba\n" + + "\n" + "\rProxyProtocol\x12I\n" + "\x06detect\x18\x01 \x01(\v2/.io.linkerd.proxy.outbound.ProxyProtocol.DetectH\x00R\x06detect\x12I\n" + "\x06opaque\x18\x02 \x01(\v2/.io.linkerd.proxy.outbound.ProxyProtocol.OpaqueH\x00R\x06opaque\x12F\n" + @@ -4124,25 +4108,16 @@ const file_outbound_proto_rawDesc = "" + "\x05http1\x18\x03 \x01(\v2..io.linkerd.proxy.outbound.ProxyProtocol.Http1R\x05http1\x12D\n" + "\x05http2\x18\x04 \x01(\v2..io.linkerd.proxy.outbound.ProxyProtocol.Http2R\x05http2\x1aH\n" + "\x06Opaque\x12>\n" + - "\x06routes\x18\x01 \x03(\v2&.io.linkerd.proxy.outbound.OpaqueRouteR\x06routes\x1a\xaf\x02\n" + + "\x06routes\x18\x01 \x03(\v2&.io.linkerd.proxy.outbound.OpaqueRouteR\x06routes\x1a\x99\x01\n" + "\x05Http1\x12<\n" + "\x06routes\x18\x01 \x03(\v2$.io.linkerd.proxy.outbound.HttpRouteR\x06routes\x12R\n" + - "\x0ffailure_accrual\x18\x02 \x01(\v2).io.linkerd.proxy.outbound.FailureAccrualR\x0efailureAccrual\x12F\n" + - "\tload_bias\x18\x03 \x01(\v2).io.linkerd.proxy.outbound.LoadBiasConfigR\bloadBias\x12L\n" + - "\vretry_after\x18\x04 \x01(\v2+.io.linkerd.proxy.outbound.RetryAfterConfigR\n" + - "retryAfter\x1a\xaf\x02\n" + + "\x0ffailure_accrual\x18\x02 \x01(\v2).io.linkerd.proxy.outbound.FailureAccrualR\x0efailureAccrual\x1a\x99\x01\n" + "\x05Http2\x12<\n" + "\x06routes\x18\x01 \x03(\v2$.io.linkerd.proxy.outbound.HttpRouteR\x06routes\x12R\n" + - "\x0ffailure_accrual\x18\x02 \x01(\v2).io.linkerd.proxy.outbound.FailureAccrualR\x0efailureAccrual\x12F\n" + - "\tload_bias\x18\x03 \x01(\v2).io.linkerd.proxy.outbound.LoadBiasConfigR\bloadBias\x12L\n" + - "\vretry_after\x18\x04 \x01(\v2+.io.linkerd.proxy.outbound.RetryAfterConfigR\n" + - "retryAfter\x1a\xae\x02\n" + + "\x0ffailure_accrual\x18\x02 \x01(\v2).io.linkerd.proxy.outbound.FailureAccrualR\x0efailureAccrual\x1a\x98\x01\n" + "\x04Grpc\x12<\n" + "\x06routes\x18\x01 \x03(\v2$.io.linkerd.proxy.outbound.GrpcRouteR\x06routes\x12R\n" + - "\x0ffailure_accrual\x18\x02 \x01(\v2).io.linkerd.proxy.outbound.FailureAccrualR\x0efailureAccrual\x12F\n" + - "\tload_bias\x18\x03 \x01(\v2).io.linkerd.proxy.outbound.LoadBiasConfigR\bloadBias\x12L\n" + - "\vretry_after\x18\x04 \x01(\v2+.io.linkerd.proxy.outbound.RetryAfterConfigR\n" + - "retryAfter\x1aB\n" + + "\x0ffailure_accrual\x18\x02 \x01(\v2).io.linkerd.proxy.outbound.FailureAccrualR\x0efailureAccrual\x1aB\n" + "\x03Tls\x12;\n" + "\x06routes\x18\x01 \x03(\v2#.io.linkerd.proxy.outbound.TlsRouteR\x06routesB\x06\n" + "\x04kind\"\xa0\x13\n" + @@ -4299,7 +4274,7 @@ const file_outbound_proto_rawDesc = "" + "\afilters\x18\x03 \x03(\v2*.io.linkerd.proxy.outbound.TlsRoute.FilterR\afiltersJ\x04\b\x02\x10\x03\x1az\n" + "\x14WeightedRouteBackend\x12J\n" + "\abackend\x18\x01 \x01(\v20.io.linkerd.proxy.outbound.TlsRoute.RouteBackendR\abackend\x12\x16\n" + - "\x06weight\x18\x02 \x01(\rR\x06weightJ\x04\b\x04\x10\x05\"\xba\x06\n" + + "\x06weight\x18\x02 \x01(\rR\x06weightJ\x04\b\x04\x10\x05\"\x99\t\n" + "\aBackend\x12;\n" + "\bmetadata\x18\x01 \x01(\v2\x1f.io.linkerd.proxy.meta.MetadataR\bmetadata\x12F\n" + "\aforward\x18\x02 \x01(\v2*.io.linkerd.proxy.destination.WeightedAddrH\x00R\aforward\x12K\n" + @@ -4309,45 +4284,51 @@ const file_outbound_proto_rawDesc = "" + "\x03dst\x18\x01 \x01(\v2C.io.linkerd.proxy.outbound.Backend.EndpointDiscovery.DestinationGetH\x00R\x03dst\x1a$\n" + "\x0eDestinationGet\x12\x12\n" + "\x04path\x18\x01 \x01(\tR\x04pathB\x06\n" + - "\x04kind\x1a\xff\x02\n" + + "\x04kind\x1a\xde\x05\n" + "\n" + "BalanceP2c\x12R\n" + "\tdiscovery\x18\x01 \x01(\v24.io.linkerd.proxy.outbound.Backend.EndpointDiscoveryR\tdiscovery\x12U\n" + - "\tpeak_ewma\x18\x02 \x01(\v26.io.linkerd.proxy.outbound.Backend.BalanceP2c.PeakEwmaH\x00R\bpeakEwma\x12E\n" + - "\bejection\x18\x03 \x01(\v2).io.linkerd.proxy.outbound.EjectionConfigR\bejection\x1aw\n" + + "\tpeak_ewma\x18\x02 \x01(\v26.io.linkerd.proxy.outbound.Backend.BalanceP2c.PeakEwmaH\x00R\bpeakEwma\x12k\n" + + "\x11penalty_peak_ewma\x18\x03 \x01(\v2=.io.linkerd.proxy.outbound.Backend.BalanceP2c.PenaltyPeakEwmaH\x00R\x0fpenaltyPeakEwma\x1aw\n" + "\bPeakEwma\x12:\n" + "\vdefault_rtt\x18\x01 \x01(\v2\x19.google.protobuf.DurationR\n" + "defaultRtt\x12/\n" + - "\x05decay\x18\x02 \x01(\v2\x19.google.protobuf.DurationR\x05decayB\x06\n" + + "\x05decay\x18\x02 \x01(\v2\x19.google.protobuf.DurationR\x05decay\x1a\xb6\x02\n" + + "\x0fPenaltyPeakEwma\x12:\n" + + "\vdefault_rtt\x18\x01 \x01(\v2\x19.google.protobuf.DurationR\n" + + "defaultRtt\x12/\n" + + "\x05decay\x18\x02 \x01(\v2\x19.google.protobuf.DurationR\x05decay\x123\n" + + "\apenalty\x18\x03 \x01(\v2\x19.google.protobuf.DurationR\apenalty\x12A\n" + + "\x0fmax_retry_after\x18\x04 \x01(\v2\x19.google.protobuf.DurationR\rmaxRetryAfter\x12>\n" + + "\rpenalty_decay\x18\x05 \x01(\v2\x19.google.protobuf.DurationR\fpenaltyDecayB\x06\n" + "\x04loadB\x06\n" + "\x04kind\"i\n" + "\x05Queue\x12\x1a\n" + "\bcapacity\x18\x01 \x01(\rR\bcapacity\x12D\n" + - "\x10failfast_timeout\x18\x02 \x01(\v2\x19.google.protobuf.DurationR\x0ffailfastTimeout\"\xe1\x03\n" + - "\x0eFailureAccrual\x12p\n" + - "\x14consecutive_failures\x18\x01 \x01(\v2=.io.linkerd.proxy.outbound.FailureAccrual.ConsecutiveFailuresR\x13consecutiveFailures\x12X\n" + - "\fsuccess_rate\x18\x02 \x01(\v25.io.linkerd.proxy.outbound.FailureAccrual.SuccessRateR\vsuccessRate\x1a\x81\x01\n" + + "\x10failfast_timeout\x18\x02 \x01(\v2\x19.google.protobuf.DurationR\x0ffailfastTimeout\"\xbf\x05\n" + + "\x0eFailureAccrual\x12r\n" + + "\x14consecutive_failures\x18\x01 \x01(\v2=.io.linkerd.proxy.outbound.FailureAccrual.ConsecutiveFailuresH\x00R\x13consecutiveFailures\x12M\n" + + "\aunified\x18\x02 \x01(\v21.io.linkerd.proxy.outbound.FailureAccrual.UnifiedH\x00R\aunified\x12E\n" + + "\bejection\x18\x03 \x01(\v2).io.linkerd.proxy.outbound.EjectionConfigR\bejection\x1a\x81\x01\n" + "\x13ConsecutiveFailures\x12!\n" + "\fmax_failures\x18\x01 \x01(\rR\vmaxFailures\x12G\n" + - "\abackoff\x18\x02 \x01(\v2-.io.linkerd.proxy.outbound.ExponentialBackoffR\abackoff\x1a\x7f\n" + - "\vSuccessRate\x12\x1c\n" + - "\tthreshold\x18\x01 \x01(\x01R\tthreshold\x12/\n" + + "\abackoff\x18\x02 \x01(\v2-.io.linkerd.proxy.outbound.ExponentialBackoffR\abackoff\x1a\x96\x02\n" + + "\aUnified\x124\n" + + "\x16success_rate_threshold\x18\x01 \x01(\x01R\x14successRateThreshold\x12/\n" + "\x05decay\x18\x02 \x01(\v2\x19.google.protobuf.DurationR\x05decay\x12!\n" + - "\fmin_requests\x18\x03 \x01(\rR\vminRequests\"\x9f\x01\n" + - "\x0eLoadBiasConfig\x12\x18\n" + - "\aenabled\x18\x01 \x01(\bR\aenabled\x123\n" + - "\apenalty\x18\x02 \x01(\v2\x19.google.protobuf.DurationR\apenalty\x12>\n" + - "\rpenalty_decay\x18\x03 \x01(\v2\x19.google.protobuf.DurationR\fpenaltyDecay\"P\n" + - "\x10RetryAfterConfig\x12<\n" + - "\fmax_duration\x18\x01 \x01(\v2\x19.google.protobuf.DurationR\vmaxDuration\"@\n" + + "\fmin_requests\x18\x03 \x01(\rR\vminRequests\x128\n" + + "\x18max_consecutive_failures\x18\x04 \x01(\rR\x16maxConsecutiveFailures\x12G\n" + + "\abackoff\x18\x05 \x01(\v2-.io.linkerd.proxy.outbound.ExponentialBackoffR\abackoffB\x06\n" + + "\x04kind\"@\n" + "\x0eEjectionConfig\x12.\n" + - "\x13min_ready_endpoints\x18\x01 \x01(\rR\x11minReadyEndpoints\"\xaf\x01\n" + + "\x13min_ready_endpoints\x18\x01 \x01(\rR\x11minReadyEndpoints\"\xe8\x01\n" + "\x12ExponentialBackoff\x12:\n" + "\vmin_backoff\x18\x01 \x01(\v2\x19.google.protobuf.DurationR\n" + "minBackoff\x12:\n" + "\vmax_backoff\x18\x02 \x01(\v2\x19.google.protobuf.DurationR\n" + "maxBackoff\x12!\n" + - "\fjitter_ratio\x18\x03 \x01(\x02R\vjitterRatio2\xce\x01\n" + + "\fjitter_ratio\x18\x03 \x01(\x02R\vjitterRatio\x127\n" + + "\x18respect_retry_after_hint\x18\x04 \x01(\bR\x15respectRetryAfterHint2\xce\x01\n" + "\x10OutboundPolicies\x12Z\n" + "\x03Get\x12&.io.linkerd.proxy.outbound.TrafficSpec\x1a).io.linkerd.proxy.outbound.OutboundPolicy\"\x00\x12^\n" + "\x05Watch\x12&.io.linkerd.proxy.outbound.TrafficSpec\x1a).io.linkerd.proxy.outbound.OutboundPolicy\"\x000\x01B3Z1github.com/linkerd/linkerd2-proxy-api/go/outboundb\x06proto3" @@ -4364,7 +4345,7 @@ func file_outbound_proto_rawDescGZIP() []byte { return file_outbound_proto_rawDescData } -var file_outbound_proto_msgTypes = make([]protoimpl.MessageInfo, 63) +var file_outbound_proto_msgTypes = make([]protoimpl.MessageInfo, 62) var file_outbound_proto_goTypes = []any{ (*TrafficSpec)(nil), // 0: io.linkerd.proxy.outbound.TrafficSpec (*OutboundPolicy)(nil), // 1: io.linkerd.proxy.outbound.OutboundPolicy @@ -4376,211 +4357,208 @@ var file_outbound_proto_goTypes = []any{ (*Backend)(nil), // 7: io.linkerd.proxy.outbound.Backend (*Queue)(nil), // 8: io.linkerd.proxy.outbound.Queue (*FailureAccrual)(nil), // 9: io.linkerd.proxy.outbound.FailureAccrual - (*LoadBiasConfig)(nil), // 10: io.linkerd.proxy.outbound.LoadBiasConfig - (*RetryAfterConfig)(nil), // 11: io.linkerd.proxy.outbound.RetryAfterConfig - (*EjectionConfig)(nil), // 12: io.linkerd.proxy.outbound.EjectionConfig - (*ExponentialBackoff)(nil), // 13: io.linkerd.proxy.outbound.ExponentialBackoff - (*ProxyProtocol_Detect)(nil), // 14: io.linkerd.proxy.outbound.ProxyProtocol.Detect - (*ProxyProtocol_Opaque)(nil), // 15: io.linkerd.proxy.outbound.ProxyProtocol.Opaque - (*ProxyProtocol_Http1)(nil), // 16: io.linkerd.proxy.outbound.ProxyProtocol.Http1 - (*ProxyProtocol_Http2)(nil), // 17: io.linkerd.proxy.outbound.ProxyProtocol.Http2 - (*ProxyProtocol_Grpc)(nil), // 18: io.linkerd.proxy.outbound.ProxyProtocol.Grpc - (*ProxyProtocol_Tls)(nil), // 19: io.linkerd.proxy.outbound.ProxyProtocol.Tls - (*HttpRoute_Rule)(nil), // 20: io.linkerd.proxy.outbound.HttpRoute.Rule - (*HttpRoute_Filter)(nil), // 21: io.linkerd.proxy.outbound.HttpRoute.Filter - (*HttpRoute_Distribution)(nil), // 22: io.linkerd.proxy.outbound.HttpRoute.Distribution - (*HttpRoute_Retry)(nil), // 23: io.linkerd.proxy.outbound.HttpRoute.Retry - (*HttpRoute_RouteBackend)(nil), // 24: io.linkerd.proxy.outbound.HttpRoute.RouteBackend - (*HttpRoute_WeightedRouteBackend)(nil), // 25: io.linkerd.proxy.outbound.HttpRoute.WeightedRouteBackend - (*HttpRoute_Distribution_Empty)(nil), // 26: io.linkerd.proxy.outbound.HttpRoute.Distribution.Empty - (*HttpRoute_Distribution_FirstAvailable)(nil), // 27: io.linkerd.proxy.outbound.HttpRoute.Distribution.FirstAvailable - (*HttpRoute_Distribution_RandomAvailable)(nil), // 28: io.linkerd.proxy.outbound.HttpRoute.Distribution.RandomAvailable - (*HttpRoute_Retry_Conditions)(nil), // 29: io.linkerd.proxy.outbound.HttpRoute.Retry.Conditions - (*HttpRoute_Retry_Conditions_StatusRange)(nil), // 30: io.linkerd.proxy.outbound.HttpRoute.Retry.Conditions.StatusRange - (*GrpcRoute_Rule)(nil), // 31: io.linkerd.proxy.outbound.GrpcRoute.Rule - (*GrpcRoute_Filter)(nil), // 32: io.linkerd.proxy.outbound.GrpcRoute.Filter - (*GrpcRoute_Distribution)(nil), // 33: io.linkerd.proxy.outbound.GrpcRoute.Distribution - (*GrpcRoute_Retry)(nil), // 34: io.linkerd.proxy.outbound.GrpcRoute.Retry - (*GrpcRoute_RouteBackend)(nil), // 35: io.linkerd.proxy.outbound.GrpcRoute.RouteBackend - (*GrpcRoute_WeightedRouteBackend)(nil), // 36: io.linkerd.proxy.outbound.GrpcRoute.WeightedRouteBackend - (*GrpcRoute_Distribution_Empty)(nil), // 37: io.linkerd.proxy.outbound.GrpcRoute.Distribution.Empty - (*GrpcRoute_Distribution_FirstAvailable)(nil), // 38: io.linkerd.proxy.outbound.GrpcRoute.Distribution.FirstAvailable - (*GrpcRoute_Distribution_RandomAvailable)(nil), // 39: io.linkerd.proxy.outbound.GrpcRoute.Distribution.RandomAvailable - (*GrpcRoute_Retry_Conditions)(nil), // 40: io.linkerd.proxy.outbound.GrpcRoute.Retry.Conditions - (*OpaqueRoute_Rule)(nil), // 41: io.linkerd.proxy.outbound.OpaqueRoute.Rule - (*OpaqueRoute_Filter)(nil), // 42: io.linkerd.proxy.outbound.OpaqueRoute.Filter - (*OpaqueRoute_Distribution)(nil), // 43: io.linkerd.proxy.outbound.OpaqueRoute.Distribution - (*OpaqueRoute_RouteBackend)(nil), // 44: io.linkerd.proxy.outbound.OpaqueRoute.RouteBackend - (*OpaqueRoute_WeightedRouteBackend)(nil), // 45: io.linkerd.proxy.outbound.OpaqueRoute.WeightedRouteBackend - (*OpaqueRoute_Distribution_Empty)(nil), // 46: io.linkerd.proxy.outbound.OpaqueRoute.Distribution.Empty - (*OpaqueRoute_Distribution_FirstAvailable)(nil), // 47: io.linkerd.proxy.outbound.OpaqueRoute.Distribution.FirstAvailable - (*OpaqueRoute_Distribution_RandomAvailable)(nil), // 48: io.linkerd.proxy.outbound.OpaqueRoute.Distribution.RandomAvailable - (*TlsRoute_Rule)(nil), // 49: io.linkerd.proxy.outbound.TlsRoute.Rule - (*TlsRoute_Filter)(nil), // 50: io.linkerd.proxy.outbound.TlsRoute.Filter - (*TlsRoute_Distribution)(nil), // 51: io.linkerd.proxy.outbound.TlsRoute.Distribution - (*TlsRoute_RouteBackend)(nil), // 52: io.linkerd.proxy.outbound.TlsRoute.RouteBackend - (*TlsRoute_WeightedRouteBackend)(nil), // 53: io.linkerd.proxy.outbound.TlsRoute.WeightedRouteBackend - (*TlsRoute_Distribution_Empty)(nil), // 54: io.linkerd.proxy.outbound.TlsRoute.Distribution.Empty - (*TlsRoute_Distribution_FirstAvailable)(nil), // 55: io.linkerd.proxy.outbound.TlsRoute.Distribution.FirstAvailable - (*TlsRoute_Distribution_RandomAvailable)(nil), // 56: io.linkerd.proxy.outbound.TlsRoute.Distribution.RandomAvailable - (*Backend_EndpointDiscovery)(nil), // 57: io.linkerd.proxy.outbound.Backend.EndpointDiscovery - (*Backend_BalanceP2C)(nil), // 58: io.linkerd.proxy.outbound.Backend.BalanceP2c - (*Backend_EndpointDiscovery_DestinationGet)(nil), // 59: io.linkerd.proxy.outbound.Backend.EndpointDiscovery.DestinationGet - (*Backend_BalanceP2C_PeakEwma)(nil), // 60: io.linkerd.proxy.outbound.Backend.BalanceP2c.PeakEwma - (*FailureAccrual_ConsecutiveFailures)(nil), // 61: io.linkerd.proxy.outbound.FailureAccrual.ConsecutiveFailures - (*FailureAccrual_SuccessRate)(nil), // 62: io.linkerd.proxy.outbound.FailureAccrual.SuccessRate - (*net.TcpAddress)(nil), // 63: io.linkerd.proxy.net.TcpAddress - (*meta.Metadata)(nil), // 64: io.linkerd.proxy.meta.Metadata - (*http_route.HostMatch)(nil), // 65: io.linkerd.proxy.http_route.HostMatch - (*tls_route.SniMatch)(nil), // 66: io.linkerd.proxy.tls_route.SniMatch - (*destination.WeightedAddr)(nil), // 67: io.linkerd.proxy.destination.WeightedAddr - (*duration.Duration)(nil), // 68: google.protobuf.Duration - (*http_route.HttpRouteMatch)(nil), // 69: io.linkerd.proxy.http_route.HttpRouteMatch - (*http_route.Timeouts)(nil), // 70: io.linkerd.proxy.http_route.Timeouts - (*http_route.HttpFailureInjector)(nil), // 71: io.linkerd.proxy.http_route.HttpFailureInjector - (*http_route.RequestHeaderModifier)(nil), // 72: io.linkerd.proxy.http_route.RequestHeaderModifier - (*http_route.RequestRedirect)(nil), // 73: io.linkerd.proxy.http_route.RequestRedirect - (*http_route.ResponseHeaderModifier)(nil), // 74: io.linkerd.proxy.http_route.ResponseHeaderModifier - (*grpc_route.GrpcRouteMatch)(nil), // 75: io.linkerd.proxy.grpc_route.GrpcRouteMatch - (*grpc_route.GrpcFailureInjector)(nil), // 76: io.linkerd.proxy.grpc_route.GrpcFailureInjector - (*opaque_route.Invalid)(nil), // 77: io.linkerd.proxy.opaque_route.Invalid - (*opaque_route.Forbidden)(nil), // 78: io.linkerd.proxy.opaque_route.Forbidden + (*EjectionConfig)(nil), // 10: io.linkerd.proxy.outbound.EjectionConfig + (*ExponentialBackoff)(nil), // 11: io.linkerd.proxy.outbound.ExponentialBackoff + (*ProxyProtocol_Detect)(nil), // 12: io.linkerd.proxy.outbound.ProxyProtocol.Detect + (*ProxyProtocol_Opaque)(nil), // 13: io.linkerd.proxy.outbound.ProxyProtocol.Opaque + (*ProxyProtocol_Http1)(nil), // 14: io.linkerd.proxy.outbound.ProxyProtocol.Http1 + (*ProxyProtocol_Http2)(nil), // 15: io.linkerd.proxy.outbound.ProxyProtocol.Http2 + (*ProxyProtocol_Grpc)(nil), // 16: io.linkerd.proxy.outbound.ProxyProtocol.Grpc + (*ProxyProtocol_Tls)(nil), // 17: io.linkerd.proxy.outbound.ProxyProtocol.Tls + (*HttpRoute_Rule)(nil), // 18: io.linkerd.proxy.outbound.HttpRoute.Rule + (*HttpRoute_Filter)(nil), // 19: io.linkerd.proxy.outbound.HttpRoute.Filter + (*HttpRoute_Distribution)(nil), // 20: io.linkerd.proxy.outbound.HttpRoute.Distribution + (*HttpRoute_Retry)(nil), // 21: io.linkerd.proxy.outbound.HttpRoute.Retry + (*HttpRoute_RouteBackend)(nil), // 22: io.linkerd.proxy.outbound.HttpRoute.RouteBackend + (*HttpRoute_WeightedRouteBackend)(nil), // 23: io.linkerd.proxy.outbound.HttpRoute.WeightedRouteBackend + (*HttpRoute_Distribution_Empty)(nil), // 24: io.linkerd.proxy.outbound.HttpRoute.Distribution.Empty + (*HttpRoute_Distribution_FirstAvailable)(nil), // 25: io.linkerd.proxy.outbound.HttpRoute.Distribution.FirstAvailable + (*HttpRoute_Distribution_RandomAvailable)(nil), // 26: io.linkerd.proxy.outbound.HttpRoute.Distribution.RandomAvailable + (*HttpRoute_Retry_Conditions)(nil), // 27: io.linkerd.proxy.outbound.HttpRoute.Retry.Conditions + (*HttpRoute_Retry_Conditions_StatusRange)(nil), // 28: io.linkerd.proxy.outbound.HttpRoute.Retry.Conditions.StatusRange + (*GrpcRoute_Rule)(nil), // 29: io.linkerd.proxy.outbound.GrpcRoute.Rule + (*GrpcRoute_Filter)(nil), // 30: io.linkerd.proxy.outbound.GrpcRoute.Filter + (*GrpcRoute_Distribution)(nil), // 31: io.linkerd.proxy.outbound.GrpcRoute.Distribution + (*GrpcRoute_Retry)(nil), // 32: io.linkerd.proxy.outbound.GrpcRoute.Retry + (*GrpcRoute_RouteBackend)(nil), // 33: io.linkerd.proxy.outbound.GrpcRoute.RouteBackend + (*GrpcRoute_WeightedRouteBackend)(nil), // 34: io.linkerd.proxy.outbound.GrpcRoute.WeightedRouteBackend + (*GrpcRoute_Distribution_Empty)(nil), // 35: io.linkerd.proxy.outbound.GrpcRoute.Distribution.Empty + (*GrpcRoute_Distribution_FirstAvailable)(nil), // 36: io.linkerd.proxy.outbound.GrpcRoute.Distribution.FirstAvailable + (*GrpcRoute_Distribution_RandomAvailable)(nil), // 37: io.linkerd.proxy.outbound.GrpcRoute.Distribution.RandomAvailable + (*GrpcRoute_Retry_Conditions)(nil), // 38: io.linkerd.proxy.outbound.GrpcRoute.Retry.Conditions + (*OpaqueRoute_Rule)(nil), // 39: io.linkerd.proxy.outbound.OpaqueRoute.Rule + (*OpaqueRoute_Filter)(nil), // 40: io.linkerd.proxy.outbound.OpaqueRoute.Filter + (*OpaqueRoute_Distribution)(nil), // 41: io.linkerd.proxy.outbound.OpaqueRoute.Distribution + (*OpaqueRoute_RouteBackend)(nil), // 42: io.linkerd.proxy.outbound.OpaqueRoute.RouteBackend + (*OpaqueRoute_WeightedRouteBackend)(nil), // 43: io.linkerd.proxy.outbound.OpaqueRoute.WeightedRouteBackend + (*OpaqueRoute_Distribution_Empty)(nil), // 44: io.linkerd.proxy.outbound.OpaqueRoute.Distribution.Empty + (*OpaqueRoute_Distribution_FirstAvailable)(nil), // 45: io.linkerd.proxy.outbound.OpaqueRoute.Distribution.FirstAvailable + (*OpaqueRoute_Distribution_RandomAvailable)(nil), // 46: io.linkerd.proxy.outbound.OpaqueRoute.Distribution.RandomAvailable + (*TlsRoute_Rule)(nil), // 47: io.linkerd.proxy.outbound.TlsRoute.Rule + (*TlsRoute_Filter)(nil), // 48: io.linkerd.proxy.outbound.TlsRoute.Filter + (*TlsRoute_Distribution)(nil), // 49: io.linkerd.proxy.outbound.TlsRoute.Distribution + (*TlsRoute_RouteBackend)(nil), // 50: io.linkerd.proxy.outbound.TlsRoute.RouteBackend + (*TlsRoute_WeightedRouteBackend)(nil), // 51: io.linkerd.proxy.outbound.TlsRoute.WeightedRouteBackend + (*TlsRoute_Distribution_Empty)(nil), // 52: io.linkerd.proxy.outbound.TlsRoute.Distribution.Empty + (*TlsRoute_Distribution_FirstAvailable)(nil), // 53: io.linkerd.proxy.outbound.TlsRoute.Distribution.FirstAvailable + (*TlsRoute_Distribution_RandomAvailable)(nil), // 54: io.linkerd.proxy.outbound.TlsRoute.Distribution.RandomAvailable + (*Backend_EndpointDiscovery)(nil), // 55: io.linkerd.proxy.outbound.Backend.EndpointDiscovery + (*Backend_BalanceP2C)(nil), // 56: io.linkerd.proxy.outbound.Backend.BalanceP2c + (*Backend_EndpointDiscovery_DestinationGet)(nil), // 57: io.linkerd.proxy.outbound.Backend.EndpointDiscovery.DestinationGet + (*Backend_BalanceP2C_PeakEwma)(nil), // 58: io.linkerd.proxy.outbound.Backend.BalanceP2c.PeakEwma + (*Backend_BalanceP2C_PenaltyPeakEwma)(nil), // 59: io.linkerd.proxy.outbound.Backend.BalanceP2c.PenaltyPeakEwma + (*FailureAccrual_ConsecutiveFailures)(nil), // 60: io.linkerd.proxy.outbound.FailureAccrual.ConsecutiveFailures + (*FailureAccrual_Unified)(nil), // 61: io.linkerd.proxy.outbound.FailureAccrual.Unified + (*net.TcpAddress)(nil), // 62: io.linkerd.proxy.net.TcpAddress + (*meta.Metadata)(nil), // 63: io.linkerd.proxy.meta.Metadata + (*http_route.HostMatch)(nil), // 64: io.linkerd.proxy.http_route.HostMatch + (*tls_route.SniMatch)(nil), // 65: io.linkerd.proxy.tls_route.SniMatch + (*destination.WeightedAddr)(nil), // 66: io.linkerd.proxy.destination.WeightedAddr + (*duration.Duration)(nil), // 67: google.protobuf.Duration + (*http_route.HttpRouteMatch)(nil), // 68: io.linkerd.proxy.http_route.HttpRouteMatch + (*http_route.Timeouts)(nil), // 69: io.linkerd.proxy.http_route.Timeouts + (*http_route.HttpFailureInjector)(nil), // 70: io.linkerd.proxy.http_route.HttpFailureInjector + (*http_route.RequestHeaderModifier)(nil), // 71: io.linkerd.proxy.http_route.RequestHeaderModifier + (*http_route.RequestRedirect)(nil), // 72: io.linkerd.proxy.http_route.RequestRedirect + (*http_route.ResponseHeaderModifier)(nil), // 73: io.linkerd.proxy.http_route.ResponseHeaderModifier + (*grpc_route.GrpcRouteMatch)(nil), // 74: io.linkerd.proxy.grpc_route.GrpcRouteMatch + (*grpc_route.GrpcFailureInjector)(nil), // 75: io.linkerd.proxy.grpc_route.GrpcFailureInjector + (*opaque_route.Invalid)(nil), // 76: io.linkerd.proxy.opaque_route.Invalid + (*opaque_route.Forbidden)(nil), // 77: io.linkerd.proxy.opaque_route.Forbidden } var file_outbound_proto_depIdxs = []int32{ - 63, // 0: io.linkerd.proxy.outbound.TrafficSpec.addr:type_name -> io.linkerd.proxy.net.TcpAddress + 62, // 0: io.linkerd.proxy.outbound.TrafficSpec.addr:type_name -> io.linkerd.proxy.net.TcpAddress 2, // 1: io.linkerd.proxy.outbound.OutboundPolicy.protocol:type_name -> io.linkerd.proxy.outbound.ProxyProtocol - 64, // 2: io.linkerd.proxy.outbound.OutboundPolicy.metadata:type_name -> io.linkerd.proxy.meta.Metadata - 14, // 3: io.linkerd.proxy.outbound.ProxyProtocol.detect:type_name -> io.linkerd.proxy.outbound.ProxyProtocol.Detect - 15, // 4: io.linkerd.proxy.outbound.ProxyProtocol.opaque:type_name -> io.linkerd.proxy.outbound.ProxyProtocol.Opaque - 16, // 5: io.linkerd.proxy.outbound.ProxyProtocol.http1:type_name -> io.linkerd.proxy.outbound.ProxyProtocol.Http1 - 17, // 6: io.linkerd.proxy.outbound.ProxyProtocol.http2:type_name -> io.linkerd.proxy.outbound.ProxyProtocol.Http2 - 18, // 7: io.linkerd.proxy.outbound.ProxyProtocol.grpc:type_name -> io.linkerd.proxy.outbound.ProxyProtocol.Grpc - 19, // 8: io.linkerd.proxy.outbound.ProxyProtocol.tls:type_name -> io.linkerd.proxy.outbound.ProxyProtocol.Tls - 64, // 9: io.linkerd.proxy.outbound.HttpRoute.metadata:type_name -> io.linkerd.proxy.meta.Metadata - 65, // 10: io.linkerd.proxy.outbound.HttpRoute.hosts:type_name -> io.linkerd.proxy.http_route.HostMatch - 20, // 11: io.linkerd.proxy.outbound.HttpRoute.rules:type_name -> io.linkerd.proxy.outbound.HttpRoute.Rule - 64, // 12: io.linkerd.proxy.outbound.GrpcRoute.metadata:type_name -> io.linkerd.proxy.meta.Metadata - 65, // 13: io.linkerd.proxy.outbound.GrpcRoute.hosts:type_name -> io.linkerd.proxy.http_route.HostMatch - 31, // 14: io.linkerd.proxy.outbound.GrpcRoute.rules:type_name -> io.linkerd.proxy.outbound.GrpcRoute.Rule - 64, // 15: io.linkerd.proxy.outbound.OpaqueRoute.metadata:type_name -> io.linkerd.proxy.meta.Metadata - 41, // 16: io.linkerd.proxy.outbound.OpaqueRoute.rules:type_name -> io.linkerd.proxy.outbound.OpaqueRoute.Rule - 64, // 17: io.linkerd.proxy.outbound.TlsRoute.metadata:type_name -> io.linkerd.proxy.meta.Metadata - 66, // 18: io.linkerd.proxy.outbound.TlsRoute.snis:type_name -> io.linkerd.proxy.tls_route.SniMatch - 49, // 19: io.linkerd.proxy.outbound.TlsRoute.rules:type_name -> io.linkerd.proxy.outbound.TlsRoute.Rule - 64, // 20: io.linkerd.proxy.outbound.Backend.metadata:type_name -> io.linkerd.proxy.meta.Metadata - 67, // 21: io.linkerd.proxy.outbound.Backend.forward:type_name -> io.linkerd.proxy.destination.WeightedAddr - 58, // 22: io.linkerd.proxy.outbound.Backend.balancer:type_name -> io.linkerd.proxy.outbound.Backend.BalanceP2c + 63, // 2: io.linkerd.proxy.outbound.OutboundPolicy.metadata:type_name -> io.linkerd.proxy.meta.Metadata + 12, // 3: io.linkerd.proxy.outbound.ProxyProtocol.detect:type_name -> io.linkerd.proxy.outbound.ProxyProtocol.Detect + 13, // 4: io.linkerd.proxy.outbound.ProxyProtocol.opaque:type_name -> io.linkerd.proxy.outbound.ProxyProtocol.Opaque + 14, // 5: io.linkerd.proxy.outbound.ProxyProtocol.http1:type_name -> io.linkerd.proxy.outbound.ProxyProtocol.Http1 + 15, // 6: io.linkerd.proxy.outbound.ProxyProtocol.http2:type_name -> io.linkerd.proxy.outbound.ProxyProtocol.Http2 + 16, // 7: io.linkerd.proxy.outbound.ProxyProtocol.grpc:type_name -> io.linkerd.proxy.outbound.ProxyProtocol.Grpc + 17, // 8: io.linkerd.proxy.outbound.ProxyProtocol.tls:type_name -> io.linkerd.proxy.outbound.ProxyProtocol.Tls + 63, // 9: io.linkerd.proxy.outbound.HttpRoute.metadata:type_name -> io.linkerd.proxy.meta.Metadata + 64, // 10: io.linkerd.proxy.outbound.HttpRoute.hosts:type_name -> io.linkerd.proxy.http_route.HostMatch + 18, // 11: io.linkerd.proxy.outbound.HttpRoute.rules:type_name -> io.linkerd.proxy.outbound.HttpRoute.Rule + 63, // 12: io.linkerd.proxy.outbound.GrpcRoute.metadata:type_name -> io.linkerd.proxy.meta.Metadata + 64, // 13: io.linkerd.proxy.outbound.GrpcRoute.hosts:type_name -> io.linkerd.proxy.http_route.HostMatch + 29, // 14: io.linkerd.proxy.outbound.GrpcRoute.rules:type_name -> io.linkerd.proxy.outbound.GrpcRoute.Rule + 63, // 15: io.linkerd.proxy.outbound.OpaqueRoute.metadata:type_name -> io.linkerd.proxy.meta.Metadata + 39, // 16: io.linkerd.proxy.outbound.OpaqueRoute.rules:type_name -> io.linkerd.proxy.outbound.OpaqueRoute.Rule + 63, // 17: io.linkerd.proxy.outbound.TlsRoute.metadata:type_name -> io.linkerd.proxy.meta.Metadata + 65, // 18: io.linkerd.proxy.outbound.TlsRoute.snis:type_name -> io.linkerd.proxy.tls_route.SniMatch + 47, // 19: io.linkerd.proxy.outbound.TlsRoute.rules:type_name -> io.linkerd.proxy.outbound.TlsRoute.Rule + 63, // 20: io.linkerd.proxy.outbound.Backend.metadata:type_name -> io.linkerd.proxy.meta.Metadata + 66, // 21: io.linkerd.proxy.outbound.Backend.forward:type_name -> io.linkerd.proxy.destination.WeightedAddr + 56, // 22: io.linkerd.proxy.outbound.Backend.balancer:type_name -> io.linkerd.proxy.outbound.Backend.BalanceP2c 8, // 23: io.linkerd.proxy.outbound.Backend.queue:type_name -> io.linkerd.proxy.outbound.Queue - 68, // 24: io.linkerd.proxy.outbound.Queue.failfast_timeout:type_name -> google.protobuf.Duration - 61, // 25: io.linkerd.proxy.outbound.FailureAccrual.consecutive_failures:type_name -> io.linkerd.proxy.outbound.FailureAccrual.ConsecutiveFailures - 62, // 26: io.linkerd.proxy.outbound.FailureAccrual.success_rate:type_name -> io.linkerd.proxy.outbound.FailureAccrual.SuccessRate - 68, // 27: io.linkerd.proxy.outbound.LoadBiasConfig.penalty:type_name -> google.protobuf.Duration - 68, // 28: io.linkerd.proxy.outbound.LoadBiasConfig.penalty_decay:type_name -> google.protobuf.Duration - 68, // 29: io.linkerd.proxy.outbound.RetryAfterConfig.max_duration:type_name -> google.protobuf.Duration - 68, // 30: io.linkerd.proxy.outbound.ExponentialBackoff.min_backoff:type_name -> google.protobuf.Duration - 68, // 31: io.linkerd.proxy.outbound.ExponentialBackoff.max_backoff:type_name -> google.protobuf.Duration - 68, // 32: io.linkerd.proxy.outbound.ProxyProtocol.Detect.timeout:type_name -> google.protobuf.Duration - 15, // 33: io.linkerd.proxy.outbound.ProxyProtocol.Detect.opaque:type_name -> io.linkerd.proxy.outbound.ProxyProtocol.Opaque - 16, // 34: io.linkerd.proxy.outbound.ProxyProtocol.Detect.http1:type_name -> io.linkerd.proxy.outbound.ProxyProtocol.Http1 - 17, // 35: io.linkerd.proxy.outbound.ProxyProtocol.Detect.http2:type_name -> io.linkerd.proxy.outbound.ProxyProtocol.Http2 - 5, // 36: io.linkerd.proxy.outbound.ProxyProtocol.Opaque.routes:type_name -> io.linkerd.proxy.outbound.OpaqueRoute - 3, // 37: io.linkerd.proxy.outbound.ProxyProtocol.Http1.routes:type_name -> io.linkerd.proxy.outbound.HttpRoute - 9, // 38: io.linkerd.proxy.outbound.ProxyProtocol.Http1.failure_accrual:type_name -> io.linkerd.proxy.outbound.FailureAccrual - 10, // 39: io.linkerd.proxy.outbound.ProxyProtocol.Http1.load_bias:type_name -> io.linkerd.proxy.outbound.LoadBiasConfig - 11, // 40: io.linkerd.proxy.outbound.ProxyProtocol.Http1.retry_after:type_name -> io.linkerd.proxy.outbound.RetryAfterConfig - 3, // 41: io.linkerd.proxy.outbound.ProxyProtocol.Http2.routes:type_name -> io.linkerd.proxy.outbound.HttpRoute - 9, // 42: io.linkerd.proxy.outbound.ProxyProtocol.Http2.failure_accrual:type_name -> io.linkerd.proxy.outbound.FailureAccrual - 10, // 43: io.linkerd.proxy.outbound.ProxyProtocol.Http2.load_bias:type_name -> io.linkerd.proxy.outbound.LoadBiasConfig - 11, // 44: io.linkerd.proxy.outbound.ProxyProtocol.Http2.retry_after:type_name -> io.linkerd.proxy.outbound.RetryAfterConfig - 4, // 45: io.linkerd.proxy.outbound.ProxyProtocol.Grpc.routes:type_name -> io.linkerd.proxy.outbound.GrpcRoute - 9, // 46: io.linkerd.proxy.outbound.ProxyProtocol.Grpc.failure_accrual:type_name -> io.linkerd.proxy.outbound.FailureAccrual - 10, // 47: io.linkerd.proxy.outbound.ProxyProtocol.Grpc.load_bias:type_name -> io.linkerd.proxy.outbound.LoadBiasConfig - 11, // 48: io.linkerd.proxy.outbound.ProxyProtocol.Grpc.retry_after:type_name -> io.linkerd.proxy.outbound.RetryAfterConfig - 6, // 49: io.linkerd.proxy.outbound.ProxyProtocol.Tls.routes:type_name -> io.linkerd.proxy.outbound.TlsRoute - 69, // 50: io.linkerd.proxy.outbound.HttpRoute.Rule.matches:type_name -> io.linkerd.proxy.http_route.HttpRouteMatch - 21, // 51: io.linkerd.proxy.outbound.HttpRoute.Rule.filters:type_name -> io.linkerd.proxy.outbound.HttpRoute.Filter - 22, // 52: io.linkerd.proxy.outbound.HttpRoute.Rule.backends:type_name -> io.linkerd.proxy.outbound.HttpRoute.Distribution - 68, // 53: io.linkerd.proxy.outbound.HttpRoute.Rule.requestTimeout:type_name -> google.protobuf.Duration - 70, // 54: io.linkerd.proxy.outbound.HttpRoute.Rule.timeouts:type_name -> io.linkerd.proxy.http_route.Timeouts - 23, // 55: io.linkerd.proxy.outbound.HttpRoute.Rule.retry:type_name -> io.linkerd.proxy.outbound.HttpRoute.Retry - 71, // 56: io.linkerd.proxy.outbound.HttpRoute.Filter.failure_injector:type_name -> io.linkerd.proxy.http_route.HttpFailureInjector - 72, // 57: io.linkerd.proxy.outbound.HttpRoute.Filter.request_header_modifier:type_name -> io.linkerd.proxy.http_route.RequestHeaderModifier - 73, // 58: io.linkerd.proxy.outbound.HttpRoute.Filter.redirect:type_name -> io.linkerd.proxy.http_route.RequestRedirect - 74, // 59: io.linkerd.proxy.outbound.HttpRoute.Filter.response_header_modifier:type_name -> io.linkerd.proxy.http_route.ResponseHeaderModifier - 26, // 60: io.linkerd.proxy.outbound.HttpRoute.Distribution.empty:type_name -> io.linkerd.proxy.outbound.HttpRoute.Distribution.Empty - 27, // 61: io.linkerd.proxy.outbound.HttpRoute.Distribution.first_available:type_name -> io.linkerd.proxy.outbound.HttpRoute.Distribution.FirstAvailable - 28, // 62: io.linkerd.proxy.outbound.HttpRoute.Distribution.random_available:type_name -> io.linkerd.proxy.outbound.HttpRoute.Distribution.RandomAvailable - 29, // 63: io.linkerd.proxy.outbound.HttpRoute.Retry.conditions:type_name -> io.linkerd.proxy.outbound.HttpRoute.Retry.Conditions - 68, // 64: io.linkerd.proxy.outbound.HttpRoute.Retry.timeout:type_name -> google.protobuf.Duration - 13, // 65: io.linkerd.proxy.outbound.HttpRoute.Retry.backoff:type_name -> io.linkerd.proxy.outbound.ExponentialBackoff - 7, // 66: io.linkerd.proxy.outbound.HttpRoute.RouteBackend.backend:type_name -> io.linkerd.proxy.outbound.Backend - 21, // 67: io.linkerd.proxy.outbound.HttpRoute.RouteBackend.filters:type_name -> io.linkerd.proxy.outbound.HttpRoute.Filter - 68, // 68: io.linkerd.proxy.outbound.HttpRoute.RouteBackend.requestTimeout:type_name -> google.protobuf.Duration - 24, // 69: io.linkerd.proxy.outbound.HttpRoute.WeightedRouteBackend.backend:type_name -> io.linkerd.proxy.outbound.HttpRoute.RouteBackend - 24, // 70: io.linkerd.proxy.outbound.HttpRoute.Distribution.FirstAvailable.backends:type_name -> io.linkerd.proxy.outbound.HttpRoute.RouteBackend - 25, // 71: io.linkerd.proxy.outbound.HttpRoute.Distribution.RandomAvailable.backends:type_name -> io.linkerd.proxy.outbound.HttpRoute.WeightedRouteBackend - 30, // 72: io.linkerd.proxy.outbound.HttpRoute.Retry.Conditions.status_ranges:type_name -> io.linkerd.proxy.outbound.HttpRoute.Retry.Conditions.StatusRange - 75, // 73: io.linkerd.proxy.outbound.GrpcRoute.Rule.matches:type_name -> io.linkerd.proxy.grpc_route.GrpcRouteMatch - 32, // 74: io.linkerd.proxy.outbound.GrpcRoute.Rule.filters:type_name -> io.linkerd.proxy.outbound.GrpcRoute.Filter - 33, // 75: io.linkerd.proxy.outbound.GrpcRoute.Rule.backends:type_name -> io.linkerd.proxy.outbound.GrpcRoute.Distribution - 68, // 76: io.linkerd.proxy.outbound.GrpcRoute.Rule.requestTimeout:type_name -> google.protobuf.Duration - 70, // 77: io.linkerd.proxy.outbound.GrpcRoute.Rule.timeouts:type_name -> io.linkerd.proxy.http_route.Timeouts - 34, // 78: io.linkerd.proxy.outbound.GrpcRoute.Rule.retry:type_name -> io.linkerd.proxy.outbound.GrpcRoute.Retry - 76, // 79: io.linkerd.proxy.outbound.GrpcRoute.Filter.failure_injector:type_name -> io.linkerd.proxy.grpc_route.GrpcFailureInjector - 72, // 80: io.linkerd.proxy.outbound.GrpcRoute.Filter.request_header_modifier:type_name -> io.linkerd.proxy.http_route.RequestHeaderModifier - 37, // 81: io.linkerd.proxy.outbound.GrpcRoute.Distribution.empty:type_name -> io.linkerd.proxy.outbound.GrpcRoute.Distribution.Empty - 38, // 82: io.linkerd.proxy.outbound.GrpcRoute.Distribution.first_available:type_name -> io.linkerd.proxy.outbound.GrpcRoute.Distribution.FirstAvailable - 39, // 83: io.linkerd.proxy.outbound.GrpcRoute.Distribution.random_available:type_name -> io.linkerd.proxy.outbound.GrpcRoute.Distribution.RandomAvailable - 40, // 84: io.linkerd.proxy.outbound.GrpcRoute.Retry.conditions:type_name -> io.linkerd.proxy.outbound.GrpcRoute.Retry.Conditions - 68, // 85: io.linkerd.proxy.outbound.GrpcRoute.Retry.timeout:type_name -> google.protobuf.Duration - 13, // 86: io.linkerd.proxy.outbound.GrpcRoute.Retry.backoff:type_name -> io.linkerd.proxy.outbound.ExponentialBackoff - 7, // 87: io.linkerd.proxy.outbound.GrpcRoute.RouteBackend.backend:type_name -> io.linkerd.proxy.outbound.Backend - 32, // 88: io.linkerd.proxy.outbound.GrpcRoute.RouteBackend.filters:type_name -> io.linkerd.proxy.outbound.GrpcRoute.Filter - 68, // 89: io.linkerd.proxy.outbound.GrpcRoute.RouteBackend.requestTimeout:type_name -> google.protobuf.Duration - 35, // 90: io.linkerd.proxy.outbound.GrpcRoute.WeightedRouteBackend.backend:type_name -> io.linkerd.proxy.outbound.GrpcRoute.RouteBackend - 35, // 91: io.linkerd.proxy.outbound.GrpcRoute.Distribution.FirstAvailable.backends:type_name -> io.linkerd.proxy.outbound.GrpcRoute.RouteBackend - 36, // 92: io.linkerd.proxy.outbound.GrpcRoute.Distribution.RandomAvailable.backends:type_name -> io.linkerd.proxy.outbound.GrpcRoute.WeightedRouteBackend - 43, // 93: io.linkerd.proxy.outbound.OpaqueRoute.Rule.backends:type_name -> io.linkerd.proxy.outbound.OpaqueRoute.Distribution - 42, // 94: io.linkerd.proxy.outbound.OpaqueRoute.Rule.filters:type_name -> io.linkerd.proxy.outbound.OpaqueRoute.Filter - 77, // 95: io.linkerd.proxy.outbound.OpaqueRoute.Filter.invalid:type_name -> io.linkerd.proxy.opaque_route.Invalid - 78, // 96: io.linkerd.proxy.outbound.OpaqueRoute.Filter.forbidden:type_name -> io.linkerd.proxy.opaque_route.Forbidden - 46, // 97: io.linkerd.proxy.outbound.OpaqueRoute.Distribution.empty:type_name -> io.linkerd.proxy.outbound.OpaqueRoute.Distribution.Empty - 47, // 98: io.linkerd.proxy.outbound.OpaqueRoute.Distribution.first_available:type_name -> io.linkerd.proxy.outbound.OpaqueRoute.Distribution.FirstAvailable - 48, // 99: io.linkerd.proxy.outbound.OpaqueRoute.Distribution.random_available:type_name -> io.linkerd.proxy.outbound.OpaqueRoute.Distribution.RandomAvailable - 7, // 100: io.linkerd.proxy.outbound.OpaqueRoute.RouteBackend.backend:type_name -> io.linkerd.proxy.outbound.Backend - 42, // 101: io.linkerd.proxy.outbound.OpaqueRoute.RouteBackend.filters:type_name -> io.linkerd.proxy.outbound.OpaqueRoute.Filter - 44, // 102: io.linkerd.proxy.outbound.OpaqueRoute.WeightedRouteBackend.backend:type_name -> io.linkerd.proxy.outbound.OpaqueRoute.RouteBackend - 44, // 103: io.linkerd.proxy.outbound.OpaqueRoute.Distribution.FirstAvailable.backends:type_name -> io.linkerd.proxy.outbound.OpaqueRoute.RouteBackend - 45, // 104: io.linkerd.proxy.outbound.OpaqueRoute.Distribution.RandomAvailable.backends:type_name -> io.linkerd.proxy.outbound.OpaqueRoute.WeightedRouteBackend - 51, // 105: io.linkerd.proxy.outbound.TlsRoute.Rule.backends:type_name -> io.linkerd.proxy.outbound.TlsRoute.Distribution - 50, // 106: io.linkerd.proxy.outbound.TlsRoute.Rule.filters:type_name -> io.linkerd.proxy.outbound.TlsRoute.Filter - 77, // 107: io.linkerd.proxy.outbound.TlsRoute.Filter.invalid:type_name -> io.linkerd.proxy.opaque_route.Invalid - 78, // 108: io.linkerd.proxy.outbound.TlsRoute.Filter.forbidden:type_name -> io.linkerd.proxy.opaque_route.Forbidden - 54, // 109: io.linkerd.proxy.outbound.TlsRoute.Distribution.empty:type_name -> io.linkerd.proxy.outbound.TlsRoute.Distribution.Empty - 55, // 110: io.linkerd.proxy.outbound.TlsRoute.Distribution.first_available:type_name -> io.linkerd.proxy.outbound.TlsRoute.Distribution.FirstAvailable - 56, // 111: io.linkerd.proxy.outbound.TlsRoute.Distribution.random_available:type_name -> io.linkerd.proxy.outbound.TlsRoute.Distribution.RandomAvailable - 7, // 112: io.linkerd.proxy.outbound.TlsRoute.RouteBackend.backend:type_name -> io.linkerd.proxy.outbound.Backend - 50, // 113: io.linkerd.proxy.outbound.TlsRoute.RouteBackend.filters:type_name -> io.linkerd.proxy.outbound.TlsRoute.Filter - 52, // 114: io.linkerd.proxy.outbound.TlsRoute.WeightedRouteBackend.backend:type_name -> io.linkerd.proxy.outbound.TlsRoute.RouteBackend - 52, // 115: io.linkerd.proxy.outbound.TlsRoute.Distribution.FirstAvailable.backends:type_name -> io.linkerd.proxy.outbound.TlsRoute.RouteBackend - 53, // 116: io.linkerd.proxy.outbound.TlsRoute.Distribution.RandomAvailable.backends:type_name -> io.linkerd.proxy.outbound.TlsRoute.WeightedRouteBackend - 59, // 117: io.linkerd.proxy.outbound.Backend.EndpointDiscovery.dst:type_name -> io.linkerd.proxy.outbound.Backend.EndpointDiscovery.DestinationGet - 57, // 118: io.linkerd.proxy.outbound.Backend.BalanceP2c.discovery:type_name -> io.linkerd.proxy.outbound.Backend.EndpointDiscovery - 60, // 119: io.linkerd.proxy.outbound.Backend.BalanceP2c.peak_ewma:type_name -> io.linkerd.proxy.outbound.Backend.BalanceP2c.PeakEwma - 12, // 120: io.linkerd.proxy.outbound.Backend.BalanceP2c.ejection:type_name -> io.linkerd.proxy.outbound.EjectionConfig - 68, // 121: io.linkerd.proxy.outbound.Backend.BalanceP2c.PeakEwma.default_rtt:type_name -> google.protobuf.Duration - 68, // 122: io.linkerd.proxy.outbound.Backend.BalanceP2c.PeakEwma.decay:type_name -> google.protobuf.Duration - 13, // 123: io.linkerd.proxy.outbound.FailureAccrual.ConsecutiveFailures.backoff:type_name -> io.linkerd.proxy.outbound.ExponentialBackoff - 68, // 124: io.linkerd.proxy.outbound.FailureAccrual.SuccessRate.decay:type_name -> google.protobuf.Duration - 0, // 125: io.linkerd.proxy.outbound.OutboundPolicies.Get:input_type -> io.linkerd.proxy.outbound.TrafficSpec - 0, // 126: io.linkerd.proxy.outbound.OutboundPolicies.Watch:input_type -> io.linkerd.proxy.outbound.TrafficSpec - 1, // 127: io.linkerd.proxy.outbound.OutboundPolicies.Get:output_type -> io.linkerd.proxy.outbound.OutboundPolicy - 1, // 128: io.linkerd.proxy.outbound.OutboundPolicies.Watch:output_type -> io.linkerd.proxy.outbound.OutboundPolicy - 127, // [127:129] is the sub-list for method output_type - 125, // [125:127] is the sub-list for method input_type - 125, // [125:125] is the sub-list for extension type_name - 125, // [125:125] is the sub-list for extension extendee - 0, // [0:125] is the sub-list for field type_name + 67, // 24: io.linkerd.proxy.outbound.Queue.failfast_timeout:type_name -> google.protobuf.Duration + 60, // 25: io.linkerd.proxy.outbound.FailureAccrual.consecutive_failures:type_name -> io.linkerd.proxy.outbound.FailureAccrual.ConsecutiveFailures + 61, // 26: io.linkerd.proxy.outbound.FailureAccrual.unified:type_name -> io.linkerd.proxy.outbound.FailureAccrual.Unified + 10, // 27: io.linkerd.proxy.outbound.FailureAccrual.ejection:type_name -> io.linkerd.proxy.outbound.EjectionConfig + 67, // 28: io.linkerd.proxy.outbound.ExponentialBackoff.min_backoff:type_name -> google.protobuf.Duration + 67, // 29: io.linkerd.proxy.outbound.ExponentialBackoff.max_backoff:type_name -> google.protobuf.Duration + 67, // 30: io.linkerd.proxy.outbound.ProxyProtocol.Detect.timeout:type_name -> google.protobuf.Duration + 13, // 31: io.linkerd.proxy.outbound.ProxyProtocol.Detect.opaque:type_name -> io.linkerd.proxy.outbound.ProxyProtocol.Opaque + 14, // 32: io.linkerd.proxy.outbound.ProxyProtocol.Detect.http1:type_name -> io.linkerd.proxy.outbound.ProxyProtocol.Http1 + 15, // 33: io.linkerd.proxy.outbound.ProxyProtocol.Detect.http2:type_name -> io.linkerd.proxy.outbound.ProxyProtocol.Http2 + 5, // 34: io.linkerd.proxy.outbound.ProxyProtocol.Opaque.routes:type_name -> io.linkerd.proxy.outbound.OpaqueRoute + 3, // 35: io.linkerd.proxy.outbound.ProxyProtocol.Http1.routes:type_name -> io.linkerd.proxy.outbound.HttpRoute + 9, // 36: io.linkerd.proxy.outbound.ProxyProtocol.Http1.failure_accrual:type_name -> io.linkerd.proxy.outbound.FailureAccrual + 3, // 37: io.linkerd.proxy.outbound.ProxyProtocol.Http2.routes:type_name -> io.linkerd.proxy.outbound.HttpRoute + 9, // 38: io.linkerd.proxy.outbound.ProxyProtocol.Http2.failure_accrual:type_name -> io.linkerd.proxy.outbound.FailureAccrual + 4, // 39: io.linkerd.proxy.outbound.ProxyProtocol.Grpc.routes:type_name -> io.linkerd.proxy.outbound.GrpcRoute + 9, // 40: io.linkerd.proxy.outbound.ProxyProtocol.Grpc.failure_accrual:type_name -> io.linkerd.proxy.outbound.FailureAccrual + 6, // 41: io.linkerd.proxy.outbound.ProxyProtocol.Tls.routes:type_name -> io.linkerd.proxy.outbound.TlsRoute + 68, // 42: io.linkerd.proxy.outbound.HttpRoute.Rule.matches:type_name -> io.linkerd.proxy.http_route.HttpRouteMatch + 19, // 43: io.linkerd.proxy.outbound.HttpRoute.Rule.filters:type_name -> io.linkerd.proxy.outbound.HttpRoute.Filter + 20, // 44: io.linkerd.proxy.outbound.HttpRoute.Rule.backends:type_name -> io.linkerd.proxy.outbound.HttpRoute.Distribution + 67, // 45: io.linkerd.proxy.outbound.HttpRoute.Rule.requestTimeout:type_name -> google.protobuf.Duration + 69, // 46: io.linkerd.proxy.outbound.HttpRoute.Rule.timeouts:type_name -> io.linkerd.proxy.http_route.Timeouts + 21, // 47: io.linkerd.proxy.outbound.HttpRoute.Rule.retry:type_name -> io.linkerd.proxy.outbound.HttpRoute.Retry + 70, // 48: io.linkerd.proxy.outbound.HttpRoute.Filter.failure_injector:type_name -> io.linkerd.proxy.http_route.HttpFailureInjector + 71, // 49: io.linkerd.proxy.outbound.HttpRoute.Filter.request_header_modifier:type_name -> io.linkerd.proxy.http_route.RequestHeaderModifier + 72, // 50: io.linkerd.proxy.outbound.HttpRoute.Filter.redirect:type_name -> io.linkerd.proxy.http_route.RequestRedirect + 73, // 51: io.linkerd.proxy.outbound.HttpRoute.Filter.response_header_modifier:type_name -> io.linkerd.proxy.http_route.ResponseHeaderModifier + 24, // 52: io.linkerd.proxy.outbound.HttpRoute.Distribution.empty:type_name -> io.linkerd.proxy.outbound.HttpRoute.Distribution.Empty + 25, // 53: io.linkerd.proxy.outbound.HttpRoute.Distribution.first_available:type_name -> io.linkerd.proxy.outbound.HttpRoute.Distribution.FirstAvailable + 26, // 54: io.linkerd.proxy.outbound.HttpRoute.Distribution.random_available:type_name -> io.linkerd.proxy.outbound.HttpRoute.Distribution.RandomAvailable + 27, // 55: io.linkerd.proxy.outbound.HttpRoute.Retry.conditions:type_name -> io.linkerd.proxy.outbound.HttpRoute.Retry.Conditions + 67, // 56: io.linkerd.proxy.outbound.HttpRoute.Retry.timeout:type_name -> google.protobuf.Duration + 11, // 57: io.linkerd.proxy.outbound.HttpRoute.Retry.backoff:type_name -> io.linkerd.proxy.outbound.ExponentialBackoff + 7, // 58: io.linkerd.proxy.outbound.HttpRoute.RouteBackend.backend:type_name -> io.linkerd.proxy.outbound.Backend + 19, // 59: io.linkerd.proxy.outbound.HttpRoute.RouteBackend.filters:type_name -> io.linkerd.proxy.outbound.HttpRoute.Filter + 67, // 60: io.linkerd.proxy.outbound.HttpRoute.RouteBackend.requestTimeout:type_name -> google.protobuf.Duration + 22, // 61: io.linkerd.proxy.outbound.HttpRoute.WeightedRouteBackend.backend:type_name -> io.linkerd.proxy.outbound.HttpRoute.RouteBackend + 22, // 62: io.linkerd.proxy.outbound.HttpRoute.Distribution.FirstAvailable.backends:type_name -> io.linkerd.proxy.outbound.HttpRoute.RouteBackend + 23, // 63: io.linkerd.proxy.outbound.HttpRoute.Distribution.RandomAvailable.backends:type_name -> io.linkerd.proxy.outbound.HttpRoute.WeightedRouteBackend + 28, // 64: io.linkerd.proxy.outbound.HttpRoute.Retry.Conditions.status_ranges:type_name -> io.linkerd.proxy.outbound.HttpRoute.Retry.Conditions.StatusRange + 74, // 65: io.linkerd.proxy.outbound.GrpcRoute.Rule.matches:type_name -> io.linkerd.proxy.grpc_route.GrpcRouteMatch + 30, // 66: io.linkerd.proxy.outbound.GrpcRoute.Rule.filters:type_name -> io.linkerd.proxy.outbound.GrpcRoute.Filter + 31, // 67: io.linkerd.proxy.outbound.GrpcRoute.Rule.backends:type_name -> io.linkerd.proxy.outbound.GrpcRoute.Distribution + 67, // 68: io.linkerd.proxy.outbound.GrpcRoute.Rule.requestTimeout:type_name -> google.protobuf.Duration + 69, // 69: io.linkerd.proxy.outbound.GrpcRoute.Rule.timeouts:type_name -> io.linkerd.proxy.http_route.Timeouts + 32, // 70: io.linkerd.proxy.outbound.GrpcRoute.Rule.retry:type_name -> io.linkerd.proxy.outbound.GrpcRoute.Retry + 75, // 71: io.linkerd.proxy.outbound.GrpcRoute.Filter.failure_injector:type_name -> io.linkerd.proxy.grpc_route.GrpcFailureInjector + 71, // 72: io.linkerd.proxy.outbound.GrpcRoute.Filter.request_header_modifier:type_name -> io.linkerd.proxy.http_route.RequestHeaderModifier + 35, // 73: io.linkerd.proxy.outbound.GrpcRoute.Distribution.empty:type_name -> io.linkerd.proxy.outbound.GrpcRoute.Distribution.Empty + 36, // 74: io.linkerd.proxy.outbound.GrpcRoute.Distribution.first_available:type_name -> io.linkerd.proxy.outbound.GrpcRoute.Distribution.FirstAvailable + 37, // 75: io.linkerd.proxy.outbound.GrpcRoute.Distribution.random_available:type_name -> io.linkerd.proxy.outbound.GrpcRoute.Distribution.RandomAvailable + 38, // 76: io.linkerd.proxy.outbound.GrpcRoute.Retry.conditions:type_name -> io.linkerd.proxy.outbound.GrpcRoute.Retry.Conditions + 67, // 77: io.linkerd.proxy.outbound.GrpcRoute.Retry.timeout:type_name -> google.protobuf.Duration + 11, // 78: io.linkerd.proxy.outbound.GrpcRoute.Retry.backoff:type_name -> io.linkerd.proxy.outbound.ExponentialBackoff + 7, // 79: io.linkerd.proxy.outbound.GrpcRoute.RouteBackend.backend:type_name -> io.linkerd.proxy.outbound.Backend + 30, // 80: io.linkerd.proxy.outbound.GrpcRoute.RouteBackend.filters:type_name -> io.linkerd.proxy.outbound.GrpcRoute.Filter + 67, // 81: io.linkerd.proxy.outbound.GrpcRoute.RouteBackend.requestTimeout:type_name -> google.protobuf.Duration + 33, // 82: io.linkerd.proxy.outbound.GrpcRoute.WeightedRouteBackend.backend:type_name -> io.linkerd.proxy.outbound.GrpcRoute.RouteBackend + 33, // 83: io.linkerd.proxy.outbound.GrpcRoute.Distribution.FirstAvailable.backends:type_name -> io.linkerd.proxy.outbound.GrpcRoute.RouteBackend + 34, // 84: io.linkerd.proxy.outbound.GrpcRoute.Distribution.RandomAvailable.backends:type_name -> io.linkerd.proxy.outbound.GrpcRoute.WeightedRouteBackend + 41, // 85: io.linkerd.proxy.outbound.OpaqueRoute.Rule.backends:type_name -> io.linkerd.proxy.outbound.OpaqueRoute.Distribution + 40, // 86: io.linkerd.proxy.outbound.OpaqueRoute.Rule.filters:type_name -> io.linkerd.proxy.outbound.OpaqueRoute.Filter + 76, // 87: io.linkerd.proxy.outbound.OpaqueRoute.Filter.invalid:type_name -> io.linkerd.proxy.opaque_route.Invalid + 77, // 88: io.linkerd.proxy.outbound.OpaqueRoute.Filter.forbidden:type_name -> io.linkerd.proxy.opaque_route.Forbidden + 44, // 89: io.linkerd.proxy.outbound.OpaqueRoute.Distribution.empty:type_name -> io.linkerd.proxy.outbound.OpaqueRoute.Distribution.Empty + 45, // 90: io.linkerd.proxy.outbound.OpaqueRoute.Distribution.first_available:type_name -> io.linkerd.proxy.outbound.OpaqueRoute.Distribution.FirstAvailable + 46, // 91: io.linkerd.proxy.outbound.OpaqueRoute.Distribution.random_available:type_name -> io.linkerd.proxy.outbound.OpaqueRoute.Distribution.RandomAvailable + 7, // 92: io.linkerd.proxy.outbound.OpaqueRoute.RouteBackend.backend:type_name -> io.linkerd.proxy.outbound.Backend + 40, // 93: io.linkerd.proxy.outbound.OpaqueRoute.RouteBackend.filters:type_name -> io.linkerd.proxy.outbound.OpaqueRoute.Filter + 42, // 94: io.linkerd.proxy.outbound.OpaqueRoute.WeightedRouteBackend.backend:type_name -> io.linkerd.proxy.outbound.OpaqueRoute.RouteBackend + 42, // 95: io.linkerd.proxy.outbound.OpaqueRoute.Distribution.FirstAvailable.backends:type_name -> io.linkerd.proxy.outbound.OpaqueRoute.RouteBackend + 43, // 96: io.linkerd.proxy.outbound.OpaqueRoute.Distribution.RandomAvailable.backends:type_name -> io.linkerd.proxy.outbound.OpaqueRoute.WeightedRouteBackend + 49, // 97: io.linkerd.proxy.outbound.TlsRoute.Rule.backends:type_name -> io.linkerd.proxy.outbound.TlsRoute.Distribution + 48, // 98: io.linkerd.proxy.outbound.TlsRoute.Rule.filters:type_name -> io.linkerd.proxy.outbound.TlsRoute.Filter + 76, // 99: io.linkerd.proxy.outbound.TlsRoute.Filter.invalid:type_name -> io.linkerd.proxy.opaque_route.Invalid + 77, // 100: io.linkerd.proxy.outbound.TlsRoute.Filter.forbidden:type_name -> io.linkerd.proxy.opaque_route.Forbidden + 52, // 101: io.linkerd.proxy.outbound.TlsRoute.Distribution.empty:type_name -> io.linkerd.proxy.outbound.TlsRoute.Distribution.Empty + 53, // 102: io.linkerd.proxy.outbound.TlsRoute.Distribution.first_available:type_name -> io.linkerd.proxy.outbound.TlsRoute.Distribution.FirstAvailable + 54, // 103: io.linkerd.proxy.outbound.TlsRoute.Distribution.random_available:type_name -> io.linkerd.proxy.outbound.TlsRoute.Distribution.RandomAvailable + 7, // 104: io.linkerd.proxy.outbound.TlsRoute.RouteBackend.backend:type_name -> io.linkerd.proxy.outbound.Backend + 48, // 105: io.linkerd.proxy.outbound.TlsRoute.RouteBackend.filters:type_name -> io.linkerd.proxy.outbound.TlsRoute.Filter + 50, // 106: io.linkerd.proxy.outbound.TlsRoute.WeightedRouteBackend.backend:type_name -> io.linkerd.proxy.outbound.TlsRoute.RouteBackend + 50, // 107: io.linkerd.proxy.outbound.TlsRoute.Distribution.FirstAvailable.backends:type_name -> io.linkerd.proxy.outbound.TlsRoute.RouteBackend + 51, // 108: io.linkerd.proxy.outbound.TlsRoute.Distribution.RandomAvailable.backends:type_name -> io.linkerd.proxy.outbound.TlsRoute.WeightedRouteBackend + 57, // 109: io.linkerd.proxy.outbound.Backend.EndpointDiscovery.dst:type_name -> io.linkerd.proxy.outbound.Backend.EndpointDiscovery.DestinationGet + 55, // 110: io.linkerd.proxy.outbound.Backend.BalanceP2c.discovery:type_name -> io.linkerd.proxy.outbound.Backend.EndpointDiscovery + 58, // 111: io.linkerd.proxy.outbound.Backend.BalanceP2c.peak_ewma:type_name -> io.linkerd.proxy.outbound.Backend.BalanceP2c.PeakEwma + 59, // 112: io.linkerd.proxy.outbound.Backend.BalanceP2c.penalty_peak_ewma:type_name -> io.linkerd.proxy.outbound.Backend.BalanceP2c.PenaltyPeakEwma + 67, // 113: io.linkerd.proxy.outbound.Backend.BalanceP2c.PeakEwma.default_rtt:type_name -> google.protobuf.Duration + 67, // 114: io.linkerd.proxy.outbound.Backend.BalanceP2c.PeakEwma.decay:type_name -> google.protobuf.Duration + 67, // 115: io.linkerd.proxy.outbound.Backend.BalanceP2c.PenaltyPeakEwma.default_rtt:type_name -> google.protobuf.Duration + 67, // 116: io.linkerd.proxy.outbound.Backend.BalanceP2c.PenaltyPeakEwma.decay:type_name -> google.protobuf.Duration + 67, // 117: io.linkerd.proxy.outbound.Backend.BalanceP2c.PenaltyPeakEwma.penalty:type_name -> google.protobuf.Duration + 67, // 118: io.linkerd.proxy.outbound.Backend.BalanceP2c.PenaltyPeakEwma.max_retry_after:type_name -> google.protobuf.Duration + 67, // 119: io.linkerd.proxy.outbound.Backend.BalanceP2c.PenaltyPeakEwma.penalty_decay:type_name -> google.protobuf.Duration + 11, // 120: io.linkerd.proxy.outbound.FailureAccrual.ConsecutiveFailures.backoff:type_name -> io.linkerd.proxy.outbound.ExponentialBackoff + 67, // 121: io.linkerd.proxy.outbound.FailureAccrual.Unified.decay:type_name -> google.protobuf.Duration + 11, // 122: io.linkerd.proxy.outbound.FailureAccrual.Unified.backoff:type_name -> io.linkerd.proxy.outbound.ExponentialBackoff + 0, // 123: io.linkerd.proxy.outbound.OutboundPolicies.Get:input_type -> io.linkerd.proxy.outbound.TrafficSpec + 0, // 124: io.linkerd.proxy.outbound.OutboundPolicies.Watch:input_type -> io.linkerd.proxy.outbound.TrafficSpec + 1, // 125: io.linkerd.proxy.outbound.OutboundPolicies.Get:output_type -> io.linkerd.proxy.outbound.OutboundPolicy + 1, // 126: io.linkerd.proxy.outbound.OutboundPolicies.Watch:output_type -> io.linkerd.proxy.outbound.OutboundPolicy + 125, // [125:127] is the sub-list for method output_type + 123, // [123:125] is the sub-list for method input_type + 123, // [123:123] is the sub-list for extension type_name + 123, // [123:123] is the sub-list for extension extendee + 0, // [0:123] is the sub-list for field type_name } func init() { file_outbound_proto_init() } @@ -4604,49 +4582,54 @@ func file_outbound_proto_init() { (*Backend_Forward)(nil), (*Backend_Balancer)(nil), } - file_outbound_proto_msgTypes[21].OneofWrappers = []any{ + file_outbound_proto_msgTypes[9].OneofWrappers = []any{ + (*FailureAccrual_ConsecutiveFailures_)(nil), + (*FailureAccrual_Unified_)(nil), + } + file_outbound_proto_msgTypes[19].OneofWrappers = []any{ (*HttpRoute_Filter_FailureInjector)(nil), (*HttpRoute_Filter_RequestHeaderModifier)(nil), (*HttpRoute_Filter_Redirect)(nil), (*HttpRoute_Filter_ResponseHeaderModifier)(nil), } - file_outbound_proto_msgTypes[22].OneofWrappers = []any{ + file_outbound_proto_msgTypes[20].OneofWrappers = []any{ (*HttpRoute_Distribution_Empty_)(nil), (*HttpRoute_Distribution_FirstAvailable_)(nil), (*HttpRoute_Distribution_RandomAvailable_)(nil), } - file_outbound_proto_msgTypes[32].OneofWrappers = []any{ + file_outbound_proto_msgTypes[30].OneofWrappers = []any{ (*GrpcRoute_Filter_FailureInjector)(nil), (*GrpcRoute_Filter_RequestHeaderModifier)(nil), } - file_outbound_proto_msgTypes[33].OneofWrappers = []any{ + file_outbound_proto_msgTypes[31].OneofWrappers = []any{ (*GrpcRoute_Distribution_Empty_)(nil), (*GrpcRoute_Distribution_FirstAvailable_)(nil), (*GrpcRoute_Distribution_RandomAvailable_)(nil), } - file_outbound_proto_msgTypes[42].OneofWrappers = []any{ + file_outbound_proto_msgTypes[40].OneofWrappers = []any{ (*OpaqueRoute_Filter_Invalid)(nil), (*OpaqueRoute_Filter_Forbidden)(nil), } - file_outbound_proto_msgTypes[43].OneofWrappers = []any{ + file_outbound_proto_msgTypes[41].OneofWrappers = []any{ (*OpaqueRoute_Distribution_Empty_)(nil), (*OpaqueRoute_Distribution_FirstAvailable_)(nil), (*OpaqueRoute_Distribution_RandomAvailable_)(nil), } - file_outbound_proto_msgTypes[50].OneofWrappers = []any{ + file_outbound_proto_msgTypes[48].OneofWrappers = []any{ (*TlsRoute_Filter_Invalid)(nil), (*TlsRoute_Filter_Forbidden)(nil), } - file_outbound_proto_msgTypes[51].OneofWrappers = []any{ + file_outbound_proto_msgTypes[49].OneofWrappers = []any{ (*TlsRoute_Distribution_Empty_)(nil), (*TlsRoute_Distribution_FirstAvailable_)(nil), (*TlsRoute_Distribution_RandomAvailable_)(nil), } - file_outbound_proto_msgTypes[57].OneofWrappers = []any{ + file_outbound_proto_msgTypes[55].OneofWrappers = []any{ (*Backend_EndpointDiscovery_Dst)(nil), } - file_outbound_proto_msgTypes[58].OneofWrappers = []any{ + file_outbound_proto_msgTypes[56].OneofWrappers = []any{ (*Backend_BalanceP2C_PeakEwma_)(nil), + (*Backend_BalanceP2C_PenaltyPeakEwma_)(nil), } type x struct{} out := protoimpl.TypeBuilder{ @@ -4654,7 +4637,7 @@ func file_outbound_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_outbound_proto_rawDesc), len(file_outbound_proto_rawDesc)), NumEnums: 0, - NumMessages: 63, + NumMessages: 62, NumExtensions: 0, NumServices: 1, }, diff --git a/go/outbound/outbound_grpc.pb.go b/go/outbound/outbound_grpc.pb.go index 657b522ef..b20ffb686 100644 --- a/go/outbound/outbound_grpc.pb.go +++ b/go/outbound/outbound_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.6.1 -// - protoc v4.25.9 +// - protoc-gen-go-grpc v1.6.2 +// - protoc v6.32.1 // source: outbound.proto package outbound diff --git a/go/tap/tap.pb.go b/go/tap/tap.pb.go index fd0cd9fe8..009ffc9b5 100644 --- a/go/tap/tap.pb.go +++ b/go/tap/tap.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 -// protoc v4.25.9 +// protoc v6.32.1 // source: tap.proto package tap diff --git a/go/tap/tap_grpc.pb.go b/go/tap/tap_grpc.pb.go index a9452f01c..db2a586e7 100644 --- a/go/tap/tap_grpc.pb.go +++ b/go/tap/tap_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.6.1 -// - protoc v4.25.9 +// - protoc-gen-go-grpc v1.6.2 +// - protoc v6.32.1 // source: tap.proto package tap diff --git a/go/tls_route/tls_route.pb.go b/go/tls_route/tls_route.pb.go index 38cfac0e2..f01b8b2c4 100644 --- a/go/tls_route/tls_route.pb.go +++ b/go/tls_route/tls_route.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.11 -// protoc v4.25.9 +// protoc v6.32.1 // source: tls_route.proto package tls_route diff --git a/proto/outbound.proto b/proto/outbound.proto index e21554047..1c37fe36c 100644 --- a/proto/outbound.proto +++ b/proto/outbound.proto @@ -86,12 +86,6 @@ message ProxyProtocol { // If empty, circuit breaking is not performed. FailureAccrual failure_accrual = 2; - - // If set, configures load biasing for 429-aware load balancing. - LoadBiasConfig load_bias = 3; - - // If set, configures handling of Retry-After headers (HTTP 429/503). - RetryAfterConfig retry_after = 4; } message Http2 { @@ -99,12 +93,6 @@ message ProxyProtocol { // If empty, circuit breaking is not performed. FailureAccrual failure_accrual = 2; - - // If set, configures load biasing for 429-aware load balancing. - LoadBiasConfig load_bias = 3; - - // If set, configures handling of Retry-After headers (HTTP 429/503). - RetryAfterConfig retry_after = 4; } message Grpc { @@ -112,13 +100,6 @@ message ProxyProtocol { // If empty, circuit breaking is not performed. FailureAccrual failure_accrual = 2; - - // If set, configures load biasing for 429-aware load balancing. - LoadBiasConfig load_bias = 3; - - // If set, configures handling of Retry-After headers (HTTP 429/503) - // and grpc-retry-pushback-ms trailers (gRPC RESOURCE_EXHAUSTED). - RetryAfterConfig retry_after = 4; } message Tls { @@ -437,12 +418,11 @@ message Backend { // This load balancer uses peak EWMA (exponentially weighted moving // average) load estimates. PeakEwma peak_ewma = 2; + // A variant of peak EWMA that injects artificial penalties based on response + // codes, enabling 429-aware load balancing. + PenaltyPeakEwma penalty_peak_ewma = 3; } - // Ejection protection for the pool. When set, prevents circuit - // breakers from ejecting endpoints below the configured floor. - EjectionConfig ejection = 3; - // Parameters configuring peak EWMA load estimation. message PeakEwma { // Initial latency value used when no latencies have been @@ -452,6 +432,24 @@ message Backend { // The duration of the moving window over which latency is observed. google.protobuf.Duration decay = 2; } + + message PenaltyPeakEwma { + // Initial latency value used when no latencies have been + // recorded for an endpoint. + google.protobuf.Duration default_rtt = 1; + + // The duration of the moving window over which latency is observed. + google.protobuf.Duration decay = 2; + + // The penalty duration to inject when a matching response is received. + google.protobuf.Duration penalty = 3; + + // The maximum duration to respect for Retry-After hints. Hints that exceed this value will be capped. + google.protobuf.Duration max_retry_after = 4; + + // The EWMA decay window for the penalty. + google.protobuf.Duration penalty_decay = 5; + } } } @@ -473,53 +471,36 @@ message FailureAccrual { // Set to 0 to disable (an unset field has the same effect). uint32 max_failures = 1; // Must be set. Controls the ejection duration before probe requests - // are allowed after any policy (not just CF) trips the circuit. + // are allowed after this policy trips the circuit. ExponentialBackoff backoff = 2; } - message SuccessRate { + message Unified { // Success rate threshold in [0.0, 1.0]. The circuit trips when the // EWMA success rate drops below this value. Set to 0.0 to disable. // Defined as `double` (not `float`) because this value is compared // against the proxy's f64 EWMA on every request. - double threshold = 1; + double success_rate_threshold = 1; // EWMA decay window for success rate tracking. google.protobuf.Duration decay = 2; // Minimum requests before the success rate policy can trip (cold-start guard). uint32 min_requests = 3; + // Maximum consecutive failures before the circuit trips. + // Set to 0 to disable (an unset field has the same effect). + uint32 max_consecutive_failures = 4; + // Must be set. Controls the ejection duration before probe requests + // are allowed after this policy trips the circuit. + ExponentialBackoff backoff = 5; } - // Must be set. Set `max_failures` to 0 to disable the consecutive - // failure policy while retaining the shared backoff. - ConsecutiveFailures consecutive_failures = 1; - - // Success rate policy. If set, the circuit trips when the EWMA success - // rate drops below the threshold. - SuccessRate success_rate = 2; -} - -// Configures load biasing for 429-aware load balancing. -// When enabled, the load balancer injects artificial penalties on -// rate-limited endpoints, causing P2C to prefer other endpoints. -message LoadBiasConfig { - // Whether load biasing is enabled. When the message is present - // but `enabled` is false, biasing is inactive. - bool enabled = 1; - // The penalty duration to inject when a 429 response is received. - google.protobuf.Duration penalty = 2; - // The EWMA decay window for the penalty. - google.protobuf.Duration penalty_decay = 3; -} + oneof kind { + ConsecutiveFailures consecutive_failures = 1; + Unified unified = 2; + } -// Configures handling of rate-limiting hints: Retry-After headers -// (HTTP 429/503) and grpc-retry-pushback-ms trailers (gRPC -// RESOURCE_EXHAUSTED). The proxy uses the parsed duration to extend -// circuit breaker backoff and amplify load biaser penalties. -message RetryAfterConfig { - // Maximum duration the proxy will honor from either hint source. - // Values exceeding this cap are clamped. When absent, the proxy - // uses DEFAULT_RETRY_AFTER_MAX_DURATION as the cap. - google.protobuf.Duration max_duration = 1; + // Ejection protection for the pool. When set, prevents circuit + // breakers from ejecting endpoints below the configured floor. + EjectionConfig ejection = 3; } // Pool-level ejection protection. Prevents circuit breakers from @@ -541,4 +522,7 @@ message ExponentialBackoff { // The ratio of the base timeout that may be randomly added to a backoff. // Must be greater than or equal to 0.0. float jitter_ratio = 3; + // If true, the proxy will use the Retry-After hint (if present on the response) + // as the initial backoff duration, clamped by min_backoff and max_backoff. + bool respect_retry_after_hint = 4; } diff --git a/src/gen/io.linkerd.proxy.outbound.rs b/src/gen/io.linkerd.proxy.outbound.rs index 7adedfac2..396aa698d 100644 --- a/src/gen/io.linkerd.proxy.outbound.rs +++ b/src/gen/io.linkerd.proxy.outbound.rs @@ -67,12 +67,6 @@ pub mod proxy_protocol { /// If empty, circuit breaking is not performed. #[prost(message, optional, tag = "2")] pub failure_accrual: ::core::option::Option, - /// If set, configures load biasing for 429-aware load balancing. - #[prost(message, optional, tag = "3")] - pub load_bias: ::core::option::Option, - /// If set, configures handling of Retry-After headers (HTTP 429/503). - #[prost(message, optional, tag = "4")] - pub retry_after: ::core::option::Option, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct Http2 { @@ -81,12 +75,6 @@ pub mod proxy_protocol { /// If empty, circuit breaking is not performed. #[prost(message, optional, tag = "2")] pub failure_accrual: ::core::option::Option, - /// If set, configures load biasing for 429-aware load balancing. - #[prost(message, optional, tag = "3")] - pub load_bias: ::core::option::Option, - /// If set, configures handling of Retry-After headers (HTTP 429/503). - #[prost(message, optional, tag = "4")] - pub retry_after: ::core::option::Option, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct Grpc { @@ -95,13 +83,6 @@ pub mod proxy_protocol { /// If empty, circuit breaking is not performed. #[prost(message, optional, tag = "2")] pub failure_accrual: ::core::option::Option, - /// If set, configures load biasing for 429-aware load balancing. - #[prost(message, optional, tag = "3")] - pub load_bias: ::core::option::Option, - /// If set, configures handling of Retry-After headers (HTTP 429/503) - /// and grpc-retry-pushback-ms trailers (gRPC RESOURCE_EXHAUSTED). - #[prost(message, optional, tag = "4")] - pub retry_after: ::core::option::Option, } #[derive(Clone, PartialEq, ::prost::Message)] pub struct Tls { @@ -598,12 +579,8 @@ pub mod backend { pub struct BalanceP2c { #[prost(message, optional, tag = "1")] pub discovery: ::core::option::Option, - /// Ejection protection for the pool. When set, prevents circuit - /// breakers from ejecting endpoints below the configured floor. - #[prost(message, optional, tag = "3")] - pub ejection: ::core::option::Option, /// The load estimation strategy used by this load balancer. - #[prost(oneof = "balance_p2c::Load", tags = "2")] + #[prost(oneof = "balance_p2c::Load", tags = "2, 3")] pub load: ::core::option::Option, } /// Nested message and enum types in `BalanceP2c`. @@ -619,6 +596,25 @@ pub mod backend { #[prost(message, optional, tag = "2")] pub decay: ::core::option::Option<::prost_types::Duration>, } + #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] + pub struct PenaltyPeakEwma { + /// Initial latency value used when no latencies have been + /// recorded for an endpoint. + #[prost(message, optional, tag = "1")] + pub default_rtt: ::core::option::Option<::prost_types::Duration>, + /// The duration of the moving window over which latency is observed. + #[prost(message, optional, tag = "2")] + pub decay: ::core::option::Option<::prost_types::Duration>, + /// The penalty duration to inject when a matching response is received. + #[prost(message, optional, tag = "3")] + pub penalty: ::core::option::Option<::prost_types::Duration>, + /// The maximum duration to respect for Retry-After hints. Hints that exceed this value will be capped. + #[prost(message, optional, tag = "4")] + pub max_retry_after: ::core::option::Option<::prost_types::Duration>, + /// The EWMA decay window for the penalty. + #[prost(message, optional, tag = "5")] + pub penalty_decay: ::core::option::Option<::prost_types::Duration>, + } /// The load estimation strategy used by this load balancer. #[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Oneof)] pub enum Load { @@ -626,6 +622,10 @@ pub mod backend { /// average) load estimates. #[prost(message, tag = "2")] PeakEwma(PeakEwma), + /// A variant of peak EWMA that injects artificial penalties based on response + /// codes, enabling 429-aware load balancing. + #[prost(message, tag = "3")] + PenaltyPeakEwma(PenaltyPeakEwma), } } #[derive(Clone, PartialEq, ::prost::Oneof)] @@ -653,16 +653,12 @@ pub struct Queue { /// Setting a numeric policy field to zero disables that policy. #[derive(Clone, Copy, PartialEq, ::prost::Message)] pub struct FailureAccrual { - /// Must be set. Set `max_failures` to 0 to disable the consecutive - /// failure policy while retaining the shared backoff. - #[prost(message, optional, tag = "1")] - pub consecutive_failures: ::core::option::Option< - failure_accrual::ConsecutiveFailures, - >, - /// Success rate policy. If set, the circuit trips when the EWMA success - /// rate drops below the threshold. - #[prost(message, optional, tag = "2")] - pub success_rate: ::core::option::Option, + /// Ejection protection for the pool. When set, prevents circuit + /// breakers from ejecting endpoints below the configured floor. + #[prost(message, optional, tag = "3")] + pub ejection: ::core::option::Option, + #[prost(oneof = "failure_accrual::Kind", tags = "1, 2")] + pub kind: ::core::option::Option, } /// Nested message and enum types in `FailureAccrual`. pub mod failure_accrual { @@ -673,53 +669,40 @@ pub mod failure_accrual { #[prost(uint32, tag = "1")] pub max_failures: u32, /// Must be set. Controls the ejection duration before probe requests - /// are allowed after any policy (not just CF) trips the circuit. + /// are allowed after this policy trips the circuit. #[prost(message, optional, tag = "2")] pub backoff: ::core::option::Option, } #[derive(Clone, Copy, PartialEq, ::prost::Message)] - pub struct SuccessRate { + pub struct Unified { /// Success rate threshold in \[0.0, 1.0\]. The circuit trips when the /// EWMA success rate drops below this value. Set to 0.0 to disable. /// Defined as `double` (not `float`) because this value is compared /// against the proxy's f64 EWMA on every request. #[prost(double, tag = "1")] - pub threshold: f64, + pub success_rate_threshold: f64, /// EWMA decay window for success rate tracking. #[prost(message, optional, tag = "2")] pub decay: ::core::option::Option<::prost_types::Duration>, /// Minimum requests before the success rate policy can trip (cold-start guard). #[prost(uint32, tag = "3")] pub min_requests: u32, + /// Maximum consecutive failures before the circuit trips. + /// Set to 0 to disable (an unset field has the same effect). + #[prost(uint32, tag = "4")] + pub max_consecutive_failures: u32, + /// Must be set. Controls the ejection duration before probe requests + /// are allowed after this policy trips the circuit. + #[prost(message, optional, tag = "5")] + pub backoff: ::core::option::Option, + } + #[derive(Clone, Copy, PartialEq, ::prost::Oneof)] + pub enum Kind { + #[prost(message, tag = "1")] + ConsecutiveFailures(ConsecutiveFailures), + #[prost(message, tag = "2")] + Unified(Unified), } -} -/// Configures load biasing for 429-aware load balancing. -/// When enabled, the load balancer injects artificial penalties on -/// rate-limited endpoints, causing P2C to prefer other endpoints. -#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] -pub struct LoadBiasConfig { - /// Whether load biasing is enabled. When the message is present - /// but `enabled` is false, biasing is inactive. - #[prost(bool, tag = "1")] - pub enabled: bool, - /// The penalty duration to inject when a 429 response is received. - #[prost(message, optional, tag = "2")] - pub penalty: ::core::option::Option<::prost_types::Duration>, - /// The EWMA decay window for the penalty. - #[prost(message, optional, tag = "3")] - pub penalty_decay: ::core::option::Option<::prost_types::Duration>, -} -/// Configures handling of rate-limiting hints: Retry-After headers -/// (HTTP 429/503) and grpc-retry-pushback-ms trailers (gRPC -/// RESOURCE_EXHAUSTED). The proxy uses the parsed duration to extend -/// circuit breaker backoff and amplify load biaser penalties. -#[derive(Clone, Copy, PartialEq, Eq, Hash, ::prost::Message)] -pub struct RetryAfterConfig { - /// Maximum duration the proxy will honor from either hint source. - /// Values exceeding this cap are clamped. When absent, the proxy - /// uses DEFAULT_RETRY_AFTER_MAX_DURATION as the cap. - #[prost(message, optional, tag = "1")] - pub max_duration: ::core::option::Option<::prost_types::Duration>, } /// Pool-level ejection protection. Prevents circuit breakers from /// ejecting all endpoints in a load-balancing pool. @@ -745,6 +728,10 @@ pub struct ExponentialBackoff { /// Must be greater than or equal to 0.0. #[prost(float, tag = "3")] pub jitter_ratio: f32, + /// If true, the proxy will use the Retry-After hint (if present on the response) + /// as the initial backoff duration, clamped by min_backoff and max_backoff. + #[prost(bool, tag = "4")] + pub respect_retry_after_hint: bool, } /// Generated client implementations. pub mod outbound_policies_client {