[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