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

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


The following commit(s) were added to refs/heads/master by this push:
     new d848a44  fix(nacos): continue to process other services when request 
failed (#5112)
d848a44 is described below

commit d848a440c9ecdc625e2e43531168138860a495d3
Author: 罗泽轩 <[email protected]>
AuthorDate: Wed Sep 22 19:22:50 2021 +0800

    fix(nacos): continue to process other services when request failed (#5112)
    
    Fix #4949
    
    Signed-off-by: spacewander <[email protected]>
---
 apisix/discovery/nacos.lua | 17 +++++-----
 t/discovery/nacos2.t       | 84 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 93 insertions(+), 8 deletions(-)

diff --git a/apisix/discovery/nacos.lua b/apisix/discovery/nacos.lua
index a721dec..c41a8c2 100644
--- a/apisix/discovery/nacos.lua
+++ b/apisix/discovery/nacos.lua
@@ -293,18 +293,17 @@ local function fetch_full_registry(premature)
         applications = up_apps
         return
     end
-    local data, err
+
     for _, service_info in ipairs(infos) do
+        local data, err
         local namespace_param = get_namespace_param(service_info.namespace_id)
         local group_name_param = get_group_name_param(service_info.group_name)
-        data, err = get_url(base_uri, instance_list_path .. 
service_info.service_name
-                            .. token_param .. namespace_param .. 
group_name_param)
+        local query_path = instance_list_path .. service_info.service_name
+                           .. token_param .. namespace_param .. 
group_name_param
+        data, err = get_url(base_uri, query_path)
         if err then
-            log.error('get_url:', instance_list_path, ' err:', err)
-            if not applications then
-                applications = up_apps
-            end
-            return
+            log.error('get_url:', query_path, ' err:', err)
+            goto CONTINUE
         end
 
         for _, host in ipairs(data.hosts) do
@@ -319,6 +318,8 @@ local function fetch_full_registry(premature)
                 weight = host.weight or default_weight,
             })
         end
+
+        ::CONTINUE::
     end
     local new_apps_md5sum = ngx.md5(core.json.encode(up_apps))
     local old_apps_md5sum = ngx.md5(core.json.encode(applications))
diff --git a/t/discovery/nacos2.t b/t/discovery/nacos2.t
new file mode 100644
index 0000000..ac16b7f
--- /dev/null
+++ b/t/discovery/nacos2.t
@@ -0,0 +1,84 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+use t::APISIX 'no_plan';
+
+workers(3);
+
+add_block_preprocessor(sub {
+    my ($block) = @_;
+
+    if ((!defined $block->error_log) && (!defined $block->no_error_log)) {
+        $block->set_value("no_error_log", "[error]");
+    }
+});
+
+run_tests();
+
+__DATA__
+
+=== TEST 1: continue to get nacos data after failure in a service
+--- yaml_config
+apisix:
+  node_listen: 1984
+  config_center: yaml
+  enable_admin: false
+discovery:
+  nacos:
+      host:
+        - "http://127.0.0.1:20999";
+      prefix: "/nacos/v1/"
+      fetch_interval: 1
+      weight: 1
+      timeout:
+        connect: 2000
+        send: 2000
+        read: 5000
+--- apisix_yaml
+routes:
+  -
+    uri: /hello_
+    upstream:
+      service_name: NOT-NACOS
+      discovery_type: nacos
+      type: roundrobin
+  -
+    uri: /hello
+    upstream:
+      service_name: APISIX-NACOS
+      discovery_type: nacos
+      type: roundrobin
+#END
+--- http_config
+    server {
+        listen 20999;
+
+        location / {
+            access_by_lua_block {
+                if not package.loaded.hit then
+                    package.loaded.hit = true
+                    ngx.exit(502)
+                end
+            }
+            proxy_pass http://127.0.0.1:8858;
+        }
+    }
+--- request
+GET /hello
+--- response_body_like eval
+qr/server [1-2]/
+--- error_log
+err:status = 502

Reply via email to