Skip to content

h2spec: http2/6.9.1/3 failure #3645

Description

@masaori335

It looks like when cache hit, http2/6.9.1/3 fails.

$ h2spec -h 127.0.0.1 -p 4443 -k -t -S http2/6.9.1/3
Hypertext Transfer Protocol Version 2 (HTTP/2)
  6. Frame Definitions
    6.9. WINDOW_UPDATE
      6.9.1. The Flow-Control Window
        × 3: Sends multiple WINDOW_UPDATE frames increasing the flow control window to above 2^31-1 on a stream                                                                                  -> The endpoint MUST sends a RST_STREAM frame with a FLOW_CONTROL_ERROR code.
             Expected: RST_STREAM Frame (Error Code: FLOW_CONTROL_ERROR)
               Actual: RST_STREAM Frame (length:4, flags:0x00, stream_id:1)

debug logs

[May 10 13:44:34.818] {0xb0004000} DEBUG: <Http2ClientSession.cc:432 (do_start_frame_read)> (http2_cs) [338] receiving frame header
[May 10 13:44:34.818] {0xb0004000} DEBUG: <Http2ClientSession.cc:442 (do_start_frame_read)> (http2_cs) [338] frame header length=15, type=1, flags=0x4, streamid=1
[May 10 13:44:34.818] {0xb0004000} DEBUG: <Http2ConnectionState.cc:202 (rcv_headers_frame)> (http2_con) [338] [1] Received HEADERS frame
[May 10 13:44:34.818] {0xb0004000} DEBUG: <Http2Stream.cc:269 (change_state)> (http2_stream) [338] [1] Http2StreamState::HTTP2_STREAM_STATE_OPEN
[May 10 13:44:34.818] {0xb0004000} DEBUG: <Http2Stream.cc:576 (update_write_request)> (http2_stream) [338] [1] write_vio.nbytes=893, write_vio.ndone=0, write_vio.write_avail=12007, reader.read_avail=281
[May 10 13:44:34.818] {0xb0004000} DEBUG: <Http2ConnectionState.cc:1426 (send_headers_frame)> (http2_con) [338] [1] Send HEADERS frame
[May 10 13:44:34.818] {0xb0004000} DEBUG: <Http2Stream.cc:576 (update_write_request)> (http2_stream) [338] [1] write_vio.nbytes=893, write_vio.ndone=281, write_vio.write_avail=8192, reader.read_avail=612
[May 10 13:44:34.818] {0xb0004000} DEBUG: <Http2ConnectionState.cc:1358 (send_a_data_frame)> (http2_con) [338] [1] Send a DATA frame - client window con: 64923 stream: 64923 payload:   612
[May 10 13:44:34.818] {0xb0004000} DEBUG: <Http2ConnectionState.cc:1373 (send_a_data_frame)> (http2_con) [338] [1] End of DATA frame
[May 10 13:44:34.818] {0xb0004000} DEBUG: <Http2Stream.cc:269 (change_state)> (http2_stream) [338] [1] Http2StreamState::HTTP2_STREAM_STATE_HALF_CLOSED_LOCAL
[May 10 13:44:34.818] {0xb0004000} DEBUG: <Http2ConnectionState.cc:1406 (send_data_frames)> (http2_con) [338] [1] Shutdown stream
[May 10 13:44:34.818] {0xb0004000} DEBUG: <Http2ConnectionState.cc:1159 (delete_stream)> (http2_con) [338] [1] Delete stream
[May 10 13:44:34.818] {0xb0004000} DEBUG: <Http2ConnectionState.cc:1628 (send_rst_stream_frame)> (http2_con) [338] [1] Send RST_STREAM frame
[May 10 13:44:34.818] {0xb0004000} DEBUG: <Http2Stream.cc:269 (change_state)> (http2_stream) [338] [1] Http2StreamState::HTTP2_STREAM_STATE_CLOSED
[May 10 13:44:34.818] {0xb0004000} DEBUG: <Http2Stream.cc:390 (initiating_close)> (http2_stream) [338] [1] initiating_close
[May 10 13:44:34.818] {0xb0004000} DEBUG: <Http2Stream.cc:418 (initiating_close)> (http2_stream) [338] [1] handle write from destroy (event=103)
[May 10 13:44:34.818] {0xb0004000} DEBUG: <Http2Stream.cc:713 (destroy)> (http2_stream) [338] [1] Destroy stream, sent 612 bytes
[May 10 13:44:34.818] {0xb0004000} DEBUG: <Http2ClientSession.cc:432 (do_start_frame_read)> (http2_cs) [338] receiving frame header
[May 10 13:44:34.818] {0xb0004000} DEBUG: <Http2ClientSession.cc:442 (do_start_frame_read)> (http2_cs) [338] frame header length=4, type=8, flags=0x0, streamid=1
[May 10 13:44:34.818] {0xb0004000} DEBUG: <Http2ClientSession.cc:432 (do_start_frame_read)> (http2_cs) [338] receiving frame header
[May 10 13:44:34.818] {0xb0004000} DEBUG: <Http2ClientSession.cc:442 (do_start_frame_read)> (http2_cs) [338] frame header length=4, type=8, flags=0x0, streamid=1
[May 10 13:44:34.819] {0xb0004000} DEBUG: <Http2ClientSession.cc:258 (do_io_close)> (http2_cs) [338] session closed
[May 10 13:44:34.819] {0xb0004000} DEBUG: <Http2ClientSession.cc:68 (destroy)> (http2_cs) [338] session destroy
[May 10 13:44:34.819] {0xb0004000} DEBUG: <Http2ClientSession.cc:95 (free)> (http2_cs) [338] session free

From debug logs, it looks like ATS send response, send RST_STREAM immediately, and close the stream. Probably, ATS should wait ES from client or inactivity timeout in half-closed (local) state.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions