comparison src/http/ngx_http_upstream_round_robin.c @ 4724:0141b4aec0e4 stable-1.2

Merge of r4655, r4656, r4657, r4695, r4696: upstream changes. *) Upstream: least_conn balancer module. *) Upstream: weights and IPv6 support in ip_hash balancer. *) Upstream keepalive: "single" parameter deprecated.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 02 Jul 2012 16:41:13 +0000
parents d05ab8793a69
children 3795aeb360fb
comparison
equal deleted inserted replaced
4723:68ac485abbba 4724:0141b4aec0e4
28 ngx_int_t 28 ngx_int_t
29 ngx_http_upstream_init_round_robin(ngx_conf_t *cf, 29 ngx_http_upstream_init_round_robin(ngx_conf_t *cf,
30 ngx_http_upstream_srv_conf_t *us) 30 ngx_http_upstream_srv_conf_t *us)
31 { 31 {
32 ngx_url_t u; 32 ngx_url_t u;
33 ngx_uint_t i, j, n; 33 ngx_uint_t i, j, n, w;
34 ngx_http_upstream_server_t *server; 34 ngx_http_upstream_server_t *server;
35 ngx_http_upstream_rr_peers_t *peers, *backup; 35 ngx_http_upstream_rr_peers_t *peers, *backup;
36 36
37 us->peer.init = ngx_http_upstream_init_round_robin_peer; 37 us->peer.init = ngx_http_upstream_init_round_robin_peer;
38 38
39 if (us->servers) { 39 if (us->servers) {
40 server = us->servers->elts; 40 server = us->servers->elts;
41 41
42 n = 0; 42 n = 0;
43 w = 0;
43 44
44 for (i = 0; i < us->servers->nelts; i++) { 45 for (i = 0; i < us->servers->nelts; i++) {
45 if (server[i].backup) { 46 if (server[i].backup) {
46 continue; 47 continue;
47 } 48 }
48 49
49 n += server[i].naddrs; 50 n += server[i].naddrs;
51 w += server[i].naddrs * server[i].weight;
50 } 52 }
51 53
52 if (n == 0) { 54 if (n == 0) {
53 ngx_log_error(NGX_LOG_EMERG, cf->log, 0, 55 ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
54 "no servers in upstream \"%V\" in %s:%ui", 56 "no servers in upstream \"%V\" in %s:%ui",
62 return NGX_ERROR; 64 return NGX_ERROR;
63 } 65 }
64 66
65 peers->single = (n == 1); 67 peers->single = (n == 1);
66 peers->number = n; 68 peers->number = n;
69 peers->weighted = (w != n);
70 peers->total_weight = w;
67 peers->name = &us->host; 71 peers->name = &us->host;
68 72
69 n = 0; 73 n = 0;
70 74
71 for (i = 0; i < us->servers->nelts; i++) { 75 for (i = 0; i < us->servers->nelts; i++) {
94 ngx_http_upstream_cmp_servers); 98 ngx_http_upstream_cmp_servers);
95 99
96 /* backup servers */ 100 /* backup servers */
97 101
98 n = 0; 102 n = 0;
103 w = 0;
99 104
100 for (i = 0; i < us->servers->nelts; i++) { 105 for (i = 0; i < us->servers->nelts; i++) {
101 if (!server[i].backup) { 106 if (!server[i].backup) {
102 continue; 107 continue;
103 } 108 }
104 109
105 n += server[i].naddrs; 110 n += server[i].naddrs;
111 w += server[i].naddrs * server[i].weight;
106 } 112 }
107 113
108 if (n == 0) { 114 if (n == 0) {
109 return NGX_OK; 115 return NGX_OK;
110 } 116 }
116 } 122 }
117 123
118 peers->single = 0; 124 peers->single = 0;
119 backup->single = 0; 125 backup->single = 0;
120 backup->number = n; 126 backup->number = n;
127 backup->weighted = (w != n);
128 backup->total_weight = w;
121 backup->name = &us->host; 129 backup->name = &us->host;
122 130
123 n = 0; 131 n = 0;
124 132
125 for (i = 0; i < us->servers->nelts; i++) { 133 for (i = 0; i < us->servers->nelts; i++) {
183 return NGX_ERROR; 191 return NGX_ERROR;
184 } 192 }
185 193
186 peers->single = (n == 1); 194 peers->single = (n == 1);
187 peers->number = n; 195 peers->number = n;
196 peers->weighted = 0;
197 peers->total_weight = n;
188 peers->name = &us->host; 198 peers->name = &us->host;
189 199
190 for (i = 0; i < u.naddrs; i++) { 200 for (i = 0; i < u.naddrs; i++) {
191 peers->peer[i].sockaddr = u.addrs[i].sockaddr; 201 peers->peer[i].sockaddr = u.addrs[i].sockaddr;
192 peers->peer[i].socklen = u.addrs[i].socklen; 202 peers->peer[i].socklen = u.addrs[i].socklen;