Upstream: fixed fail_timeout and max_fails > 1.

Due to peer->checked always set since rev. c90801720a0c (1.3.0)
by round-robin and least_conn balancers (ip_hash not affected),
the code in ngx_http_upstream_free_round_robin_peer() function
incorrectly reset peer->fails too often.

Reported by Dmitry Popov,
http://mailman.nginx.org/pipermail/nginx-devel/2013-May/003720.html
This commit is contained in:
Maxim Dounin 2013-05-21 21:47:50 +04:00
parent 3b854154f4
commit 9695fa7bc8
2 changed files with 8 additions and 2 deletions

View File

@ -282,7 +282,10 @@ ngx_http_upstream_get_least_conn_peer(ngx_peer_connection_t *pc, void *data)
}
best->current_weight -= total;
best->checked = now;
if (now - best->checked > best->fail_timeout) {
best->checked = now;
}
pc->sockaddr = best->sockaddr;
pc->socklen = best->socklen;

View File

@ -523,7 +523,10 @@ ngx_http_upstream_get_peer(ngx_http_upstream_rr_peer_data_t *rrp)
rrp->tried[n] |= m;
best->current_weight -= total;
best->checked = now;
if (now - best->checked > best->fail_timeout) {
best->checked = now;
}
return best;
}