]> git.kaiwu.me - nginx.git/commit
Fixing cpu hog with all upstream servers marked "down".
authorMaxim Dounin <mdounin@mdounin.ru>
Thu, 18 Aug 2011 16:52:38 +0000 (16:52 +0000)
committerMaxim Dounin <mdounin@mdounin.ru>
Thu, 18 Aug 2011 16:52:38 +0000 (16:52 +0000)
commit624fbe94a23e183dc356f9c3e696a816cb67acc2
tree5591c57365753efcf3c1686a1f531cc5252490fb
parent9bc8fc4602fb2b39b6000fed060e185ffcf2571b
Fixing cpu hog with all upstream servers marked "down".

The following configuration causes nginx to hog cpu due to infinite loop
in ngx_http_upstream_get_peer():

    upstream backend {
        server 127.0.0.1:8080 down;
        server 127.0.0.1:8080 down;
    }

    server {
       ...
       location / {
           proxy_pass http://backend;
       }
    }

Make sure we don't loop infinitely in ngx_http_upstream_get_peer() but stop
after resetting peer weights once.

Return 0 if we are stuck.  This is guaranteed to work as peer 0 always exists,
and eventually ngx_http_upstream_get_round_robin_peer() will do the right
thing falling back to backup servers or returning NGX_BUSY.
src/http/ngx_http_upstream_round_robin.c