Mercurial > hg > ngx_http_upstream_keepalive
annotate ngx_http_upstream_keepalive_module.c @ 5:e7d1b49e0611
Keepalive: style.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Thu, 23 Oct 2008 19:18:36 +0400 |
parents | e18e4613b841 |
children | bef88ba0b378 |
rev | line source |
---|---|
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
1 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
2 /* |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
3 * Copyright (C) Maxim Dounin |
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
4 */ |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
5 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
6 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
7 #include <ngx_config.h> |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
8 #include <ngx_core.h> |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
9 #include <ngx_http.h> |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
10 |
5 | 11 |
2
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
12 typedef struct { |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
13 ngx_queue_t queue; |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
14 ngx_connection_t *connection; |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
15 } ngx_http_upstream_keepalive_cache_t; |
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
16 |
5 | 17 |
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
18 typedef struct { |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
19 ngx_uint_t max_cached; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
20 |
2
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
21 ngx_queue_t cache; |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
22 ngx_queue_t free; |
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
23 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
24 ngx_http_upstream_init_pt original_init_upstream; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
25 ngx_http_upstream_init_peer_pt original_init_peer; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
26 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
27 } ngx_http_upstream_keepalive_srv_conf_t; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
28 |
5 | 29 |
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
30 typedef struct { |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
31 ngx_http_upstream_keepalive_srv_conf_t *conf; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
32 |
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
33 void *data; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
34 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
35 ngx_event_get_peer_pt original_get_peer; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
36 ngx_event_free_peer_pt original_free_peer; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
37 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
38 } ngx_http_upstream_keepalive_peer_data_t; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
39 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
40 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
41 static ngx_int_t ngx_http_upstream_init_keepalive_peer(ngx_http_request_t *r, |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
42 ngx_http_upstream_srv_conf_t *us); |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
43 static ngx_int_t ngx_http_upstream_get_keepalive_peer(ngx_peer_connection_t *pc, |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
44 void *data); |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
45 static void ngx_http_upstream_free_keepalive_peer(ngx_peer_connection_t *pc, |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
46 void *data, ngx_uint_t state); |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
47 |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
48 static void ngx_http_upstream_keepalive_dummy_handler(ngx_event_t *ev); |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
49 static void ngx_http_upstream_keepalive_close_handler(ngx_event_t *ev); |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
50 |
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
51 static void *ngx_http_upstream_keepalive_create_conf(ngx_conf_t *cf); |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
52 static char *ngx_http_upstream_keepalive(ngx_conf_t *cf, ngx_command_t *cmd, |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
53 void *conf); |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
54 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
55 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
56 static ngx_command_t ngx_http_upstream_keepalive_commands[] = { |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
57 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
58 { ngx_string("keepalive"), |
4
e18e4613b841
Keepalive: unbreak cache size parsing and protect from zero.
Maxim Dounin <mdounin@mdounin.ru>
parents:
3
diff
changeset
|
59 NGX_HTTP_UPS_CONF|NGX_CONF_NOARGS|NGX_CONF_TAKE1, |
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
60 ngx_http_upstream_keepalive, |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
61 0, |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
62 0, |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
63 NULL }, |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
64 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
65 ngx_null_command |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
66 }; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
67 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
68 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
69 static ngx_http_module_t ngx_http_upstream_keepalive_module_ctx = { |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
70 NULL, /* preconfiguration */ |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
71 NULL, /* postconfiguration */ |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
72 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
73 NULL, /* create main configuration */ |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
74 NULL, /* init main configuration */ |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
75 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
76 ngx_http_upstream_keepalive_create_conf, /* create server configuration */ |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
77 NULL, /* merge server configuration */ |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
78 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
79 NULL, /* create location configuration */ |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
80 NULL /* merge location configuration */ |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
81 }; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
82 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
83 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
84 ngx_module_t ngx_http_upstream_keepalive_module = { |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
85 NGX_MODULE_V1, |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
86 &ngx_http_upstream_keepalive_module_ctx, /* module context */ |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
87 ngx_http_upstream_keepalive_commands, /* module directives */ |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
88 NGX_HTTP_MODULE, /* module type */ |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
89 NULL, /* init master */ |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
90 NULL, /* init module */ |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
91 NULL, /* init process */ |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
92 NULL, /* init thread */ |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
93 NULL, /* exit thread */ |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
94 NULL, /* exit process */ |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
95 NULL, /* exit master */ |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
96 NGX_MODULE_V1_PADDING |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
97 }; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
98 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
99 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
100 ngx_int_t |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
101 ngx_http_upstream_init_keepalive(ngx_conf_t *cf, |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
102 ngx_http_upstream_srv_conf_t *us) |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
103 { |
2
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
104 ngx_uint_t i; |
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
105 ngx_http_upstream_keepalive_srv_conf_t *kcf; |
2
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
106 ngx_http_upstream_keepalive_cache_t *cached; |
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
107 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
108 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, cf->log, 0, |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
109 "init keepalive"); |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
110 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
111 kcf = ngx_http_conf_upstream_srv_conf(us, |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
112 ngx_http_upstream_keepalive_module); |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
113 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
114 if (kcf->original_init_upstream(cf, us) != NGX_OK) { |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
115 return NGX_ERROR; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
116 } |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
117 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
118 kcf->original_init_peer = us->peer.init; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
119 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
120 us->peer.init = ngx_http_upstream_init_keepalive_peer; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
121 |
2
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
122 /* allocate cache items and add to free queue */ |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
123 |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
124 cached = ngx_pcalloc(cf->pool, |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
125 sizeof(ngx_http_upstream_keepalive_cache_t) * kcf->max_cached); |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
126 if (cached == NULL) { |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
127 return NGX_ERROR; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
128 } |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
129 |
2
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
130 ngx_queue_init(&kcf->cache); |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
131 ngx_queue_init(&kcf->free); |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
132 |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
133 for (i = 0; i < kcf->max_cached; i++) { |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
134 ngx_queue_insert_head(&kcf->free, &cached[i].queue); |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
135 } |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
136 |
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
137 return NGX_OK; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
138 } |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
139 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
140 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
141 static ngx_int_t |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
142 ngx_http_upstream_init_keepalive_peer(ngx_http_request_t *r, |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
143 ngx_http_upstream_srv_conf_t *us) |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
144 { |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
145 ngx_http_upstream_keepalive_peer_data_t *kp; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
146 ngx_http_upstream_keepalive_srv_conf_t *kcf; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
147 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
148 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
149 "init keepalive peer"); |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
150 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
151 kcf = ngx_http_conf_upstream_srv_conf(us, |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
152 ngx_http_upstream_keepalive_module); |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
153 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
154 kp = ngx_palloc(r->pool, sizeof(ngx_http_upstream_keepalive_peer_data_t)); |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
155 if (kp == NULL) { |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
156 return NGX_ERROR; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
157 } |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
158 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
159 if (kcf->original_init_peer(r, us) != NGX_OK) { |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
160 return NGX_ERROR; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
161 } |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
162 |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
163 kp->conf = kcf; |
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
164 kp->data = r->upstream->peer.data; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
165 kp->original_get_peer = r->upstream->peer.get; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
166 kp->original_free_peer = r->upstream->peer.free; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
167 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
168 r->upstream->peer.data = kp; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
169 r->upstream->peer.get = ngx_http_upstream_get_keepalive_peer; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
170 r->upstream->peer.free = ngx_http_upstream_free_keepalive_peer; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
171 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
172 return NGX_OK; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
173 } |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
174 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
175 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
176 static ngx_int_t |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
177 ngx_http_upstream_get_keepalive_peer(ngx_peer_connection_t *pc, void *data) |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
178 { |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
179 ngx_http_upstream_keepalive_peer_data_t *kp = data; |
2
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
180 ngx_http_upstream_keepalive_cache_t *item; |
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
181 |
2
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
182 ngx_queue_t *q; |
5 | 183 ngx_connection_t *c; |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
184 |
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
185 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, pc->log, 0, |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
186 "get keepalive peer"); |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
187 |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
188 /* XXX single pool of cached connections */ |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
189 |
2
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
190 if (!ngx_queue_empty(&kp->conf->cache)) { |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
191 |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
192 q = ngx_queue_head(&kp->conf->cache); |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
193 ngx_queue_remove(q); |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
194 |
2
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
195 item = ngx_queue_data(q, ngx_http_upstream_keepalive_cache_t, queue); |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
196 c = item->connection; |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
197 |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
198 ngx_queue_insert_head(&kp->conf->free, q); |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
199 |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
200 c->idle = 0; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
201 c->log = pc->log; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
202 c->read->log = pc->log; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
203 c->write->log = pc->log; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
204 |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
205 pc->connection = c; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
206 pc->cached = 1; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
207 |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
208 return NGX_DONE; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
209 } |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
210 |
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
211 return kp->original_get_peer(pc, kp->data); |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
212 } |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
213 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
214 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
215 static void |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
216 ngx_http_upstream_free_keepalive_peer(ngx_peer_connection_t *pc, void *data, |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
217 ngx_uint_t state) |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
218 { |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
219 ngx_http_upstream_keepalive_peer_data_t *kp = data; |
2
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
220 ngx_http_upstream_keepalive_cache_t *item; |
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
221 |
2
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
222 ngx_queue_t *q; |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
223 ngx_connection_t *c; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
224 |
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
225 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, pc->log, 0, |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
226 "free keepalive peer"); |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
227 |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
228 if (!(state & NGX_PEER_FAILED) |
3
42e64900483b
Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
229 && pc->connection != NULL) |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
230 { |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
231 c = pc->connection; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
232 |
3
42e64900483b
Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
233 if (ngx_queue_empty(&kp->conf->free)) { |
42e64900483b
Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
234 |
42e64900483b
Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
235 q = ngx_queue_last(&kp->conf->cache); |
42e64900483b
Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
236 ngx_queue_remove(q); |
42e64900483b
Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
237 |
42e64900483b
Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
238 item = ngx_queue_data(q, ngx_http_upstream_keepalive_cache_t, |
42e64900483b
Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
239 queue); |
42e64900483b
Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
240 |
42e64900483b
Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
241 ngx_close_connection(item->connection); |
2
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
242 |
3
42e64900483b
Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
243 } else { |
42e64900483b
Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
244 q = ngx_queue_head(&kp->conf->free); |
42e64900483b
Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
245 ngx_queue_remove(q); |
42e64900483b
Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
246 |
42e64900483b
Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
247 item = ngx_queue_data(q, ngx_http_upstream_keepalive_cache_t, |
42e64900483b
Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
248 queue); |
42e64900483b
Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
249 } |
42e64900483b
Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents:
2
diff
changeset
|
250 |
2
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
251 item->connection = c; |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
252 ngx_queue_insert_head(&kp->conf->cache, q); |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
253 |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
254 pc->connection = NULL; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
255 |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
256 if (c->read->timer_set) { |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
257 ngx_del_timer(c->read); |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
258 } |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
259 if (c->write->timer_set) { |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
260 ngx_del_timer(c->write); |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
261 } |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
262 |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
263 c->write->handler = ngx_http_upstream_keepalive_dummy_handler; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
264 c->read->handler = ngx_http_upstream_keepalive_close_handler; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
265 |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
266 c->data = kp->conf; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
267 c->idle = 1; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
268 c->log = ngx_cycle->log; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
269 c->read->log = ngx_cycle->log; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
270 c->write->log = ngx_cycle->log; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
271 } |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
272 |
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
273 return kp->original_free_peer(pc, kp->data, state); |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
274 } |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
275 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
276 |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
277 static void |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
278 ngx_http_upstream_keepalive_dummy_handler(ngx_event_t *ev) |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
279 { |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
280 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, ev->log, 0, |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
281 "keepalive dummy handler"); |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
282 } |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
283 |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
284 |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
285 static void |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
286 ngx_http_upstream_keepalive_close_handler(ngx_event_t *ev) |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
287 { |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
288 ngx_http_upstream_keepalive_srv_conf_t *conf; |
2
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
289 ngx_http_upstream_keepalive_cache_t *item; |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
290 |
2
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
291 ngx_queue_t *q, *cache; |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
292 ngx_connection_t *c; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
293 |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
294 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, ev->log, 0, |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
295 "keepalive close handler"); |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
296 |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
297 c = ev->data; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
298 conf = c->data; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
299 |
2
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
300 cache = &conf->cache; |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
301 |
2
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
302 for (q = ngx_queue_head(cache); |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
303 q != ngx_queue_sentinel(cache); |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
304 q = ngx_queue_next(q)) |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
305 { |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
306 item = ngx_queue_data(q, ngx_http_upstream_keepalive_cache_t, queue); |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
307 |
2
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
308 if (item->connection == c) { |
8545bbda9e4b
Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents:
1
diff
changeset
|
309 ngx_queue_remove(q); |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
310 ngx_close_connection(c); |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
311 return; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
312 } |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
313 } |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
314 |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
315 ngx_log_error(NGX_LOG_ALERT, ev->log, 0, |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
316 "keepalive close handler: unknown connection %p", c); |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
317 ngx_close_connection(c); |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
318 } |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
319 |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
320 |
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
321 static void * |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
322 ngx_http_upstream_keepalive_create_conf(ngx_conf_t *cf) |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
323 { |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
324 ngx_http_upstream_keepalive_srv_conf_t *conf; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
325 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
326 conf = ngx_pcalloc(cf->pool, |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
327 sizeof(ngx_http_upstream_keepalive_srv_conf_t)); |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
328 if (conf == NULL) { |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
329 return NGX_CONF_ERROR; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
330 } |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
331 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
332 /* |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
333 * set by ngx_pcalloc(): |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
334 * |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
335 * conf->original_init_upstream = NULL; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
336 * conf->original_init_peer = NULL; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
337 */ |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
338 |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
339 conf->max_cached = 1; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
340 |
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
341 return conf; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
342 } |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
343 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
344 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
345 static char * |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
346 ngx_http_upstream_keepalive(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
347 { |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
348 ngx_http_upstream_srv_conf_t *uscf; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
349 ngx_http_upstream_keepalive_srv_conf_t *kcf; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
350 |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
351 ngx_int_t n; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
352 ngx_str_t *value; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
353 ngx_uint_t i; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
354 |
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
355 uscf = ngx_http_conf_get_module_srv_conf(cf, ngx_http_upstream_module); |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
356 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
357 kcf = ngx_http_conf_upstream_srv_conf(uscf, |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
358 ngx_http_upstream_keepalive_module); |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
359 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
360 kcf->original_init_upstream = uscf->peer.init_upstream |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
361 ? uscf->peer.init_upstream |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
362 : ngx_http_upstream_init_round_robin; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
363 |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
364 uscf->peer.init_upstream = ngx_http_upstream_init_keepalive; |
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
365 |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
366 /* read options */ |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
367 |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
368 value = cf->args->elts; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
369 |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
370 for (i = 1; i < cf->args->nelts; i++) { |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
371 |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
372 if (ngx_strncmp(value[i].data, "cached=", 7) == 0) { |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
373 n = ngx_atoi(&value[i].data[7], value[i].len - 7); |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
374 |
4
e18e4613b841
Keepalive: unbreak cache size parsing and protect from zero.
Maxim Dounin <mdounin@mdounin.ru>
parents:
3
diff
changeset
|
375 if (n == NGX_ERROR || n == 0) { |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
376 goto invalid; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
377 } |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
378 |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
379 kcf->max_cached = n; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
380 |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
381 continue; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
382 } |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
383 |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
384 goto invalid; |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
385 } |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
386 |
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
387 return NGX_CONF_OK; |
1
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
388 |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
389 invalid: |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
390 |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
391 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
392 "invalid parameter \"%V\"", &value[i]); |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
393 |
ca955a7f651b
Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents:
0
diff
changeset
|
394 return NGX_CONF_ERROR; |
0
725ee11164f3
Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff
changeset
|
395 } |