]> git.kaiwu.me - nginx.git/commitdiff
Upstream hash: reordered peer checks.
authorMaxim Dounin <mdounin@mdounin.ru>
Thu, 5 Oct 2017 14:43:05 +0000 (17:43 +0300)
committerMaxim Dounin <mdounin@mdounin.ru>
Thu, 5 Oct 2017 14:43:05 +0000 (17:43 +0300)
This slightly reduces cost of selecting a peer if all or almost all peers
failed, see ticket #1030.  There should be no measureable difference with
other workloads.

src/http/modules/ngx_http_upstream_hash_module.c
src/stream/ngx_stream_upstream_hash_module.c

index 78e672c0f261907b58ef5941ceec10a716d7db85..d67f34d58e5952d9c5c87ce936c9e7e8ddc7b0de 100644 (file)
@@ -543,13 +543,6 @@ ngx_http_upstream_get_chash_peer(ngx_peer_connection_t *pc, void *data)
                 continue;
             }
 
-            if (peer->server.len != server->len
-                || ngx_strncmp(peer->server.data, server->data, server->len)
-                   != 0)
-            {
-                continue;
-            }
-
             if (peer->max_fails
                 && peer->fails >= peer->max_fails
                 && now - peer->checked <= peer->fail_timeout)
@@ -561,6 +554,13 @@ ngx_http_upstream_get_chash_peer(ngx_peer_connection_t *pc, void *data)
                 continue;
             }
 
+            if (peer->server.len != server->len
+                || ngx_strncmp(peer->server.data, server->data, server->len)
+                   != 0)
+            {
+                continue;
+            }
+
             peer->current_weight += peer->effective_weight;
             total += peer->effective_weight;
 
index 413537989679dce6e46475903a1e7bc055261813..79ad742cf926ea2d36cb4fd1132d7412d4e84e25 100644 (file)
@@ -544,13 +544,6 @@ ngx_stream_upstream_get_chash_peer(ngx_peer_connection_t *pc, void *data)
                 continue;
             }
 
-            if (peer->server.len != server->len
-                || ngx_strncmp(peer->server.data, server->data, server->len)
-                   != 0)
-            {
-                continue;
-            }
-
             if (peer->max_fails
                 && peer->fails >= peer->max_fails
                 && now - peer->checked <= peer->fail_timeout)
@@ -562,6 +555,13 @@ ngx_stream_upstream_get_chash_peer(ngx_peer_connection_t *pc, void *data)
                 continue;
             }
 
+            if (peer->server.len != server->len
+                || ngx_strncmp(peer->server.data, server->data, server->len)
+                   != 0)
+            {
+                continue;
+            }
+
             peer->current_weight += peer->effective_weight;
             total += peer->effective_weight;