Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(236)

Issue 320263003: Connection level flow control (CLFC) accounting on receipt of FIN/RST (Closed)

Created:
6 years, 6 months ago by ramant (doing other things)
Modified:
6 years, 6 months ago
CC:
chromium-reviews, cbentzel+watch_chromium.org, avd, jar (doing other things)
Visibility:
Public.

Description

Connection level flow control (CLFC) accounting on receipt of FIN/RST for already closed streams. This implements the following behavior discussed internally. Proposal: implement rch/jar's solution from earlier in the thread, in which "bytes sent" is added to the RST frame, and each endpoint must send a FIN or RST containing "bytes sent" on stream termination. This gets the job done pretty simply, and will make our flow control very similar to SPDY. We can investigate more exotic dynamic stream window scaling (as per avd's suggestion earlier in the thread) in future if SPDY-style flow control is shown to be a problem. A stream *must* send either a FIN or a RST on termination, either of which contain enough data that the peer can definitively determine how many bytes were sent on that stream (this is already implemented). This CL implements the correct CLFC accounting of these frames when received after the stream has been closed locally. Motivating example: Client sends GET+FIN, Server sends response. Before response arrives, client RSTs the stream (user closed tab?), tearing down local state. Before this CL, when the server response arrives it just gets dropped - but the server has counted the bytes sent against its CLFC _send_ window. The client will not count these bytes against it's CLFC _receive_ window, and so the endpoint states are now out of sync. To fix this, when a stream is closed we store the current "last bytes received offset" in a map in the session, and handle a FIN/RST for a closed stream by removing the difference between the final byte offset from FIN/RST and the stored value from the map to the CLFC receive window. QUIC: Connection level flow control accounting on receipt of FIN/RST for already closed streams. Protected behind existing flag: FLAGS_enable_quic_connection_flow_control Merge internal change: 68555475 R=rch@chromium.org, rjshade@google.com

Patch Set 1 #

Unified diffs Side-by-side diffs Delta from patch set Stats (+198 lines, -2 lines) Patch
M net/quic/quic_session.h View 1 chunk +12 lines, -0 lines 0 comments Download
M net/quic/quic_session.cc View 3 chunks +61 lines, -1 line 0 comments Download
M net/quic/quic_session_test.cc View 1 chunk +78 lines, -0 lines 0 comments Download
M net/quic/reliable_quic_stream.h View 2 chunks +15 lines, -0 lines 0 comments Download
M net/quic/reliable_quic_stream.cc View 3 chunks +7 lines, -0 lines 0 comments Download
M net/quic/reliable_quic_stream_test.cc View 2 chunks +25 lines, -1 line 0 comments Download

Messages

Total messages: 2 (0 generated)
ramant (doing other things)
6 years, 6 months ago (2014-06-09 19:17:41 UTC) #1
Robbie Shade
6 years, 6 months ago (2014-06-09 21:12:28 UTC) #2
lgtm

Powered by Google App Engine
This is Rietveld 408576698