commit | da5f9f7960a1ba4dc992f6f92e71dbe4f29d30cf | [log] [tgz] |
---|---|---|
author | Damien Neil <dneil@google.com> | Thu Aug 24 11:26:58 2023 -0700 |
committer | Gopher Robot <gobot@golang.org> | Thu Sep 07 19:22:50 2023 +0000 |
tree | a778c14e84e564509d0df6cdcc35f0461dc7136d | |
parent | c3c626055bf2f7ed06e40a48a40a2a46cf32785d [diff] |
quic: don't block Writes on stream-level flow control Data written to a stream can be sent to the peer in a STREAM frame only when: - congestion control window is available - pacing does not block sending - stream-level flow control is available - connection-level flow control is available There must be a pushback mechanism to limit the amount of locally buffered stream data, but I no longer believe the stream-level flow control needs to be part of that pushback. Using connection-level flow control (not yet implemented) to block stream Write calls is problematic, because it makes it difficult to fairly divide available send capacity between multiple streams. If writes to a stream consume connection-level flow control before we commit that data to the wire, it becomes very easy for one stream to starve others. It's confusing to use stream-level flow control to block Write calls, but not connection-level flow control. This will especially produce unexpected behavior if the recipient chooses to provide unlimited stream-level quota but limited connection-level quota. Change Stream.Write to only block writes based on the configured maximum send buffer size. We may now buffer data which cannot be immediately sent, but that was the case already when transmission is blocked by congestion control. In the future, we may want to make the stream buffer sizes adaptive in response to the amount of in-flight data. Rename Config.Stream*BufferSize to MaxStream*BufferSize, to allow for possibly adding a minimum size later. For golang/go#58547 Change-Id: I528a611fefb16b323776965c5b2ab5644035ed7a Reviewed-on: https://go-review.googlesource.com/c/net/+/524958 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Commit-Queue: Damien Neil <dneil@google.com> Auto-Submit: Damien Neil <dneil@google.com> Reviewed-by: Jonathan Amsterdam <jba@google.com>
This repository holds supplementary Go networking libraries.
The easiest way to install is to run go get -u golang.org/x/net
. You can also manually git clone the repository to $GOPATH/src/golang.org/x/net
.
This repository uses Gerrit for code changes. To learn how to submit changes to this repository, see https://golang.org/doc/contribute.html. The main issue tracker for the net repository is located at https://github.com/golang/go/issues. Prefix your issue with “x/net:” in the subject line, so it is easy to find.