Mercurial > hg > nginx-mail
comparison src/http/ngx_http_upstream_round_robin.c @ 340:10cc350ed8a1 NGINX_0_6_14
nginx 0.6.14
*) Change: now by default the "echo" SSI command uses entity encoding.
*) Feature: the "encoding" parameter in the "echo" SSI command.
*) Feature: the "access_log" directive may be used inside the
"limit_except" block.
*) Bugfix: if all upstream servers were failed, then all servers had
got weight the was equal one until servers became alive; bug
appeared in 0.6.6.
*) Bugfix: a segmentation fault occurred in worker process if
$date_local and $date_gmt were used outside the
ngx_http_ssi_filter_module.
*) Bugfix: a segmentation fault might occur in worker process if debug
log was enabled.
Thanks to Andrei Nigmatulin.
*) Bugfix: ngx_http_memcached_module did not set
$upstream_response_time.
Thanks to Maxim Dounin.
*) Bugfix: a worker process may got caught in an endless loop, if the
memcached was used.
*) Bugfix: nginx supported low case only "close" and "keep-alive"
values in the "Connection" request header line; bug appeared in
0.6.11.
*) Bugfix: sub_filter did not work with empty substitution.
*) Bugfix: in sub_filter parsing.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Mon, 15 Oct 2007 00:00:00 +0400 |
parents | 1c519aff5c0c |
children | e10168d6e371 |
comparison
equal
deleted
inserted
replaced
339:d19550b67059 | 340:10cc350ed8a1 |
---|---|
143 ngx_memzero(&u, sizeof(ngx_url_t)); | 143 ngx_memzero(&u, sizeof(ngx_url_t)); |
144 | 144 |
145 u.host = us->host; | 145 u.host = us->host; |
146 u.port = (in_port_t) (us->port ? us->port : us->default_port); | 146 u.port = (in_port_t) (us->port ? us->port : us->default_port); |
147 | 147 |
148 if (ngx_inet_resolve_host(cf, &u) != NGX_OK) { | 148 if (ngx_inet_resolve_host(cf->pool, &u) != NGX_OK) { |
149 if (u.err) { | 149 if (u.err) { |
150 ngx_log_error(NGX_LOG_EMERG, cf->log, 0, | 150 ngx_log_error(NGX_LOG_EMERG, cf->log, 0, |
151 "%s in upstream \"%V\" in %s:%ui", | 151 "%s in upstream \"%V\" in %s:%ui", |
152 u.err, &us->host, us->file_name, us->line); | 152 u.err, &us->host, us->file_name, us->line); |
153 } | 153 } |
165 | 165 |
166 peers->single = (n == 1); | 166 peers->single = (n == 1); |
167 peers->number = n; | 167 peers->number = n; |
168 peers->name = &us->host; | 168 peers->name = &us->host; |
169 | 169 |
170 n = 0; | |
171 | |
172 for (i = 0; i < u.naddrs; i++) { | 170 for (i = 0; i < u.naddrs; i++) { |
173 peers->peer[n].sockaddr = u.addrs[i].sockaddr; | 171 peers->peer[i].sockaddr = u.addrs[i].sockaddr; |
174 peers->peer[n].socklen = u.addrs[i].socklen; | 172 peers->peer[i].socklen = u.addrs[i].socklen; |
175 peers->peer[n].name = u.addrs[i].name; | 173 peers->peer[i].name = u.addrs[i].name; |
176 peers->peer[n].weight = 1; | 174 peers->peer[i].weight = 1; |
177 peers->peer[n].current_weight = 1; | 175 peers->peer[i].current_weight = 1; |
178 peers->peer[n].max_fails = 1; | 176 peers->peer[i].max_fails = 1; |
179 peers->peer[n].fail_timeout = 10; | 177 peers->peer[i].fail_timeout = 10; |
180 n++; | |
181 } | 178 } |
182 | 179 |
183 us->peer.data = peers; | 180 us->peer.data = peers; |
184 | 181 |
185 /* implicitly defined upstream has no backup servers */ | 182 /* implicitly defined upstream has no backup servers */ |
512 | 509 |
513 return n; | 510 return n; |
514 } | 511 } |
515 | 512 |
516 for (i = 0; i < peers->number; i++) { | 513 for (i = 0; i < peers->number; i++) { |
517 if (peer->max_fails == 0 || peer->fails < peer->max_fails) { | 514 peer[i].current_weight += peer[i].weight; |
518 peer[i].current_weight += peer[i].weight; | |
519 | |
520 } else { | |
521 /* 1 allows to go to quick recovery when all peers failed */ | |
522 peer[i].current_weight = 1; | |
523 } | |
524 } | 515 } |
525 } | 516 } |
526 } | 517 } |
527 | 518 |
528 | 519 |