In memory subrequest hang if backend return 500

Hi All,

In the file ngx_http_upstream.c I found some code like this:

1618 if (u->headers_in.status_n > NGX_HTTP_SPECIAL_RESPONSE) {
1619
1620 if (r->subrequest_in_memory) {
1621 u->buffer.last = u->buffer.pos;
1622 }

that means, if the status backend return if greater than 300, the first
part of the body would be abandoned. Will this cause the issue that the
main request won’t be woken again and keep sleeping until timeout? Or
did I
misunderstand anything?

Yours,
Abioy

Hello!

On Wed, Mar 21, 2012 at 10:53:45AM +0800, Abioy S. wrote:

that means, if the status backend return if greater than 300, the first
part of the body would be abandoned. Will this cause the issue that the
main request won’t be woken again and keep sleeping until timeout? Or did I
misunderstand anything?

Do you use keepalive connections to backends?

As far as I see, this may indeed cause problems with keepalive
connections, though should be ok in non-keepalive case.

Maxim D.