Hi Patrick,

> > >> With incomplete headers I get:
> > >> haproxy[8893]: 127.0.0.1:41438 [02/May/2014:14:11:26.373] f1 f1/<NOSRV>
> > >> -1/-1/-1/-1/1001 408 212 - - cR-- 0/0/0/0/0 0/0 "<BADREQ>"
> > >>
> > >> With no body I get:
> > >> haproxy[8893]: 127.0.0.1:41439 [02/May/2014:14:11:29.576] f1 b1/s1
> > >> 0/0/0/-1/2002 504 194 - - sH-- 1/1/1/1/0 0/0 "GET / HTTP/1.1"
> > >>
> > >> With incomplete body I get:
> > >> haproxy[8893]: 127.0.0.1:41441 [02/May/2014:14:11:29.779] f1 b1/s1
> > >> 0/0/0/-1/2002 504 194 - - sH-- 0/0/0/0/0 0/0 "GET / HTTP/1.1"
> > > Great, thank you. I think that it tends to fuel the theory that the
> > > response error is not set where it should be in the forwarding path.
> > >
> > > I'll check this ASAP. BTW, it would be nice if you could check this
> > > as well with 1.4.25, I guess it does the same.
> > >
> > > Best regards,
> > > Willy
> > >
> > Confirmed. Exact same behavior with 1.4.25
> 
> Thank you!

Just FYI, I found that the problem initially comes from these few lines
in process_session() :

                if ((s->rep->flags & (CF_AUTO_CLOSE|CF_SHUTR)) == 0 &&
                    (tick_isset(s->req->wex) || tick_isset(s->rep->rex))) {
                        s->req->flags |= CF_READ_NOEXP;
                        s->req->rex = TICK_ETERNITY;
                }

They were originally merged in 1.3.16 with this commit :

  commit 7f875f6c8fe15660ca789eaf7d4846cee8ba8414
  Author: Willy Tarreau <w...@1wt.eu>
  Date:   Mon Aug 11 17:35:01 2008 +0200

    [MEDIUM] simplify and centralize request timeout cancellation and request 
forwarding
    
    Instead of playing with req->flags and request timeout everywhere,
    tweak them only at precise locations.

I need to carefully study the impact of changing this because undoing
this could result in missed timeouts from time to time.

At least now if I remove them, when the session times out, the logs report
"cD" which is correct. The delay is still the server's delay (because the
error handling is incomplete in http_request_forward_body()) and the status
is -1 for the same reason.

I expect to look into this during this week.

Best regards,
Willy


Reply via email to