Included, thanks Stefan!

On Wed, Feb 20, 2019 at 4:57 PM ste...@eissing.org <ste...@eissing.org> wrote:
>
> Ok, got a fix in r1853967 and propose to include in mod_reqtimeout backport.
>
> Cheers, Stefan
>
> > Am 20.02.2019 um 16:09 schrieb ste...@eissing.org:
> >
> > Ok, I think I understood:
> >
> > - On a h2 slave connection, slave->keepalives is always > 0, to keep 
> > certain parts of our server from thinking "Oh, this is the first request!"
> > - mod_reqtimeout interprets this as "we are inbetween requests", 
> > ccfg->in_keep_alive != 0
> > - mod_reqtimeout.c:184+ input filter does a speculative read and expects to 
> > see either an error or some data
> > - if not, it return the spec read status
> > - Here, in the failure case, the base slave_in filter return APR_EAGAIN
> >  * this was a fix to prevent ap_check_pipeline() from closing the 
> > connection when seeing APR_SUCCESS with 0 bytes
> > - The read itself is, in the test case, done by mod_cgid which on != 
> > APR_SUCCESS fails with a 400 response
> >
> > The patch did not really change this behaviour, but it changed the 
> > initialization order.
> >
> > Why does this only trigger in this new test case?
> > - Sending requests via mod_proxy_http2 changes the timings of EOF 
> > detection. When the EOF is not signalled on the header frame, the request 
> > body is indeterminate until a DATA frame with EOF arrives. That may happen 
> > after mod_reqtimeout checks.
> > - the slave input filter gets called with a SPEC read of 1 byte, has no 
> > data and also has not seen an EOF. It returns ARP_EAGAIN.
> >
> > What to do?
> > - I think the mod_reqtimeout patch is mostly correct and it should be be 
> > active on h2 slave connections as well
> > - But maybe mod_reqtimeout needs slightly different behaviour on a slave 
> > connection. maybe the keepalives spec reads need to be abandoned here.
> > - Changing the return code of the h2 slave input filter to return 
> > APR_SUCCESS on the speculative read will not really help. mod_reqtimeout 
> > will return this to the caller as there was no data. This means that 
> > mod_cgid will just call it again in a infinite loop until either data or an 
> > EOF arrives. That does not seem good either.
> >
> > Any other ideas?
> >
> > -Stefan
> >
> >> Am 20.02.2019 um 15:14 schrieb ste...@eissing.org:
> >>
> >>
> >>
> >>> Am 20.02.2019 um 10:53 schrieb yla...@apache.org:
> >>>
> >>> Author: ylavic
> >>> Date: Wed Feb 20 09:53:30 2019
> >>> New Revision: 1853939
> >>>
> >>> URL: http://svn.apache.org/viewvc?rev=1853939&view=rev
> >>> Log:
> >>> Propose.
> >>>
> >>> Modified:
> >>>  httpd/httpd/branches/2.4.x/STATUS
> >>>
> >>> Modified: httpd/httpd/branches/2.4.x/STATUS
> >>> URL: 
> >>> http://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/STATUS?rev=1853939&r1=1853938&r2=1853939&view=diff
> >>> ==============================================================================
> >>> --- httpd/httpd/branches/2.4.x/STATUS (original)
> >>> +++ httpd/httpd/branches/2.4.x/STATUS Wed Feb 20 09:53:30 2019
> >>> @@ -246,6 +246,23 @@ PATCHES PROPOSED TO BACKPORT FROM TRUNK:
> >>>    2.4.x patch: 
> >>> http://people.apache.org/~ylavic/patches/httpd-2.4.x-forward_100_continue-v3.patch
> >>>    +1: ylavic
> >>>
> >>> +  *) mod_reqtimeout: Allow to configure (TLS-)handshake timeouts.  PR 
> >>> 61310.
> >>> +     trunk patch: http://svn.apache.org/r1853901
> >>> +                  http://svn.apache.org/r1853906
> >>> +                  http://svn.apache.org/r1853908
> >>> +                  http://svn.apache.org/r1853929
> >>> +                  http://svn.apache.org/r1853935
> >>> +     2.4.x patch: 
> >>> http://people.apache.org/~ylavic/patches/httpd-2.4.x-reqtimeout_handshake.patch
> >>> +     +1: ylavic
> >>
> >> This one is giving me headaches. I added test_600_01 to master at 
> >> https://github.com/icing/mod_h2 that triggers it.
> >>
> >> My suspicion is that mod_reqtimeout and mod_http2 need some more 
> >> coordination. While the handshake timeout is very useful also for h2 
> >> connections, waiting for GETLINE or such is less useful.
> >>
> >> There is more than one path how a connection can go from h1 to h2 (alpn, 
> >> direct 24 bytes detection, h1 upgrade:). Direct h2 use by curl/nghttp 
> >> works, but mod_proxy_http2 does not.
> >>
> >> We have a hook for protocol switching: ap_hook_protocol_switch(...) and 
> >> probably mod_reqtimeout needs to listen to that and changes its (at least 
> >> part of the) input/output filtering accordingly.
> >>
> >> I will try to understand how things go sideways with the change and report 
> >> back here.
> >>
> >> -Stefan
> >
>

Reply via email to