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