comparison src/http/ngx_http_upstream_round_robin.c @ 6705:29bf0dbc0a77

Upstream: max_conns.
author Ruslan Ermilov <ru@nginx.com>
date Thu, 22 Sep 2016 19:32:47 +0300
parents a44ba757851d
children fd5c2781460b
comparison
equal deleted inserted replaced
6704:a44ba757851d 6705:29bf0dbc0a77
90 peer[n].socklen = server[i].addrs[j].socklen; 90 peer[n].socklen = server[i].addrs[j].socklen;
91 peer[n].name = server[i].addrs[j].name; 91 peer[n].name = server[i].addrs[j].name;
92 peer[n].weight = server[i].weight; 92 peer[n].weight = server[i].weight;
93 peer[n].effective_weight = server[i].weight; 93 peer[n].effective_weight = server[i].weight;
94 peer[n].current_weight = 0; 94 peer[n].current_weight = 0;
95 peer[n].max_conns = server[i].max_conns;
95 peer[n].max_fails = server[i].max_fails; 96 peer[n].max_fails = server[i].max_fails;
96 peer[n].fail_timeout = server[i].fail_timeout; 97 peer[n].fail_timeout = server[i].fail_timeout;
97 peer[n].down = server[i].down; 98 peer[n].down = server[i].down;
98 peer[n].server = server[i].name; 99 peer[n].server = server[i].name;
99 100
153 peer[n].socklen = server[i].addrs[j].socklen; 154 peer[n].socklen = server[i].addrs[j].socklen;
154 peer[n].name = server[i].addrs[j].name; 155 peer[n].name = server[i].addrs[j].name;
155 peer[n].weight = server[i].weight; 156 peer[n].weight = server[i].weight;
156 peer[n].effective_weight = server[i].weight; 157 peer[n].effective_weight = server[i].weight;
157 peer[n].current_weight = 0; 158 peer[n].current_weight = 0;
159 peer[n].max_conns = server[i].max_conns;
158 peer[n].max_fails = server[i].max_fails; 160 peer[n].max_fails = server[i].max_fails;
159 peer[n].fail_timeout = server[i].fail_timeout; 161 peer[n].fail_timeout = server[i].fail_timeout;
160 peer[n].down = server[i].down; 162 peer[n].down = server[i].down;
161 peer[n].server = server[i].name; 163 peer[n].server = server[i].name;
162 164
221 peer[i].socklen = u.addrs[i].socklen; 223 peer[i].socklen = u.addrs[i].socklen;
222 peer[i].name = u.addrs[i].name; 224 peer[i].name = u.addrs[i].name;
223 peer[i].weight = 1; 225 peer[i].weight = 1;
224 peer[i].effective_weight = 1; 226 peer[i].effective_weight = 1;
225 peer[i].current_weight = 0; 227 peer[i].current_weight = 0;
228 peer[i].max_conns = 0;
226 peer[i].max_fails = 1; 229 peer[i].max_fails = 1;
227 peer[i].fail_timeout = 10; 230 peer[i].fail_timeout = 10;
228 *peerp = &peer[i]; 231 *peerp = &peer[i];
229 peerp = &peer[i].next; 232 peerp = &peer[i].next;
230 } 233 }
335 peer[0].socklen = ur->socklen; 338 peer[0].socklen = ur->socklen;
336 peer[0].name = ur->host; 339 peer[0].name = ur->host;
337 peer[0].weight = 1; 340 peer[0].weight = 1;
338 peer[0].effective_weight = 1; 341 peer[0].effective_weight = 1;
339 peer[0].current_weight = 0; 342 peer[0].current_weight = 0;
343 peer[0].max_conns = 0;
340 peer[0].max_fails = 1; 344 peer[0].max_fails = 1;
341 peer[0].fail_timeout = 10; 345 peer[0].fail_timeout = 10;
342 peers->peer = peer; 346 peers->peer = peer;
343 347
344 } else { 348 } else {
368 peer[i].name.len = len; 372 peer[i].name.len = len;
369 peer[i].name.data = p; 373 peer[i].name.data = p;
370 peer[i].weight = 1; 374 peer[i].weight = 1;
371 peer[i].effective_weight = 1; 375 peer[i].effective_weight = 1;
372 peer[i].current_weight = 0; 376 peer[i].current_weight = 0;
377 peer[i].max_conns = 0;
373 peer[i].max_fails = 1; 378 peer[i].max_fails = 1;
374 peer[i].fail_timeout = 10; 379 peer[i].fail_timeout = 10;
375 *peerp = &peer[i]; 380 *peerp = &peer[i];
376 peerp = &peer[i].next; 381 peerp = &peer[i].next;
377 } 382 }
430 435
431 if (peer->down) { 436 if (peer->down) {
432 goto failed; 437 goto failed;
433 } 438 }
434 439
440 if (peer->max_conns && peer->conns >= peer->max_conns) {
441 goto failed;
442 }
443
435 rrp->current = peer; 444 rrp->current = peer;
436 445
437 } else { 446 } else {
438 447
439 /* there are several peers */ 448 /* there are several peers */
528 537
529 if (peer->max_fails 538 if (peer->max_fails
530 && peer->fails >= peer->max_fails 539 && peer->fails >= peer->max_fails
531 && now - peer->checked <= peer->fail_timeout) 540 && now - peer->checked <= peer->fail_timeout)
532 { 541 {
542 continue;
543 }
544
545 if (peer->max_conns && peer->conns >= peer->max_conns) {
533 continue; 546 continue;
534 } 547 }
535 548
536 peer->current_weight += peer->effective_weight; 549 peer->current_weight += peer->effective_weight;
537 total += peer->effective_weight; 550 total += peer->effective_weight;