You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by me...@apache.org on 2020/03/19 04:07:53 UTC

[incubator-apisix] branch master updated: bugfix: check the count of upstream valid node. (#1292)

This is an automated email from the ASF dual-hosted git repository.

membphis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-apisix.git


The following commit(s) were added to refs/heads/master by this push:
     new 60b8853  bugfix: check the count of upstream valid node. (#1292)
60b8853 is described below

commit 60b88536fe774ceb6af820b75a4a5cd4428a4d4f
Author: YuanSheng Wang <me...@gmail.com>
AuthorDate: Thu Mar 19 12:07:43 2020 +0800

    bugfix: check the count of upstream valid node. (#1292)
---
 lua/apisix/balancer.lua  |  4 ++++
 t/node/upstream-domain.t | 60 ++++++++++++++++++++++++++++++++++++++++++++++--
 2 files changed, 62 insertions(+), 2 deletions(-)

diff --git a/lua/apisix/balancer.lua b/lua/apisix/balancer.lua
index 400aff5..c2b94cd 100644
--- a/lua/apisix/balancer.lua
+++ b/lua/apisix/balancer.lua
@@ -230,6 +230,10 @@ local function pick_server(route, ctx)
         key = up_conf.type .. "#route_" .. route.value.id
     end
 
+    if core.table.nkeys(up_conf.nodes) == 0 then
+        return nil, nil, "no valid upstream node"
+    end
+
     local checker = fetch_healthchecker(up_conf, healthcheck_parent, version)
 
     ctx.balancer_try_count = (ctx.balancer_try_count or 0) + 1
diff --git a/t/node/upstream-domain.t b/t/node/upstream-domain.t
index 426dc87..99f30fa 100644
--- a/t/node/upstream-domain.t
+++ b/t/node/upstream-domain.t
@@ -109,7 +109,63 @@ qr/dns resolver domain: baidu.com to \d+.\d+.\d+.\d+/
 
 
 
-=== TEST 5: delete route
+=== TEST 5: set upstream(invalid node host)
+--- config
+    location /t {
+        content_by_lua_block {
+            local t = require("lib.test_admin").test
+            local code, body = t('/apisix/admin/upstreams/1',
+                ngx.HTTP_PUT,
+                [[{
+                    "nodes": {
+                        "httpbin.orgx:80": 0
+                    },
+                    "type": "roundrobin",
+                    "desc": "new upstream"
+                }]]
+                )
+
+            if code >= 300 then
+                ngx.status = code
+            end
+            ngx.say(body)
+        }
+    }
+--- request
+GET /t
+--- response_body
+passed
+--- no_error_log
+[error]
+
+
+
+=== TEST 6:
+--- config
+    location /t {
+        content_by_lua_block {
+            local t = require("lib.test_admin").test
+            local function test()
+                local code, body = t('/hello', ngx.HTTP_GET)
+
+                ngx.say("status: ", code)
+            end
+            test()
+            test()
+        }
+    }
+--- request
+GET /t
+--- response_body
+status: 500
+status: 500
+--- error_log
+failed to parse domain in upstream: server returned error code
+failed to parse domain in upstream: server returned error code
+
+
+
+=== TEST 7: delete route
 --- config
     location /t {
         content_by_lua_block {
@@ -137,7 +193,7 @@ passed
 
 
 
-=== TEST 6: delete upstream
+=== TEST 8: delete upstream
 --- config
     location /t {
         content_by_lua_block {