Background
Dubbo-go Triple is built on a forked and heavily modified copy of connect-go runtime code under protocol/triple/triple_protocol. We do not depend on upstream connect-go directly anymore, but the core stream client lifecycle still follows the same general design.
Because of that, upstream connect-go runtime fixes can still be relevant when they address stream lifecycle behavior rather than Connect-specific product features. In connect-go v1.18.0, upstream changed stream client closures to be non-blocking (connectrpc/connect-go#791). Dubbo-go Triple has corresponding APIs such as ClientStreamForClient.CloseAndReceive, BidiStreamForClient.CloseRequest, BidiStreamForClient.CloseResponse, and the underlying duplexHTTPCall lifecycle.
Blocking close behavior can be painful in Dubbo-go because a stream sample or integration test may hang when one side stops reading/writing, a transport error happens, or the server returns an error before the client finishes sending.
Scope
- Compare Dubbo-go Triple stream close behavior with the upstream non-blocking close change.
- Add focused tests for close paths when the peer has already errored, stopped reading, or returned early.
- Port only the relevant lifecycle behavior if our current close path can block unnecessarily.
Notes
This should stay narrowly scoped to stream close lifecycle behavior. It should selectively backport useful runtime behavior from the modified connect-go lineage, not pull in unrelated connect-go additions such as package_suffix, HTTP GET support, or transport-level retry.
Reference: https://github.com/connectrpc/connect-go/releases/tag/v1.18.0
Background
Dubbo-go Triple is built on a forked and heavily modified copy of connect-go runtime code under
protocol/triple/triple_protocol. We do not depend on upstream connect-go directly anymore, but the core stream client lifecycle still follows the same general design.Because of that, upstream connect-go runtime fixes can still be relevant when they address stream lifecycle behavior rather than Connect-specific product features. In connect-go v1.18.0, upstream changed stream client closures to be non-blocking (connectrpc/connect-go#791). Dubbo-go Triple has corresponding APIs such as
ClientStreamForClient.CloseAndReceive,BidiStreamForClient.CloseRequest,BidiStreamForClient.CloseResponse, and the underlyingduplexHTTPCalllifecycle.Blocking close behavior can be painful in Dubbo-go because a stream sample or integration test may hang when one side stops reading/writing, a transport error happens, or the server returns an error before the client finishes sending.
Scope
Notes
This should stay narrowly scoped to stream close lifecycle behavior. It should selectively backport useful runtime behavior from the modified connect-go lineage, not pull in unrelated connect-go additions such as
package_suffix, HTTP GET support, or transport-level retry.Reference: https://github.com/connectrpc/connect-go/releases/tag/v1.18.0