]> git.kaiwu.me - nginx.git/commitdiff
Upstream: reject upstreams without normal servers.
authorMaxim Dounin <mdounin@mdounin.ru>
Mon, 2 Apr 2012 21:29:35 +0000 (21:29 +0000)
committerMaxim Dounin <mdounin@mdounin.ru>
Mon, 2 Apr 2012 21:29:35 +0000 (21:29 +0000)
Such upstreams cause CPU hog later in the code as number of peers isn't
expected to be 0.  Currently this may happen either if there are only backup
servers defined in an upstream block, or if server with ipv6 address used
in an upstream block.

src/http/ngx_http_upstream_round_robin.c

index 410559d50bc8c28c95e9d05cae2163541852c613..f0fac87369927275e3ba169c6e71533836fbb40b 100644 (file)
@@ -49,6 +49,13 @@ ngx_http_upstream_init_round_robin(ngx_conf_t *cf,
             n += server[i].naddrs;
         }
 
+        if (n == 0) {
+            ngx_log_error(NGX_LOG_EMERG, cf->log, 0,
+                          "no servers in upstream \"%V\" in %s:%ui",
+                          &us->host, us->file_name, us->line);
+            return NGX_ERROR;
+        }
+
         peers = ngx_pcalloc(cf->pool, sizeof(ngx_http_upstream_rr_peers_t)
                               + sizeof(ngx_http_upstream_rr_peer_t) * (n - 1));
         if (peers == NULL) {