Skip to content

Evaluate non-blocking stream client close behavior in Triple runtime #3457

Description

@Alanxtl

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

Metadata

Metadata

Assignees

Fields

No fields configured for Feature.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions