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