[nginx] Core: disabled cloning sockets when testing config (ticket #2188).

Maxim Dounin mdounin at mdounin.ru
Mon May 31 14:39:52 UTC 2021


details:   https://hg.nginx.org/nginx/rev/c860f0b7010c
branches:  
changeset: 7867:c860f0b7010c
user:      Maxim Dounin <mdounin at mdounin.ru>
date:      Mon May 31 16:36:37 2021 +0300
description:
Core: disabled cloning sockets when testing config (ticket #2188).

Since we anyway do not set SO_REUSEPORT when testing configuration
(see ecb5cd305b06), trying to open additional sockets does not make much
sense, as all these additional sockets are expected to result in EADDRINUSE
errors from bind().  On the other hand, there are reports that trying
to open these sockets takes significant time under load: total configuration
testing time greater than 15s was observed in ticket #2188, compared to less
than 1s without load.

With this change, no additional sockets are opened during testing
configuration.

diffstat:

 src/event/ngx_event.c |  27 +++++++++++++++------------
 1 files changed, 15 insertions(+), 12 deletions(-)

diffs (39 lines):

diff -r 7e4aeb464642 -r c860f0b7010c src/event/ngx_event.c
--- a/src/event/ngx_event.c	Mon May 31 16:36:12 2021 +0300
+++ b/src/event/ngx_event.c	Mon May 31 16:36:37 2021 +0300
@@ -441,20 +441,23 @@ ngx_event_init_conf(ngx_cycle_t *cycle, 
 
 #if (NGX_HAVE_REUSEPORT)
 
-    ls = cycle->listening.elts;
-    for (i = 0; i < cycle->listening.nelts; i++) {
-
-        if (!ls[i].reuseport || ls[i].worker != 0) {
-            continue;
-        }
-
-        if (ngx_clone_listening(cycle, &ls[i]) != NGX_OK) {
-            return NGX_CONF_ERROR;
-        }
-
-        /* cloning may change cycle->listening.elts */
+    if (!ngx_test_config) {
 
         ls = cycle->listening.elts;
+        for (i = 0; i < cycle->listening.nelts; i++) {
+
+            if (!ls[i].reuseport || ls[i].worker != 0) {
+                continue;
+            }
+
+            if (ngx_clone_listening(cycle, &ls[i]) != NGX_OK) {
+                return NGX_CONF_ERROR;
+            }
+
+            /* cloning may change cycle->listening.elts */
+
+            ls = cycle->listening.elts;
+        }
     }
 
 #endif


More information about the nginx-devel mailing list