aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMaxim Dounin <mdounin@mdounin.ru>2011-09-15 18:12:58 +0000
committerMaxim Dounin <mdounin@mdounin.ru>2011-09-15 18:12:58 +0000
commitc42c70f478b4ec1a153b77129fd3e905f5b74314 (patch)
tree126224fc10f2d4dcfa4f5c42917d644b2a40ea88 /src
parentd7c2673d3ffb5c8c7c994a3ee385997237ed0d99 (diff)
downloadnginx-c42c70f478b4ec1a153b77129fd3e905f5b74314.tar.gz
nginx-c42c70f478b4ec1a153b77129fd3e905f5b74314.zip
Workaround for cpu hog on errors with cached connections.
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.
Diffstat (limited to 'src')
-rw-r--r--src/http/ngx_http_upstream.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/http/ngx_http_upstream.c b/src/http/ngx_http_upstream.c
index f698833af..3913e1389 100644
--- a/src/http/ngx_http_upstream.c
+++ b/src/http/ngx_http_upstream.c
@@ -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) {