[
https://issues.apache.org/jira/browse/TS-5092?focusedWorklogId=34465&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-34465
]
ASF GitHub Bot logged work on TS-5092:
--------------------------------------
Author: ASF GitHub Bot
Created on: 01/Jan/17 16:53
Start Date: 01/Jan/17 16:53
Worklog Time Spent: 10m
Work Description: Github user maskit commented on a diff in the pull
request:
https://github.com/apache/trafficserver/pull/1262#discussion_r94286274
--- Diff: proxy/http2/Http2ConnectionState.cc ---
@@ -728,18 +732,18 @@ rcv_continuation_frame(Http2ConnectionState &cstate,
const Http2Frame &frame)
cstate.clear_continued_stream_id();
if (!stream->change_state(HTTP2_FRAME_TYPE_CONTINUATION,
frame.header().flags)) {
- return Http2Error(HTTP2_ERROR_CLASS_CONNECTION,
HTTP2_ERROR_PROTOCOL_ERROR);
+ return Http2Error(HTTP2_ERROR_CLASS_CONNECTION,
HTTP2_ERROR_PROTOCOL_ERROR, "continuation no state change");
}
Http2ErrorCode result =
stream->decode_header_blocks(*cstate.local_hpack_handle);
if (result != HTTP2_ERROR_NO_ERROR) {
if (result == HTTP2_ERROR_COMPRESSION_ERROR) {
- return Http2Error(HTTP2_ERROR_CLASS_CONNECTION,
HTTP2_ERROR_COMPRESSION_ERROR);
+ return Http2Error(HTTP2_ERROR_CLASS_CONNECTION,
HTTP2_ERROR_COMPRESSION_ERROR, "continuation compression error");
} else if (result == HTTP2_ERROR_ENHANCE_YOUR_CALM) {
- return Http2Error(HTTP2_ERROR_CLASS_CONNECTION,
HTTP2_ERROR_ENHANCE_YOUR_CALM);
+ return Http2Error(HTTP2_ERROR_CLASS_CONNECTION,
HTTP2_ERROR_ENHANCE_YOUR_CALM, "continuation enhance your calm");
} else {
- return Http2Error(HTTP2_ERROR_CLASS_STREAM,
HTTP2_ERROR_PROTOCOL_ERROR);
+ return Http2Error(HTTP2_ERROR_CLASS_CONNECTION,
HTTP2_ERROR_PROTOCOL_ERROR, "continuation decode error");
--- End diff --
This case is actually not for a decode error but HTTP2 violation, such as
using uppercase in header names. All decode errors should be handled as
compression error. We don't have to abandon all following requests with a
connection error, because the HPACK decoder instance keeps valid status. Please
see 8.1.2.6.
I'd put a message like "continuation malformed request".
Issue Time Tracking
-------------------
Worklog Id: (was: 34465)
Time Spent: 40m (was: 0.5h)
> ATS handling of too many concurrent streams too agressive and maybe out of
> spec
> -------------------------------------------------------------------------------
>
> Key: TS-5092
> URL: https://issues.apache.org/jira/browse/TS-5092
> Project: Traffic Server
> Issue Type: Bug
> Components: HTTP/2
> Reporter: Susan Hinrichs
> Assignee: Susan Hinrichs
> Fix For: 7.1.0
>
> Time Spent: 40m
> Remaining Estimate: 0h
>
> This issue was identified while debugging new errors seen by an internal team
> after they enabled HTTP/2 in their client. On the backend, they saw an
> increase in the cases were ATS sends the origin the POST header but no POST
> body and then closes the connection.
> With the addition of Error() messages we were able to see a case where the
> client is trying to open the 101'st stream on a session. This is beyond the
> 100 max concurrent stream limit, so ATS shuts down the session which kills
> the previous 100 streams.
> A closer reading of section 5.1.2 of the spec
> (https://tools.ietf.org/html/rfc7540#section-5.1.2) indicates that this
> should be a stream error and not a connection error. Bryan Call, Masaori, and
> Maskit confirmed this interpretation. Maskit also noted that the other error
> case in the current createStream method must be treated as a connection error.
> Presumably the client library is expecting the refused stream case so it can
> try again later.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)