Mercurial > hg > nginx
comparison src/http/ngx_http_upstream_round_robin.c @ 5720:ab540dd44528
Upstream: simplified some code that accesses peers.
No functional changes.
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Thu, 12 Jun 2014 21:13:24 +0400 |
parents | efc84a5723b3 |
children | 5b7276408565 |
comparison
equal
deleted
inserted
replaced
5719:7f425d67f91a | 5720:ab540dd44528 |
---|---|
28 ngx_http_upstream_srv_conf_t *us) | 28 ngx_http_upstream_srv_conf_t *us) |
29 { | 29 { |
30 ngx_url_t u; | 30 ngx_url_t u; |
31 ngx_uint_t i, j, n, w; | 31 ngx_uint_t i, j, n, w; |
32 ngx_http_upstream_server_t *server; | 32 ngx_http_upstream_server_t *server; |
33 ngx_http_upstream_rr_peer_t *peer; | |
33 ngx_http_upstream_rr_peers_t *peers, *backup; | 34 ngx_http_upstream_rr_peers_t *peers, *backup; |
34 | 35 |
35 us->peer.init = ngx_http_upstream_init_round_robin_peer; | 36 us->peer.init = ngx_http_upstream_init_round_robin_peer; |
36 | 37 |
37 if (us->servers) { | 38 if (us->servers) { |
67 peers->weighted = (w != n); | 68 peers->weighted = (w != n); |
68 peers->total_weight = w; | 69 peers->total_weight = w; |
69 peers->name = &us->host; | 70 peers->name = &us->host; |
70 | 71 |
71 n = 0; | 72 n = 0; |
73 peer = peers->peer; | |
72 | 74 |
73 for (i = 0; i < us->servers->nelts; i++) { | 75 for (i = 0; i < us->servers->nelts; i++) { |
74 if (server[i].backup) { | 76 if (server[i].backup) { |
75 continue; | 77 continue; |
76 } | 78 } |
77 | 79 |
78 for (j = 0; j < server[i].naddrs; j++) { | 80 for (j = 0; j < server[i].naddrs; j++) { |
79 peers->peer[n].sockaddr = server[i].addrs[j].sockaddr; | 81 peer[n].sockaddr = server[i].addrs[j].sockaddr; |
80 peers->peer[n].socklen = server[i].addrs[j].socklen; | 82 peer[n].socklen = server[i].addrs[j].socklen; |
81 peers->peer[n].name = server[i].addrs[j].name; | 83 peer[n].name = server[i].addrs[j].name; |
82 peers->peer[n].weight = server[i].weight; | 84 peer[n].weight = server[i].weight; |
83 peers->peer[n].effective_weight = server[i].weight; | 85 peer[n].effective_weight = server[i].weight; |
84 peers->peer[n].current_weight = 0; | 86 peer[n].current_weight = 0; |
85 peers->peer[n].max_fails = server[i].max_fails; | 87 peer[n].max_fails = server[i].max_fails; |
86 peers->peer[n].fail_timeout = server[i].fail_timeout; | 88 peer[n].fail_timeout = server[i].fail_timeout; |
87 peers->peer[n].down = server[i].down; | 89 peer[n].down = server[i].down; |
88 peers->peer[n].server = server[i].name; | 90 peer[n].server = server[i].name; |
89 n++; | 91 n++; |
90 } | 92 } |
91 } | 93 } |
92 | 94 |
93 us->peer.data = peers; | 95 us->peer.data = peers; |
122 backup->weighted = (w != n); | 124 backup->weighted = (w != n); |
123 backup->total_weight = w; | 125 backup->total_weight = w; |
124 backup->name = &us->host; | 126 backup->name = &us->host; |
125 | 127 |
126 n = 0; | 128 n = 0; |
129 peer = backup->peer; | |
127 | 130 |
128 for (i = 0; i < us->servers->nelts; i++) { | 131 for (i = 0; i < us->servers->nelts; i++) { |
129 if (!server[i].backup) { | 132 if (!server[i].backup) { |
130 continue; | 133 continue; |
131 } | 134 } |
132 | 135 |
133 for (j = 0; j < server[i].naddrs; j++) { | 136 for (j = 0; j < server[i].naddrs; j++) { |
134 backup->peer[n].sockaddr = server[i].addrs[j].sockaddr; | 137 peer[n].sockaddr = server[i].addrs[j].sockaddr; |
135 backup->peer[n].socklen = server[i].addrs[j].socklen; | 138 peer[n].socklen = server[i].addrs[j].socklen; |
136 backup->peer[n].name = server[i].addrs[j].name; | 139 peer[n].name = server[i].addrs[j].name; |
137 backup->peer[n].weight = server[i].weight; | 140 peer[n].weight = server[i].weight; |
138 backup->peer[n].effective_weight = server[i].weight; | 141 peer[n].effective_weight = server[i].weight; |
139 backup->peer[n].current_weight = 0; | 142 peer[n].current_weight = 0; |
140 backup->peer[n].max_fails = server[i].max_fails; | 143 peer[n].max_fails = server[i].max_fails; |
141 backup->peer[n].fail_timeout = server[i].fail_timeout; | 144 peer[n].fail_timeout = server[i].fail_timeout; |
142 backup->peer[n].down = server[i].down; | 145 peer[n].down = server[i].down; |
143 backup->peer[n].server = server[i].name; | 146 peer[n].server = server[i].name; |
144 n++; | 147 n++; |
145 } | 148 } |
146 } | 149 } |
147 | 150 |
148 peers->next = backup; | 151 peers->next = backup; |
187 peers->number = n; | 190 peers->number = n; |
188 peers->weighted = 0; | 191 peers->weighted = 0; |
189 peers->total_weight = n; | 192 peers->total_weight = n; |
190 peers->name = &us->host; | 193 peers->name = &us->host; |
191 | 194 |
195 peer = peers->peer; | |
196 | |
192 for (i = 0; i < u.naddrs; i++) { | 197 for (i = 0; i < u.naddrs; i++) { |
193 peers->peer[i].sockaddr = u.addrs[i].sockaddr; | 198 peer[i].sockaddr = u.addrs[i].sockaddr; |
194 peers->peer[i].socklen = u.addrs[i].socklen; | 199 peer[i].socklen = u.addrs[i].socklen; |
195 peers->peer[i].name = u.addrs[i].name; | 200 peer[i].name = u.addrs[i].name; |
196 peers->peer[i].weight = 1; | 201 peer[i].weight = 1; |
197 peers->peer[i].effective_weight = 1; | 202 peer[i].effective_weight = 1; |
198 peers->peer[i].current_weight = 0; | 203 peer[i].current_weight = 0; |
199 peers->peer[i].max_fails = 1; | 204 peer[i].max_fails = 1; |
200 peers->peer[i].fail_timeout = 10; | 205 peer[i].fail_timeout = 10; |
201 } | 206 } |
202 | 207 |
203 us->peer.data = peers; | 208 us->peer.data = peers; |
204 | 209 |
205 /* implicitly defined upstream has no backup servers */ | 210 /* implicitly defined upstream has no backup servers */ |
269 u_char *p; | 274 u_char *p; |
270 size_t len; | 275 size_t len; |
271 socklen_t socklen; | 276 socklen_t socklen; |
272 ngx_uint_t i, n; | 277 ngx_uint_t i, n; |
273 struct sockaddr *sockaddr; | 278 struct sockaddr *sockaddr; |
279 ngx_http_upstream_rr_peer_t *peer; | |
274 ngx_http_upstream_rr_peers_t *peers; | 280 ngx_http_upstream_rr_peers_t *peers; |
275 ngx_http_upstream_rr_peer_data_t *rrp; | 281 ngx_http_upstream_rr_peer_data_t *rrp; |
276 | 282 |
277 rrp = r->upstream->peer.data; | 283 rrp = r->upstream->peer.data; |
278 | 284 |
293 | 299 |
294 peers->single = (ur->naddrs == 1); | 300 peers->single = (ur->naddrs == 1); |
295 peers->number = ur->naddrs; | 301 peers->number = ur->naddrs; |
296 peers->name = &ur->host; | 302 peers->name = &ur->host; |
297 | 303 |
304 peer = peers->peer; | |
305 | |
298 if (ur->sockaddr) { | 306 if (ur->sockaddr) { |
299 peers->peer[0].sockaddr = ur->sockaddr; | 307 peer[0].sockaddr = ur->sockaddr; |
300 peers->peer[0].socklen = ur->socklen; | 308 peer[0].socklen = ur->socklen; |
301 peers->peer[0].name = ur->host; | 309 peer[0].name = ur->host; |
302 peers->peer[0].weight = 1; | 310 peer[0].weight = 1; |
303 peers->peer[0].effective_weight = 1; | 311 peer[0].effective_weight = 1; |
304 peers->peer[0].current_weight = 0; | 312 peer[0].current_weight = 0; |
305 peers->peer[0].max_fails = 1; | 313 peer[0].max_fails = 1; |
306 peers->peer[0].fail_timeout = 10; | 314 peer[0].fail_timeout = 10; |
307 | 315 |
308 } else { | 316 } else { |
309 | 317 |
310 for (i = 0; i < ur->naddrs; i++) { | 318 for (i = 0; i < ur->naddrs; i++) { |
311 | 319 |
333 return NGX_ERROR; | 341 return NGX_ERROR; |
334 } | 342 } |
335 | 343 |
336 len = ngx_sock_ntop(sockaddr, socklen, p, NGX_SOCKADDR_STRLEN, 1); | 344 len = ngx_sock_ntop(sockaddr, socklen, p, NGX_SOCKADDR_STRLEN, 1); |
337 | 345 |
338 peers->peer[i].sockaddr = sockaddr; | 346 peer[i].sockaddr = sockaddr; |
339 peers->peer[i].socklen = socklen; | 347 peer[i].socklen = socklen; |
340 peers->peer[i].name.len = len; | 348 peer[i].name.len = len; |
341 peers->peer[i].name.data = p; | 349 peer[i].name.data = p; |
342 peers->peer[i].weight = 1; | 350 peer[i].weight = 1; |
343 peers->peer[i].effective_weight = 1; | 351 peer[i].effective_weight = 1; |
344 peers->peer[i].current_weight = 0; | 352 peer[i].current_weight = 0; |
345 peers->peer[i].max_fails = 1; | 353 peer[i].max_fails = 1; |
346 peers->peer[i].fail_timeout = 10; | 354 peer[i].fail_timeout = 10; |
347 } | 355 } |
348 } | 356 } |
349 | 357 |
350 rrp->peers = peers; | 358 rrp->peers = peers; |
351 rrp->current = 0; | 359 rrp->current = 0; |
387 ngx_http_upstream_rr_peers_t *peers; | 395 ngx_http_upstream_rr_peers_t *peers; |
388 | 396 |
389 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0, | 397 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0, |
390 "get rr peer, try: %ui", pc->tries); | 398 "get rr peer, try: %ui", pc->tries); |
391 | 399 |
392 /* ngx_lock_mutex(rrp->peers->mutex); */ | |
393 | |
394 pc->cached = 0; | 400 pc->cached = 0; |
395 pc->connection = NULL; | 401 pc->connection = NULL; |
396 | 402 |
397 if (rrp->peers->single) { | 403 peers = rrp->peers; |
398 peer = &rrp->peers->peer[0]; | 404 |
405 /* ngx_lock_mutex(peers->mutex); */ | |
406 | |
407 if (peers->single) { | |
408 peer = &peers->peer[0]; | |
399 | 409 |
400 if (peer->down) { | 410 if (peer->down) { |
401 goto failed; | 411 goto failed; |
402 } | 412 } |
403 | 413 |
418 | 428 |
419 pc->sockaddr = peer->sockaddr; | 429 pc->sockaddr = peer->sockaddr; |
420 pc->socklen = peer->socklen; | 430 pc->socklen = peer->socklen; |
421 pc->name = &peer->name; | 431 pc->name = &peer->name; |
422 | 432 |
423 /* ngx_unlock_mutex(rrp->peers->mutex); */ | 433 /* ngx_unlock_mutex(peers->mutex); */ |
424 | 434 |
425 if (pc->tries == 1 && rrp->peers->next) { | 435 if (pc->tries == 1 && peers->next) { |
426 pc->tries += rrp->peers->next->number; | 436 pc->tries += peers->next->number; |
427 } | 437 } |
428 | 438 |
429 return NGX_OK; | 439 return NGX_OK; |
430 | 440 |
431 failed: | 441 failed: |
432 | |
433 peers = rrp->peers; | |
434 | 442 |
435 if (peers->next) { | 443 if (peers->next) { |
436 | 444 |
437 /* ngx_unlock_mutex(peers->mutex); */ | 445 /* ngx_unlock_mutex(peers->mutex); */ |
438 | 446 |