Mercurial > hg > nginx-quic
comparison src/http/modules/ngx_http_upstream_keepalive_module.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 | d620f497c50f |
children | 82336a9ce26d |
comparison
equal
deleted
inserted
replaced
4723:68ac485abbba | 4724:0141b4aec0e4 |
---|---|
10 #include <ngx_http.h> | 10 #include <ngx_http.h> |
11 | 11 |
12 | 12 |
13 typedef struct { | 13 typedef struct { |
14 ngx_uint_t max_cached; | 14 ngx_uint_t max_cached; |
15 ngx_uint_t single; /* unsigned:1 */ | |
16 | 15 |
17 ngx_queue_t cache; | 16 ngx_queue_t cache; |
18 ngx_queue_t free; | 17 ngx_queue_t free; |
19 | 18 |
20 ngx_http_upstream_init_pt original_init_upstream; | 19 ngx_http_upstream_init_pt original_init_upstream; |
221 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, pc->log, 0, | 220 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, pc->log, 0, |
222 "get keepalive peer"); | 221 "get keepalive peer"); |
223 | 222 |
224 kp->failed = 0; | 223 kp->failed = 0; |
225 | 224 |
226 /* single pool of cached connections */ | 225 /* ask balancer */ |
227 | |
228 if (kp->conf->single && !ngx_queue_empty(&kp->conf->cache)) { | |
229 | |
230 q = ngx_queue_head(&kp->conf->cache); | |
231 | |
232 item = ngx_queue_data(q, ngx_http_upstream_keepalive_cache_t, queue); | |
233 c = item->connection; | |
234 | |
235 ngx_queue_remove(q); | |
236 ngx_queue_insert_head(&kp->conf->free, q); | |
237 | |
238 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0, | |
239 "get keepalive peer: using connection %p", c); | |
240 | |
241 c->idle = 0; | |
242 c->log = pc->log; | |
243 c->read->log = pc->log; | |
244 c->write->log = pc->log; | |
245 c->pool->log = pc->log; | |
246 | |
247 pc->connection = c; | |
248 pc->cached = 1; | |
249 | |
250 return NGX_DONE; | |
251 } | |
252 | 226 |
253 rc = kp->original_get_peer(pc, kp->data); | 227 rc = kp->original_get_peer(pc, kp->data); |
254 | 228 |
255 if (kp->conf->single || rc != NGX_OK) { | 229 if (rc != NGX_OK) { |
256 return rc; | 230 return rc; |
257 } | 231 } |
258 | 232 |
259 /* search cache for suitable connection */ | 233 /* search cache for suitable connection */ |
260 | 234 |
550 kcf->max_cached = n; | 524 kcf->max_cached = n; |
551 | 525 |
552 for (i = 2; i < cf->args->nelts; i++) { | 526 for (i = 2; i < cf->args->nelts; i++) { |
553 | 527 |
554 if (ngx_strcmp(value[i].data, "single") == 0) { | 528 if (ngx_strcmp(value[i].data, "single") == 0) { |
555 kcf->single = 1; | 529 ngx_conf_log_error(NGX_LOG_WARN, cf, 0, |
530 "the \"single\" parameter is deprecated"); | |
556 continue; | 531 continue; |
557 } | 532 } |
558 | 533 |
559 goto invalid; | 534 goto invalid; |
560 } | 535 } |