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