[nginx] Upstream keepalive: reduced diffs to the plus version of...
Roman Arutyunyan
arut at nginx.com
Fri Jun 5 17:47:51 UTC 2015
details: http://hg.nginx.org/nginx/rev/87d48f8793b6
branches:
changeset: 6167:87d48f8793b6
user: Roman Arutyunyan <arut at nginx.com>
date: Thu Jun 04 23:46:44 2015 +0300
description:
Upstream keepalive: reduced diffs to the plus version of nginx.
diffstat:
src/http/modules/ngx_http_upstream_keepalive_module.c | 81 +++++++++---------
1 files changed, 42 insertions(+), 39 deletions(-)
diffs (149 lines):
diff -r ac52b46ebab5 -r 87d48f8793b6 src/http/modules/ngx_http_upstream_keepalive_module.c
--- a/src/http/modules/ngx_http_upstream_keepalive_module.c Fri Jun 05 17:10:34 2015 +0300
+++ b/src/http/modules/ngx_http_upstream_keepalive_module.c Thu Jun 04 23:46:44 2015 +0300
@@ -25,6 +25,18 @@ typedef struct {
typedef struct {
ngx_http_upstream_keepalive_srv_conf_t *conf;
+ ngx_queue_t queue;
+ ngx_connection_t *connection;
+
+ socklen_t socklen;
+ u_char sockaddr[NGX_SOCKADDRLEN];
+
+} ngx_http_upstream_keepalive_cache_t;
+
+
+typedef struct {
+ ngx_http_upstream_keepalive_srv_conf_t *conf;
+
ngx_http_upstream_t *upstream;
void *data;
@@ -40,18 +52,6 @@ typedef struct {
} ngx_http_upstream_keepalive_peer_data_t;
-typedef struct {
- ngx_http_upstream_keepalive_srv_conf_t *conf;
-
- ngx_queue_t queue;
- ngx_connection_t *connection;
-
- socklen_t socklen;
- u_char sockaddr[NGX_SOCKADDRLEN];
-
-} ngx_http_upstream_keepalive_cache_t;
-
-
static ngx_int_t ngx_http_upstream_init_keepalive_peer(ngx_http_request_t *r,
ngx_http_upstream_srv_conf_t *us);
static ngx_int_t ngx_http_upstream_get_keepalive_peer(ngx_peer_connection_t *pc,
@@ -63,7 +63,6 @@ static void ngx_http_upstream_keepalive_
static void ngx_http_upstream_keepalive_close_handler(ngx_event_t *ev);
static void ngx_http_upstream_keepalive_close(ngx_connection_t *c);
-
#if (NGX_HTTP_SSL)
static ngx_int_t ngx_http_upstream_keepalive_set_session(
ngx_peer_connection_t *pc, void *data);
@@ -244,24 +243,28 @@ ngx_http_upstream_get_keepalive_peer(ngx
ngx_queue_remove(q);
ngx_queue_insert_head(&kp->conf->free, q);
- ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0,
- "get keepalive peer: using connection %p", c);
-
- c->idle = 0;
- c->sent = 0;
- c->log = pc->log;
- c->read->log = pc->log;
- c->write->log = pc->log;
- c->pool->log = pc->log;
-
- pc->connection = c;
- pc->cached = 1;
-
- return NGX_DONE;
+ goto found;
}
}
return NGX_OK;
+
+found:
+
+ ngx_log_debug1(NGX_LOG_DEBUG_HTTP, pc->log, 0,
+ "get keepalive peer: using connection %p", c);
+
+ c->idle = 0;
+ c->sent = 0;
+ c->log = pc->log;
+ c->read->log = pc->log;
+ c->write->log = pc->log;
+ c->pool->log = pc->log;
+
+ pc->connection = c;
+ pc->cached = 1;
+
+ return NGX_DONE;
}
@@ -322,8 +325,9 @@ ngx_http_upstream_free_keepalive_peer(ng
item = ngx_queue_data(q, ngx_http_upstream_keepalive_cache_t, queue);
}
+ ngx_queue_insert_head(&kp->conf->cache, q);
+
item->connection = c;
- ngx_queue_insert_head(&kp->conf->cache, q);
pc->connection = NULL;
@@ -470,10 +474,9 @@ ngx_http_upstream_keepalive_create_conf(
*
* conf->original_init_upstream = NULL;
* conf->original_init_peer = NULL;
+ * conf->max_cached = 0;
*/
- conf->max_cached = 1;
-
return conf;
}
@@ -487,18 +490,10 @@ ngx_http_upstream_keepalive(ngx_conf_t *
ngx_int_t n;
ngx_str_t *value;
- uscf = ngx_http_conf_get_module_srv_conf(cf, ngx_http_upstream_module);
-
- if (kcf->original_init_upstream) {
+ if (kcf->max_cached) {
return "is duplicate";
}
- kcf->original_init_upstream = uscf->peer.init_upstream
- ? uscf->peer.init_upstream
- : ngx_http_upstream_init_round_robin;
-
- uscf->peer.init_upstream = ngx_http_upstream_init_keepalive;
-
/* read options */
value = cf->args->elts;
@@ -514,5 +509,13 @@ ngx_http_upstream_keepalive(ngx_conf_t *
kcf->max_cached = n;
+ uscf = ngx_http_conf_get_module_srv_conf(cf, ngx_http_upstream_module);
+
+ kcf->original_init_upstream = uscf->peer.init_upstream
+ ? uscf->peer.init_upstream
+ : ngx_http_upstream_init_round_robin;
+
+ uscf->peer.init_upstream = ngx_http_upstream_init_keepalive;
+
return NGX_CONF_OK;
}
More information about the nginx-devel
mailing list