annotate ngx_http_upstream_keepalive_module.c @ 10:06bd0e50e696

Keepalive: log saving connection.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 10 Nov 2008 16:09:44 +0300
parents 565939797f5c
children 15530a464dba
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
e7d1b49e0611 Keepalive: style.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4
diff changeset
11
2
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
12 typedef struct {
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
13 ngx_uint_t max_cached;
6
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
14 ngx_uint_t single; /* unsigned:1 */
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
15
2
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
16 ngx_queue_t cache;
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
17 ngx_queue_t free;
0
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
18
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
19 ngx_http_upstream_init_pt original_init_upstream;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
20 ngx_http_upstream_init_peer_pt original_init_peer;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
21
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
22 } ngx_http_upstream_keepalive_srv_conf_t;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
23
5
e7d1b49e0611 Keepalive: style.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4
diff changeset
24
0
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
25 typedef struct {
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
26 ngx_http_upstream_keepalive_srv_conf_t *conf;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
27
0
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
28 void *data;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
29
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
30 ngx_event_get_peer_pt original_get_peer;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
31 ngx_event_free_peer_pt original_free_peer;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
32
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
33 } ngx_http_upstream_keepalive_peer_data_t;
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
8
565939797f5c Keepalive: fix connection closing and avoid for loop there.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
36 typedef struct {
565939797f5c Keepalive: fix connection closing and avoid for loop there.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
37 ngx_http_upstream_keepalive_srv_conf_t *conf;
565939797f5c Keepalive: fix connection closing and avoid for loop there.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
38
565939797f5c Keepalive: fix connection closing and avoid for loop there.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
39 ngx_queue_t queue;
565939797f5c Keepalive: fix connection closing and avoid for loop there.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
40 ngx_connection_t *connection;
565939797f5c Keepalive: fix connection closing and avoid for loop there.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
41
565939797f5c Keepalive: fix connection closing and avoid for loop there.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
42 socklen_t socklen;
565939797f5c Keepalive: fix connection closing and avoid for loop there.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
43 struct sockaddr_storage sockaddr;
565939797f5c Keepalive: fix connection closing and avoid for loop there.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
44
565939797f5c Keepalive: fix connection closing and avoid for loop there.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
45 } ngx_http_upstream_keepalive_cache_t;
565939797f5c Keepalive: fix connection closing and avoid for loop there.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
46
565939797f5c Keepalive: fix connection closing and avoid for loop there.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
47
0
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
48 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
49 ngx_http_upstream_srv_conf_t *us);
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
50 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
51 void *data);
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
52 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
53 void *data, ngx_uint_t state);
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
54
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
55 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
56 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
57
0
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
58 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
59 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
60 void *conf);
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
61
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
62
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
63 static ngx_command_t ngx_http_upstream_keepalive_commands[] = {
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_string("keepalive"),
6
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
66 NGX_HTTP_UPS_CONF|NGX_CONF_TAKE12,
0
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
67 ngx_http_upstream_keepalive,
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
68 0,
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
69 0,
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
70 NULL },
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
71
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
72 ngx_null_command
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
73 };
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
74
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 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
77 NULL, /* preconfiguration */
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
78 NULL, /* postconfiguration */
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
79
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
80 NULL, /* create main configuration */
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
81 NULL, /* init main configuration */
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 ngx_http_upstream_keepalive_create_conf, /* create server configuration */
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
84 NULL, /* merge server configuration */
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
85
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
86 NULL, /* create location configuration */
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
87 NULL /* merge location configuration */
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
88 };
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
89
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
90
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
91 ngx_module_t ngx_http_upstream_keepalive_module = {
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
92 NGX_MODULE_V1,
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
93 &ngx_http_upstream_keepalive_module_ctx, /* module context */
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
94 ngx_http_upstream_keepalive_commands, /* module directives */
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
95 NGX_HTTP_MODULE, /* module type */
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
96 NULL, /* init master */
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
97 NULL, /* init module */
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
98 NULL, /* init process */
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
99 NULL, /* init thread */
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
100 NULL, /* exit thread */
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
101 NULL, /* exit process */
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
102 NULL, /* exit master */
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
103 NGX_MODULE_V1_PADDING
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
104 };
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
105
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
106
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
107 ngx_int_t
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
108 ngx_http_upstream_init_keepalive(ngx_conf_t *cf,
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
109 ngx_http_upstream_srv_conf_t *us)
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
110 {
2
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
111 ngx_uint_t i;
0
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
112 ngx_http_upstream_keepalive_srv_conf_t *kcf;
2
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
113 ngx_http_upstream_keepalive_cache_t *cached;
0
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
114
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
115 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, cf->log, 0,
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
116 "init keepalive");
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 = ngx_http_conf_upstream_srv_conf(us,
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
119 ngx_http_upstream_keepalive_module);
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
120
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
121 if (kcf->original_init_upstream(cf, us) != NGX_OK) {
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
122 return NGX_ERROR;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
123 }
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
124
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
125 kcf->original_init_peer = us->peer.init;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
126
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
127 us->peer.init = ngx_http_upstream_init_keepalive_peer;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
128
2
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
129 /* allocate cache items and add to free queue */
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
130
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
131 cached = ngx_pcalloc(cf->pool,
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
132 sizeof(ngx_http_upstream_keepalive_cache_t) * kcf->max_cached);
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
133 if (cached == NULL) {
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
134 return NGX_ERROR;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
135 }
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
136
2
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
137 ngx_queue_init(&kcf->cache);
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
138 ngx_queue_init(&kcf->free);
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
139
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
140 for (i = 0; i < kcf->max_cached; i++) {
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
141 ngx_queue_insert_head(&kcf->free, &cached[i].queue);
8
565939797f5c Keepalive: fix connection closing and avoid for loop there.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
142 cached[i].conf = kcf;
2
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
143 }
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
144
0
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
145 return NGX_OK;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
146 }
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
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
149 static ngx_int_t
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
150 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
151 ngx_http_upstream_srv_conf_t *us)
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
152 {
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
153 ngx_http_upstream_keepalive_peer_data_t *kp;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
154 ngx_http_upstream_keepalive_srv_conf_t *kcf;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
155
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
156 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
157 "init keepalive peer");
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 kcf = ngx_http_conf_upstream_srv_conf(us,
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
160 ngx_http_upstream_keepalive_module);
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 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
163 if (kp == NULL) {
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
164 return NGX_ERROR;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
165 }
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
166
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
167 if (kcf->original_init_peer(r, us) != NGX_OK) {
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
168 return NGX_ERROR;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
169 }
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
170
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
171 kp->conf = kcf;
0
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
172 kp->data = r->upstream->peer.data;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
173 kp->original_get_peer = r->upstream->peer.get;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
174 kp->original_free_peer = r->upstream->peer.free;
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 r->upstream->peer.data = kp;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
177 r->upstream->peer.get = ngx_http_upstream_get_keepalive_peer;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
178 r->upstream->peer.free = ngx_http_upstream_free_keepalive_peer;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
179
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
180 return NGX_OK;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
181 }
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
182
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
183
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
184 static ngx_int_t
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
185 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
186 {
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
187 ngx_http_upstream_keepalive_peer_data_t *kp = data;
2
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
188 ngx_http_upstream_keepalive_cache_t *item;
0
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
189
6
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
190 ngx_int_t rc;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
191 ngx_queue_t *q, *cache;
5
e7d1b49e0611 Keepalive: style.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4
diff changeset
192 ngx_connection_t *c;
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
193
0
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
194 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, pc->log, 0,
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
195 "get keepalive peer");
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
196
6
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
197 /* single pool of cached connections */
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
198
6
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
199 if (kp->conf->single && !ngx_queue_empty(&kp->conf->cache)) {
2
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
200
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
201 q = ngx_queue_head(&kp->conf->cache);
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
202 ngx_queue_remove(q);
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
203
2
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
204 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
205 c = item->connection;
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
206
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
207 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
208
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
209 c->idle = 0;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
210 c->log = pc->log;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
211 c->read->log = pc->log;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
212 c->write->log = pc->log;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
213
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
214 pc->connection = c;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
215 pc->cached = 1;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
216
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
217 return NGX_DONE;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
218 }
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
219
6
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
220 rc = kp->original_get_peer(pc, kp->data);
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
221
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
222 if (kp->conf->single || rc != NGX_OK) {
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
223 return rc;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
224 }
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
225
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
226 /* search cache for suitable connection */
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
227
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
228 cache = &kp->conf->cache;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
229
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
230 for (q = ngx_queue_head(cache);
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
231 q != ngx_queue_sentinel(cache);
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
232 q = ngx_queue_next(q))
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
233 {
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
234 item = ngx_queue_data(q, ngx_http_upstream_keepalive_cache_t, queue);
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
235 c = item->connection;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
236
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
237 if (ngx_memn2cmp((u_char *) &item->sockaddr, (u_char *) pc->sockaddr,
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
238 item->socklen, pc->socklen)
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
239 == 0)
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
240 {
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
241 ngx_queue_remove(q);
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
242 ngx_queue_insert_head(&kp->conf->free, q);
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
243
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
244 c->idle = 0;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
245 c->log = pc->log;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
246 c->read->log = pc->log;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
247 c->write->log = pc->log;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
248
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
249 pc->connection = c;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
250 pc->cached = 1;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
251
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
252 return NGX_DONE;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
253 }
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
254 }
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
255
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
256 return NGX_OK;
0
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
257 }
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
258
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
259
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
260 static void
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
261 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
262 ngx_uint_t state)
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
263 {
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
264 ngx_http_upstream_keepalive_peer_data_t *kp = data;
2
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
265 ngx_http_upstream_keepalive_cache_t *item;
0
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
266
2
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
267 ngx_queue_t *q;
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
268 ngx_connection_t *c;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
269
0
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
270 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, pc->log, 0,
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
271 "free keepalive peer");
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
272
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
273 if (!(state & NGX_PEER_FAILED)
3
42e64900483b Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
274 && pc->connection != NULL)
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
275 {
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
276 c = pc->connection;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
277
10
06bd0e50e696 Keepalive: log saving connection.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8
diff changeset
278 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0,
06bd0e50e696 Keepalive: log saving connection.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8
diff changeset
279 "free keepalive peer: saving connection %p", c);
06bd0e50e696 Keepalive: log saving connection.
Maxim Dounin <mdounin@mdounin.ru>
parents: 8
diff changeset
280
3
42e64900483b Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
281 if (ngx_queue_empty(&kp->conf->free)) {
42e64900483b Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
282
42e64900483b Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
283 q = ngx_queue_last(&kp->conf->cache);
42e64900483b Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
284 ngx_queue_remove(q);
42e64900483b Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
285
42e64900483b Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
286 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
287 queue);
42e64900483b Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
288
42e64900483b Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
289 ngx_close_connection(item->connection);
2
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
290
3
42e64900483b Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
291 } else {
42e64900483b Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
292 q = ngx_queue_head(&kp->conf->free);
42e64900483b Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
293 ngx_queue_remove(q);
42e64900483b Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
294
42e64900483b Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
295 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
296 queue);
42e64900483b Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
297 }
42e64900483b Keepalive: always save connections to cache.
Maxim Dounin <mdounin@mdounin.ru>
parents: 2
diff changeset
298
2
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
299 item->connection = c;
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
300 ngx_queue_insert_head(&kp->conf->cache, q);
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
301
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
302 pc->connection = NULL;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
303
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
304 if (c->read->timer_set) {
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
305 ngx_del_timer(c->read);
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
306 }
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
307 if (c->write->timer_set) {
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
308 ngx_del_timer(c->write);
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
309 }
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
310
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
311 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
312 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
313
8
565939797f5c Keepalive: fix connection closing and avoid for loop there.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
314 c->data = item;
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
315 c->idle = 1;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
316 c->log = ngx_cycle->log;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
317 c->read->log = ngx_cycle->log;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
318 c->write->log = ngx_cycle->log;
6
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
319
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
320 item->socklen = pc->socklen;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
321 ngx_memcpy(&item->sockaddr, pc->sockaddr, pc->socklen);
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
322 }
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
323
0
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
324 return kp->original_free_peer(pc, kp->data, state);
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
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
327
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
328 static void
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
329 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
330 {
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
331 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
332 "keepalive dummy handler");
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
333 }
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
334
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
335
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
336 static void
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
337 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
338 {
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
339 ngx_http_upstream_keepalive_srv_conf_t *conf;
2
8545bbda9e4b Keepalive: reimplement using queues.
Maxim Dounin <mdounin@mdounin.ru>
parents: 1
diff changeset
340 ngx_http_upstream_keepalive_cache_t *item;
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
341
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
342 ngx_connection_t *c;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
343
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
344 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
345 "keepalive close handler");
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
346
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
347 c = ev->data;
8
565939797f5c Keepalive: fix connection closing and avoid for loop there.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
348 item = c->data;
565939797f5c Keepalive: fix connection closing and avoid for loop there.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
349 conf = item->conf;
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
350
8
565939797f5c Keepalive: fix connection closing and avoid for loop there.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
351 ngx_queue_remove(&item->queue);
565939797f5c Keepalive: fix connection closing and avoid for loop there.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
352 ngx_close_connection(item->connection);
565939797f5c Keepalive: fix connection closing and avoid for loop there.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6
diff changeset
353 ngx_queue_insert_head(&conf->free, &item->queue);
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
354 }
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
355
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
356
0
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
357 static void *
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
358 ngx_http_upstream_keepalive_create_conf(ngx_conf_t *cf)
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 ngx_http_upstream_keepalive_srv_conf_t *conf;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
361
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
362 conf = ngx_pcalloc(cf->pool,
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
363 sizeof(ngx_http_upstream_keepalive_srv_conf_t));
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
364 if (conf == NULL) {
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
365 return NGX_CONF_ERROR;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
366 }
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
367
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
368 /*
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
369 * set by ngx_pcalloc():
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
370 *
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
371 * conf->original_init_upstream = NULL;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
372 * conf->original_init_peer = NULL;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
373 */
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
374
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
375 conf->max_cached = 1;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
376
0
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
377 return conf;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
378 }
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
379
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
380
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
381 static char *
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
382 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
383 {
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
384 ngx_http_upstream_srv_conf_t *uscf;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
385 ngx_http_upstream_keepalive_srv_conf_t *kcf;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
386
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
387 ngx_int_t n;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
388 ngx_str_t *value;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
389 ngx_uint_t i;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
390
0
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
391 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
392
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
393 kcf = ngx_http_conf_upstream_srv_conf(uscf,
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
394 ngx_http_upstream_keepalive_module);
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
395
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
396 kcf->original_init_upstream = uscf->peer.init_upstream
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
397 ? uscf->peer.init_upstream
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
398 : ngx_http_upstream_init_round_robin;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
399
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
400 uscf->peer.init_upstream = ngx_http_upstream_init_keepalive;
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
401
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
402 /* read options */
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
403
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
404 value = cf->args->elts;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
405
6
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
406 n = ngx_atoi(value[1].data, value[1].len);
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
407
6
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
408 if (n == NGX_ERROR || n == 0) {
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
409 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
410 "invalid value \"%V\" in \"%V\" directive",
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
411 &value[1], &cmd->name);
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
412 return NGX_CONF_ERROR;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
413 }
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
414
6
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
415 kcf->max_cached = n;
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
416
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
417 for (i = 2; i < cf->args->nelts; i++) {
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
418
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
419 if (ngx_strcmp(value[i].data, "single") == 0) {
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
420
bef88ba0b378 Keepalive: distinguish between upstream servers by default.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5
diff changeset
421 kcf->single = 1;
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
422
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
423 continue;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
424 }
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
425
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
426 goto invalid;
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
427 }
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
428
0
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
429 return NGX_CONF_OK;
1
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
430
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
431 invalid:
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
432
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
433 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
434 "invalid parameter \"%V\"", &value[i]);
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
435
ca955a7f651b Keepalive: common cache for all backends.
Maxim Dounin <mdounin@mdounin.ru>
parents: 0
diff changeset
436 return NGX_CONF_ERROR;
0
725ee11164f3 Keepalive upstream balancer: transparent skeleton.
Maxim Dounin <mdounin@mdounin.ru>
parents:
diff changeset
437 }