]> git.kaiwu.me - nginx.git/commitdiff
Workaround for cpu hog on errors with cached connections.
authorMaxim Dounin <mdounin@mdounin.ru>
Thu, 15 Sep 2011 18:12:58 +0000 (18:12 +0000)
committerMaxim Dounin <mdounin@mdounin.ru>
Thu, 15 Sep 2011 18:12:58 +0000 (18:12 +0000)
Just doing another connect isn't safe as peer.get() may expect peer.tries
to be strictly positive (this is the case e.g. with round robin with multiple
upstream servers).  Increment peer.tries to at least avoid cpu hog in
round robin balancer (with the patch alert will be seen instead).

This is not enough to fully address the problem though, hence TODO.  We
should be able to inform balancer that the error wasn't considered fatal
and it may make sense to retry the same peer.

src/http/ngx_http_upstream.c

index f698833af7a3d14054fa5c0056a544e7b0cf7743..3913e13891745d6aed26c219b875c9d60e4885dd 100644 (file)
@@ -2812,6 +2812,10 @@ ngx_http_upstream_next(ngx_http_request_t *r, ngx_http_upstream_t *u,
     if (u->peer.cached && ft_type == NGX_HTTP_UPSTREAM_FT_ERROR) {
         status = 0;
 
+        /* TODO: inform balancer instead */
+
+        u->peer.tries++;
+
     } else {
         switch(ft_type) {