You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@dubbo.apache.org by "cvictory (via GitHub)" <gi...@apache.org> on 2026/05/07 04:22:37 UTC
[PR] feat(triple): add HTTP/2 connect timeout and connection recovery [dubbo-go]
cvictory opened a new pull request, #3319:
URL: https://github.com/apache/dubbo-go/pull/3319
## What changed
### New files
- `protocol/triple/retry_transport.go` — `retryTransport` decorator that wraps any `http.RoundTripper` and transparently retries on connection-level errors; `isRetriableError` / `canRetry` helpers
- `protocol/triple/retry_transport_test.go` — unit tests covering EOF retry, stream-body guard, max-retries exhaustion, non-retriable errors, and helper functions
### Modified files
- `common/constant/default.go` — add `DefaultConnectTimeout = "3s"` and `DefaultMaxRetries = 2`
- `common/constant/key.go` — add `ConnectTimeout` and `MaxRetries` URL parameter keys
- `global/triple_config.go` — extend `TripleConfig` with `ConnectTimeout` and `MaxRetries` fields; update `Clone()`
- `protocol/triple/client.go` — `genKeepAliveOptions` now parses connect timeout and max retries; `CallHTTP2` branch injects `net.Dialer{Timeout}` into dial phase and wraps transport with `retryTransport`
- `protocol/triple/dual_transport.go` — `newDualTransport` accepts `connectTimeout` parameter and injects it into the HTTP/2 branch `DialTLSContext`
- `protocol/triple/client_test.go` — update callers of changed signatures; add AC-1/5/6 test cases
## Design decisions
- **Connect timeout** is applied at the TCP dial phase (`net.Dialer.Timeout`), not at the request level (already covered by `TimeoutKey`).
- **Retry guard** uses `req.Body == nil || req.GetBody != nil` — Triple uses `io.Pipe` bodies that cannot be replayed, so only body-less or factory-backed requests are retried.
- **retryTransport** is a pure decorator; zero changes to `http2.Transport` internals.
- `MaxRetries = 0` disables retries entirely (returns inner transport unchanged).
## Verification
- Tests: all new tests pass (`TestRetryTransport_*`, `TestIsRetriableError`, `TestCanRetry`, `TestGenKeepAliveOptions_*`, `Test_newClientManager_WithConnectTimeout`)
- Existing `./protocol/triple/...` tests: pass (pre-existing `TestServer/http1/grpc/.../cumsum_cancel_before_send` flake confirmed on `main` before this change)
- Build: `go build ./common/constant/... ./global/... ./protocol/triple/...` passes
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@dubbo.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@dubbo.apache.org
For additional commands, e-mail: notifications-help@dubbo.apache.org
Re: [PR] feat(triple): add HTTP/2 connect timeout and connection recovery [dubbo-go]
Posted by "cvictory (via GitHub)" <gi...@apache.org>.
cvictory closed pull request #3319: feat(triple): add HTTP/2 connect timeout and connection recovery
URL: https://github.com/apache/dubbo-go/pull/3319
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: notifications-unsubscribe@dubbo.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@dubbo.apache.org
For additional commands, e-mail: notifications-help@dubbo.apache.org