> -----Original Message-----
> From: Bert Huijben [mailto:[email protected]]
> Sent: zaterdag 28 november 2015 14:09
> To: [email protected]; [email protected]
> Subject: RE: No H2 Window updates!
>
>
>
> > -----Original Message-----
> > From: Stefan Eissing [mailto:[email protected]]
> > Sent: zaterdag 28 november 2015 13:01
> > To: [email protected]
> > 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