grpc-js: Refactor Transport
and SubchannelConnector
out of Subchannel
#2308
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This change refactors the
Subchannel
class into three classes/interfaces as follows:Subchannel
: Abstraction over connections to a specific backend server. Manages connectivity state and connection backoff.SubchannelConnector
: manages the process of establishing a connection to a backend.Transport
: Manages a single connection.Currently the only
SubchannelConnector
andTransport
implementations use HTTP/2, and the subchannel pool is hardcoded to use those implementations, but theSubchannel
class now no longer has any HTTP/2-specific code and could be used with other transport implementations.The purpose of this change is to fix #2176. Specifically, when the subchannel stops using a transport because it has received a GOAWAY, the subchannel will discard the transport, but the transport will continue to manage the connection, including sending pings, as long as it has open streams.
This change also includes the changes made in #2304 by @nicknotfun.