Skip to content

Commit

Permalink
support backoff between retries in tcp_proxy (#37709)
Browse files Browse the repository at this point in the history
Commit Message: support backoff between retries in tcp_proxy
Additional Description: This feature also fixes a bug in the retry
mechanism in tcp proxy in the following situation:
1. We are tunneling TCP over HTTP.
2. A new stream is created on existing upstream connection
(multiplexing) and waiting for response headers.
3. The upstream connection is closed.
4. During the close process, all streams created on this connection will
be reset.
5. The tcp_proxy receives a callback on the stream reset.
6. They retry to connect.
7. The closed connection is picked as it is still in the connection pool
(we are still in the process of the close).
8. The new stream that is created on the second attempt will be reset
immediately.
9. The same process will happen (step 5 - step 8) until we reach the
max_connect_attepts.
10. This means that we are doing only one real attempt in this
situation.

Risk Level: medium
Testing: unit tests, integration tests
Docs Changes: added
Release Notes: added

---------

Signed-off-by: Issa Abu Kalbein <iabukalbein@microsoft.com>
Signed-off-by: IssaAbuKalbein <86603440+IssaAbuKalbein@users.noreply.github.com>
Co-authored-by: Issa Abu Kalbein <iabukalbein@microsoft.com>

Mirrored from https://github.com/envoyproxy/envoy @ 7fa09db1c8cb5e99dc3808d69e7d83276aa9e240
  • Loading branch information
update-envoy[bot] committed Jan 28, 2025
1 parent 64bdd0e commit 4de3c74
Showing 1 changed file with 5 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ syntax = "proto3";
package envoy.extensions.filters.network.tcp_proxy.v3;

import "envoy/config/accesslog/v3/accesslog.proto";
import "envoy/config/core/v3/backoff.proto";
import "envoy/config/core/v3/base.proto";
import "envoy/config/core/v3/config_source.proto";
import "envoy/type/v3/hash_policy.proto";
Expand All @@ -25,7 +26,7 @@ option (udpa.annotations.file_status).package_version_status = ACTIVE;
// TCP Proxy :ref:`configuration overview <config_network_filters_tcp_proxy>`.
// [#extension: envoy.filters.network.tcp_proxy]

// [#next-free-field: 18]
// [#next-free-field: 19]
message TcpProxy {
option (udpa.annotations.versioning).previous_message_type =
"envoy.config.filter.network.tcp_proxy.v2.TcpProxy";
Expand Down Expand Up @@ -211,6 +212,9 @@ message TcpProxy {
// giving up. If the parameter is not specified, 1 connection attempt will be made.
google.protobuf.UInt32Value max_connect_attempts = 7 [(validate.rules).uint32 = {gte: 1}];

// Sets the backoff strategy. If not set, the retries are performed without backoff.
config.core.v3.BackoffStrategy backoff_options = 18;

// Optional configuration for TCP proxy hash policy. If hash_policy is not set, the hash-based
// load balancing algorithms will select a host randomly. Currently the number of hash policies is
// limited to 1.
Expand Down

0 comments on commit 4de3c74

Please sign in to comment.