bneradt opened a new pull request, #13641:
URL: https://github.com/apache/trafficserver/pull/13641

   When an HTTP/2 client sends DATA on a stream that ATS has already
   closed, ATS discards the payload and answers with RST_STREAM. The bytes
   are still charged against the connection receive window, as RFC 9113
   section 6.9 requires, but no stream ever consumes them, so nothing
   triggers a WINDOW_UPDATE for them. A peer that keeps sending DATA to
   closed streams can therefore run the connection window down and stall
   its own connection until the next legitimate stream makes progress. This
   can also happen accidentally when an upload is still in flight while ATS
   resets the stream.
   
   This patch addresses this by crediting the discarded bytes back through
   the existing restart_receiving() path on each of the closed-stream
   discard paths in rcv_data_frame(). The connection window is still
   debited for every flow-controlled frame, keeping both endpoints' view of
   the window in sync, and is then replenished once it drops below the
   usual threshold. This is the same accounting model nghttp2 uses for
   frames that will never be consumed by a stream.
   
   This also adds an HTTP/2 client AuTest that floods a closed stream with
   two windows' worth of DATA while honoring the advertised window, and
   then verifies the connection still completes a POST.
   
   Fixes: #13640


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to