comparison src/stream/ngx_stream_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 829468da49d6
comparison
equal deleted inserted replaced
6704:a44ba757851d 6705:29bf0dbc0a77
94 peer[n].socklen = server[i].addrs[j].socklen; 94 peer[n].socklen = server[i].addrs[j].socklen;
95 peer[n].name = server[i].addrs[j].name; 95 peer[n].name = server[i].addrs[j].name;
96 peer[n].weight = server[i].weight; 96 peer[n].weight = server[i].weight;
97 peer[n].effective_weight = server[i].weight; 97 peer[n].effective_weight = server[i].weight;
98 peer[n].current_weight = 0; 98 peer[n].current_weight = 0;
99 peer[n].max_conns = server[i].max_conns;
99 peer[n].max_fails = server[i].max_fails; 100 peer[n].max_fails = server[i].max_fails;
100 peer[n].fail_timeout = server[i].fail_timeout; 101 peer[n].fail_timeout = server[i].fail_timeout;
101 peer[n].down = server[i].down; 102 peer[n].down = server[i].down;
102 peer[n].server = server[i].name; 103 peer[n].server = server[i].name;
103 104
157 peer[n].socklen = server[i].addrs[j].socklen; 158 peer[n].socklen = server[i].addrs[j].socklen;
158 peer[n].name = server[i].addrs[j].name; 159 peer[n].name = server[i].addrs[j].name;
159 peer[n].weight = server[i].weight; 160 peer[n].weight = server[i].weight;
160 peer[n].effective_weight = server[i].weight; 161 peer[n].effective_weight = server[i].weight;
161 peer[n].current_weight = 0; 162 peer[n].current_weight = 0;
163 peer[n].max_conns = server[i].max_conns;
162 peer[n].max_fails = server[i].max_fails; 164 peer[n].max_fails = server[i].max_fails;
163 peer[n].fail_timeout = server[i].fail_timeout; 165 peer[n].fail_timeout = server[i].fail_timeout;
164 peer[n].down = server[i].down; 166 peer[n].down = server[i].down;
165 peer[n].server = server[i].name; 167 peer[n].server = server[i].name;
166 168
225 peer[i].socklen = u.addrs[i].socklen; 227 peer[i].socklen = u.addrs[i].socklen;
226 peer[i].name = u.addrs[i].name; 228 peer[i].name = u.addrs[i].name;
227 peer[i].weight = 1; 229 peer[i].weight = 1;
228 peer[i].effective_weight = 1; 230 peer[i].effective_weight = 1;
229 peer[i].current_weight = 0; 231 peer[i].current_weight = 0;
232 peer[i].max_conns = 0;
230 peer[i].max_fails = 1; 233 peer[i].max_fails = 1;
231 peer[i].fail_timeout = 10; 234 peer[i].fail_timeout = 10;
232 *peerp = &peer[i]; 235 *peerp = &peer[i];
233 peerp = &peer[i].next; 236 peerp = &peer[i].next;
234 } 237 }
436 439
437 if (peer->down) { 440 if (peer->down) {
438 goto failed; 441 goto failed;
439 } 442 }
440 443
444 if (peer->max_conns && peer->conns >= peer->max_conns) {
445 goto failed;
446 }
447
441 rrp->current = peer; 448 rrp->current = peer;
442 449
443 } else { 450 } else {
444 451
445 /* there are several peers */ 452 /* there are several peers */
534 541
535 if (peer->max_fails 542 if (peer->max_fails
536 && peer->fails >= peer->max_fails 543 && peer->fails >= peer->max_fails
537 && now - peer->checked <= peer->fail_timeout) 544 && now - peer->checked <= peer->fail_timeout)
538 { 545 {
546 continue;
547 }
548
549 if (peer->max_conns && peer->conns >= peer->max_conns) {
539 continue; 550 continue;
540 } 551 }
541 552
542 peer->current_weight += peer->effective_weight; 553 peer->current_weight += peer->effective_weight;
543 total += peer->effective_weight; 554 total += peer->effective_weight;