> -----Original Message----- > From: Bert Huijben [mailto:b...@qqmail.nl] > Sent: zaterdag 28 november 2015 14:09 > To: stefan.eiss...@greenbytes.de; dev@httpd.apache.org > Subject: RE: No H2 Window updates! > > > > > -----Original Message----- > > From: Stefan Eissing [mailto:stefan.eiss...@greenbytes.de] > > Sent: zaterdag 28 november 2015 13:01 > > To: dev@httpd.apache.org > > Subject: Re: No H2 Window updates! > > > > I am not really here, but... > > > > the window updates are sent out via update_window(), line 1001, > > h2_session.c. If you do not see any window updates with a client, it may > > be that the server app you called does not read its input. I have > > several test cases with uploads and they work with nghttp and curl. > > In my case it doesn't... > > ----------------------- > if (h2_stream_set_has_open_input(session->streams)) { > /* Check that any pending window updates are sent. */ > status = h2_mplx_in_update_windows(session->mplx, > update_window, session); > if (APR_STATUS_IS_EAGAIN(status)) { > status = APR_SUCCESS; > } > else if (status == APR_SUCCESS) { > /* need to flush window updates onto the connection asap > */ > h2_conn_io_flush(&session->io); > } > } > ------------------------ > > > Looks like that ' h2_stream_set_has_open_input()' always returns false for > me, with those tiny requests of only 1 data frame. > > The streams are marked as closed the moment a data frame with EOS is > received... that is: before the frame is processed. > > In this testcase all data frames have EOS set, so this value would only be > true for me if some other outstanding request did not receive its data yet. > (Which doesn't happen yet as Subversion still assumes http/1 like > processing)
If I just replace the if (h2_stream_set_has_open_input(session->streams)) with if(TRUE) { then I do receive a few window updates... Of a few bytes each though... I would have expected a few huge returns (Kbyte+) every few requests that send data. So over the course of hundreds of requests my connection level window shrinks to almost zero... at some points I receive a few updates of a few hundred bytes... I even see one of a single byte. Data on closed streams must be accounted towards the connection window, so conditionalizing the whole processing on 'are there any readable streams' is a clear bug. Skipping all data in the last frame is another one. Perhaps the code can skip some of the processing in this case, but (as a client) I would like to see my outgoing window at the connection updated sooner. In case of Subversion's real usage, I want to commit potentially hundreds of MByte, so a connection level window of more than a few bytes would be very welcome.... With HTTP/1 we send out the data as fast as we can and the TCP windowing handles this from the httpd side... Now the http/2 level windowing should handle this. Mod_dav and mod_dav_svn are usually fast readers; just limited by trivial disk io or xml processing in the common operations, so I don't expect real problems there. Bert