From 048733f15b77ca6bd30d61973f904c07afb7adcb Mon Sep 17 00:00:00 2001 From: tzssangglass Date: Fri, 17 Sep 2021 17:36:06 +0800 Subject: [PATCH 01/13] fix #5061 --- apisix/discovery/nacos.lua | 30 ++++-- apisix/upstream.lua | 2 +- t/discovery/nacos.t | 186 +++++++++++++++++++++++++++++++++++++ 3 files changed, 211 insertions(+), 7 deletions(-) diff --git a/apisix/discovery/nacos.lua b/apisix/discovery/nacos.lua index a721dec14441..c084259ff0ed 100644 --- a/apisix/discovery/nacos.lua +++ b/apisix/discovery/nacos.lua @@ -38,6 +38,8 @@ local default_weight local applications local auth_path = 'auth/login' local instance_list_path = 'ns/instance/list?healthyOnly=true&serviceName=' +local default_namespace_id = "public" +local default_group_name = "DEFAULT_GROUP" local events local events_list @@ -235,12 +237,12 @@ local function iter_and_add_service(services, values) local namespace_id if up.discovery_args then - namespace_id = up.discovery_args.namespace_id + namespace_id = up.discovery_args.namespace_id or default_namespace_id end local group_name if up.discovery_args then - group_name = up.discovery_args.group_name + group_name = up.discovery_args.group_name or default_group_name end if up.discovery_type == 'nacos' then @@ -307,11 +309,21 @@ local function fetch_full_registry(premature) return end + if not up_apps[service_info.namespace_id] then + up_apps[service_info.namespace_id] = {} + end + + if not up_apps[service_info.namespace_id][service_info.group_name] then + up_apps[service_info.namespace_id][service_info.group_name] = {} + end + for _, host in ipairs(data.hosts) do - local nodes = up_apps[service_info.service_name] + local nodes = up_apps[service_info.namespace_id] + [service_info.group_name][service_info.service_name] if not nodes then nodes = {} - up_apps[service_info.service_name] = nodes + up_apps[service_info.namespace_id] + [service_info.group_name][service_info.service_name] = nodes end core.table.insert(nodes, { host = host.ip, @@ -335,7 +347,12 @@ local function fetch_full_registry(premature) end -function _M.nodes(service_name) +function _M.nodes(service_name, discovery_args) + local namespace_id = discovery_args and + discovery_args.namespace_id or default_namespace_id + local group_name = discovery_args + and discovery_args.group_name or default_group_name + local logged = false -- maximum waiting time: 5 seconds local waiting_time = 5 @@ -348,7 +365,8 @@ function _M.nodes(service_name) ngx.sleep(step) waiting_time = waiting_time - step end - return applications[service_name] + return applications[namespace_id] and applications[namespace_id][group_name] and + applications[namespace_id][group_name][service_name] end diff --git a/apisix/upstream.lua b/apisix/upstream.lua index 48ab70aa6578..5be6d64950c1 100644 --- a/apisix/upstream.lua +++ b/apisix/upstream.lua @@ -239,7 +239,7 @@ function _M.set_by_route(route, api_ctx) return 503, err end - local new_nodes, err = dis.nodes(up_conf.service_name) + local new_nodes, err = dis.nodes(up_conf.service_name, up_conf.discovery_args) if not new_nodes then return HTTP_CODE_UPSTREAM_UNAVAILABLE, "no valid upstream node: " .. (err or "nil") end diff --git a/t/discovery/nacos.t b/t/discovery/nacos.t index b139a99b4ba6..af7b95e4c158 100644 --- a/t/discovery/nacos.t +++ b/t/discovery/nacos.t @@ -758,3 +758,189 @@ discovery: ] --- no_error_log [error] + + + +=== TEST 25: same namespace_id and service_name, different group_name +--- extra_yaml_config +discovery: + nacos: + host: + - "http://127.0.0.1:8858" + fetch_interval: 1 +--- config + location /t { + content_by_lua_block { + local t = require("lib.test_admin").test + + -- use nacos-service3, NAMESPACE=test_ns and use default group_name + local code, body = t('/apisix/admin/routes/1', + ngx.HTTP_PUT, + [[{ + "uri": "/hello", + "upstream": { + "service_name": "APISIX-NACOS", + "discovery_type": "nacos", + "type": "roundrobin", + "discovery_args": { + "namespace_id": "test_ns" + } + } + }]] + ) + + if code >= 300 then + ngx.status = code + end + + -- use nacos-service5, NAMESPACE=test_ns and group_name=test_group + local code, body = t('/apisix/admin/routes/2', + ngx.HTTP_PUT, + [[{ + "uri": "/hello1", + "upstream": { + "service_name": "APISIX-NACOS", + "discovery_type": "nacos", + "type": "roundrobin", + "discovery_args": { + "namespace_id": "test_ns", + "group_name": "test_group" + } + }, + "plugins": { + "proxy-rewrite": { + "uri": "/hello" + } + } + }]] + ) + + if code >= 300 then + ngx.status = code + end + + ngx.sleep(0.6) + + local http = require "resty.http" + local httpc = http.new() + local uri1 = "http://127.0.0.1:" .. ngx.var.server_port .. "/hello" + local res, err = httpc:request_uri(uri1, { method = "GET"}) + if err then + ngx.log(ngx.ERR, err) + ngx.status = res.status + return + end + + local uri2 = "http://127.0.0.1:" .. ngx.var.server_port .. "/hello1" + res, err = httpc:request_uri(uri2, { method = "GET"}) + if err then + ngx.log(ngx.ERR, err) + ngx.status = res.status + return + end + ngx.say("passed") + } + } +--- request +GET /t +--- response_body +passed +--- wait: 2 +--- error_log eval +[qr/proxy request to\s\d+.\d+.\d+.\d+\:18003\swhile connecting to upstream.*\"GET \/hello HTTP\/1.1\"/, +qr/proxy request to\s\d+.\d+.\d+.\d+\:18005\swhile connecting to upstream.*\"GET \/hello1 HTTP\/1.1\"/] +--- no_error_log +[error] + + + +=== TEST 26: same group_name and service_name, different namespace_id +--- extra_yaml_config +discovery: + nacos: + host: + - "http://139.219.130.170:8858" + fetch_interval: 1 +--- config + location /t { + content_by_lua_block { + local t = require("lib.test_admin").test + + -- use nacos-service4, group_name=test_group and use default namespace_id + local code, body = t('/apisix/admin/routes/1', + ngx.HTTP_PUT, + [[{ + "uri": "/hello", + "upstream": { + "service_name": "APISIX-NACOS", + "discovery_type": "nacos", + "type": "roundrobin", + "discovery_args": { + "group_name": "test_group" + } + } + }]] + ) + + if code >= 300 then + ngx.status = code + end + + -- use nacos-service5, NAMESPACE=test_ns and group_name=test_group + local code, body = t('/apisix/admin/routes/2', + ngx.HTTP_PUT, + [[{ + "uri": "/hello1", + "upstream": { + "service_name": "APISIX-NACOS", + "discovery_type": "nacos", + "type": "roundrobin", + "discovery_args": { + "namespace_id": "test_ns", + "group_name": "test_group" + } + }, + "plugins": { + "proxy-rewrite": { + "uri": "/hello" + } + } + }]] + ) + + if code >= 300 then + ngx.status = code + end + + ngx.sleep(0.6) + + local http = require "resty.http" + local httpc = http.new() + local uri1 = "http://127.0.0.1:" .. ngx.var.server_port .. "/hello" + local res, err = httpc:request_uri(uri1, { method = "GET"}) + if err then + ngx.log(ngx.ERR, err) + ngx.status = res.status + return + end + + local uri2 = "http://127.0.0.1:" .. ngx.var.server_port .. "/hello1" + res, err = httpc:request_uri(uri2, { method = "GET"}) + if err then + ngx.log(ngx.ERR, err) + ngx.status = res.status + return + end + ngx.say("passed") + } + } +--- request +GET /t +--- response_body +passed +--- wait: 2 +--- error_log eval +[qr/proxy request to\s\d+.\d+.\d+.\d+\:18004\swhile connecting to upstream.*\"GET \/hello HTTP\/1.1\"/, +qr/proxy request to\s\d+.\d+.\d+.\d+\:18005\swhile connecting to upstream.*\"GET \/hello1 HTTP\/1.1\"/] +--- no_error_log +[error] From 3c7df03e0045658a9a138df3e924cd5ae20b2c96 Mon Sep 17 00:00:00 2001 From: tzssangglass Date: Fri, 17 Sep 2021 20:55:16 +0800 Subject: [PATCH 02/13] fix CI error --- apisix/discovery/nacos.lua | 22 ++++++++++++---------- t/discovery/nacos.t | 12 +++++++----- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/apisix/discovery/nacos.lua b/apisix/discovery/nacos.lua index c084259ff0ed..1adccd80ed95 100644 --- a/apisix/discovery/nacos.lua +++ b/apisix/discovery/nacos.lua @@ -297,8 +297,10 @@ local function fetch_full_registry(premature) end local data, err for _, service_info in ipairs(infos) do - local namespace_param = get_namespace_param(service_info.namespace_id) - local group_name_param = get_group_name_param(service_info.group_name) + local namespace_id = service_info.namespace_id or default_namespace_id + local group_name = service_info.group_name or default_group_name + local namespace_param = get_namespace_param(namespace_id) + local group_name_param = get_group_name_param(group_name) data, err = get_url(base_uri, instance_list_path .. service_info.service_name .. token_param .. namespace_param .. group_name_param) if err then @@ -309,21 +311,21 @@ local function fetch_full_registry(premature) return end - if not up_apps[service_info.namespace_id] then - up_apps[service_info.namespace_id] = {} + if not up_apps[namespace_id] then + up_apps[namespace_id] = {} end - if not up_apps[service_info.namespace_id][service_info.group_name] then - up_apps[service_info.namespace_id][service_info.group_name] = {} + if not up_apps[namespace_id][group_name] then + up_apps[namespace_id][group_name] = {} end for _, host in ipairs(data.hosts) do - local nodes = up_apps[service_info.namespace_id] - [service_info.group_name][service_info.service_name] + local nodes = up_apps[namespace_id] + [group_name][service_info.service_name] if not nodes then nodes = {} - up_apps[service_info.namespace_id] - [service_info.group_name][service_info.service_name] = nodes + up_apps[namespace_id] + [group_name][service_info.service_name] = nodes end core.table.insert(nodes, { host = host.ip, diff --git a/t/discovery/nacos.t b/t/discovery/nacos.t index af7b95e4c158..fb74227f834e 100644 --- a/t/discovery/nacos.t +++ b/t/discovery/nacos.t @@ -819,7 +819,7 @@ discovery: ngx.status = code end - ngx.sleep(0.6) + ngx.sleep(1.5) local http = require "resty.http" local httpc = http.new() @@ -843,9 +843,10 @@ discovery: } --- request GET /t +--- wait: 2 +--- timeout: 4 --- response_body passed ---- wait: 2 --- error_log eval [qr/proxy request to\s\d+.\d+.\d+.\d+\:18003\swhile connecting to upstream.*\"GET \/hello HTTP\/1.1\"/, qr/proxy request to\s\d+.\d+.\d+.\d+\:18005\swhile connecting to upstream.*\"GET \/hello1 HTTP\/1.1\"/] @@ -859,7 +860,7 @@ qr/proxy request to\s\d+.\d+.\d+.\d+\:18005\swhile connecting to upstream.*\"GET discovery: nacos: host: - - "http://139.219.130.170:8858" + - "http://127.0.0.1:8858" fetch_interval: 1 --- config location /t { @@ -912,7 +913,7 @@ discovery: ngx.status = code end - ngx.sleep(0.6) + ngx.sleep(1.5) local http = require "resty.http" local httpc = http.new() @@ -936,9 +937,10 @@ discovery: } --- request GET /t +--- wait: 2 +--- timeout: 4 --- response_body passed ---- wait: 2 --- error_log eval [qr/proxy request to\s\d+.\d+.\d+.\d+\:18004\swhile connecting to upstream.*\"GET \/hello HTTP\/1.1\"/, qr/proxy request to\s\d+.\d+.\d+.\d+\:18005\swhile connecting to upstream.*\"GET \/hello1 HTTP\/1.1\"/] From f48f1c3d364b43471eb761fd004e310e4925f44f Mon Sep 17 00:00:00 2001 From: tzssangglass Date: Fri, 17 Sep 2021 22:57:47 +0800 Subject: [PATCH 03/13] fix Ci error --- t/discovery/nacos.t | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/t/discovery/nacos.t b/t/discovery/nacos.t index fb74227f834e..6db884be40b6 100644 --- a/t/discovery/nacos.t +++ b/t/discovery/nacos.t @@ -847,9 +847,11 @@ GET /t --- timeout: 4 --- response_body passed ---- error_log eval -[qr/proxy request to\s\d+.\d+.\d+.\d+\:18003\swhile connecting to upstream.*\"GET \/hello HTTP\/1.1\"/, -qr/proxy request to\s\d+.\d+.\d+.\d+\:18005\swhile connecting to upstream.*\"GET \/hello1 HTTP\/1.1\"/] +--- grep_error_log eval +qr/proxy request to \S+ while connecting to upstream.*\"GET \/hello.* HTTP\/1.1\"/ +--- grep_error_log_out +proxy request to 127.0.0.1:18003 while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET /hello HTTP/1.1" +proxy request to 127.0.0.1:18005 while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET /hello1 HTTP/1.1" --- no_error_log [error] @@ -941,8 +943,10 @@ GET /t --- timeout: 4 --- response_body passed ---- error_log eval -[qr/proxy request to\s\d+.\d+.\d+.\d+\:18004\swhile connecting to upstream.*\"GET \/hello HTTP\/1.1\"/, -qr/proxy request to\s\d+.\d+.\d+.\d+\:18005\swhile connecting to upstream.*\"GET \/hello1 HTTP\/1.1\"/] +--- grep_error_log eval +qr/proxy request to \S+ while connecting to upstream.*\"GET \/hello.* HTTP\/1.1\"/ +--- grep_error_log_out +proxy request to 127.0.0.1:18004 while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET /hello HTTP/1.1" +proxy request to 127.0.0.1:18005 while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET /hello1 HTTP/1.1" --- no_error_log [error] From 05d97dcfc20f916e0bd96b7a5bc9bba6d60ac72b Mon Sep 17 00:00:00 2001 From: tzssangglass Date: Sat, 18 Sep 2021 00:20:02 +0800 Subject: [PATCH 04/13] fix Ci error --- apisix/upstream.lua | 3 ++- t/discovery/nacos.t | 16 ++++++---------- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/apisix/upstream.lua b/apisix/upstream.lua index 5be6d64950c1..f3fdf6b4391f 100644 --- a/apisix/upstream.lua +++ b/apisix/upstream.lua @@ -243,7 +243,8 @@ function _M.set_by_route(route, api_ctx) if not new_nodes then return HTTP_CODE_UPSTREAM_UNAVAILABLE, "no valid upstream node: " .. (err or "nil") end - + -- for test + core.log.info("route_id: ", up_conf.parent.value.id, ", new_nodes_port: ", new_nodes[1].port) local same = upstream_util.compare_upstream_node(up_conf, new_nodes) if not same then local pass, err = core.schema.check(core.schema.discovery_nodes, new_nodes) diff --git a/t/discovery/nacos.t b/t/discovery/nacos.t index 6db884be40b6..0948c31bbfc3 100644 --- a/t/discovery/nacos.t +++ b/t/discovery/nacos.t @@ -847,11 +847,9 @@ GET /t --- timeout: 4 --- response_body passed ---- grep_error_log eval -qr/proxy request to \S+ while connecting to upstream.*\"GET \/hello.* HTTP\/1.1\"/ ---- grep_error_log_out -proxy request to 127.0.0.1:18003 while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET /hello HTTP/1.1" -proxy request to 127.0.0.1:18005 while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET /hello1 HTTP/1.1" +--- error_log +route_id: 1, new_nodes_port: 18003 +route_id: 2, new_nodes_port: 18005 --- no_error_log [error] @@ -943,10 +941,8 @@ GET /t --- timeout: 4 --- response_body passed ---- grep_error_log eval -qr/proxy request to \S+ while connecting to upstream.*\"GET \/hello.* HTTP\/1.1\"/ ---- grep_error_log_out -proxy request to 127.0.0.1:18004 while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET /hello HTTP/1.1" -proxy request to 127.0.0.1:18005 while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET /hello1 HTTP/1.1" +--- error_log +route_id: 1, new_nodes_port: 18004 +route_id: 2, new_nodes_port: 18005 --- no_error_log [error] From 44eb541cf6e83a1e81a17d01ea17f924f836d84e Mon Sep 17 00:00:00 2001 From: tzssangglass Date: Sat, 18 Sep 2021 00:22:35 +0800 Subject: [PATCH 05/13] resolve code review --- apisix/discovery/nacos.lua | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/apisix/discovery/nacos.lua b/apisix/discovery/nacos.lua index 1adccd80ed95..df57258fed18 100644 --- a/apisix/discovery/nacos.lua +++ b/apisix/discovery/nacos.lua @@ -367,8 +367,11 @@ function _M.nodes(service_name, discovery_args) ngx.sleep(step) waiting_time = waiting_time - step end - return applications[namespace_id] and applications[namespace_id][group_name] and - applications[namespace_id][group_name][service_name] + + if not applications[namespace_id] or not applications[namespace_id][group_name] then + return nil + end + return applications[namespace_id][group_name][service_name] end From 1e7be326311e6a5cce5844c24f992ba16e74bb85 Mon Sep 17 00:00:00 2001 From: tzssangglass Date: Sat, 18 Sep 2021 01:00:58 +0800 Subject: [PATCH 06/13] fix code lint --- apisix/upstream.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apisix/upstream.lua b/apisix/upstream.lua index f3fdf6b4391f..f48c4da1bfd2 100644 --- a/apisix/upstream.lua +++ b/apisix/upstream.lua @@ -244,7 +244,8 @@ function _M.set_by_route(route, api_ctx) return HTTP_CODE_UPSTREAM_UNAVAILABLE, "no valid upstream node: " .. (err or "nil") end -- for test - core.log.info("route_id: ", up_conf.parent.value.id, ", new_nodes_port: ", new_nodes[1].port) + core.log.info("route_id: ", up_conf.parent.value.id, + ", new_nodes_port: ", new_nodes[1].port) local same = upstream_util.compare_upstream_node(up_conf, new_nodes) if not same then local pass, err = core.schema.check(core.schema.discovery_nodes, new_nodes) From 7d8c2a9794642c999fbe8cd47fa83004d25d24a5 Mon Sep 17 00:00:00 2001 From: tzssangglass Date: Sat, 18 Sep 2021 02:03:27 +0800 Subject: [PATCH 07/13] add env for nacos docker shell --- ci/install-ext-services-via-docker.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ci/install-ext-services-via-docker.sh b/ci/install-ext-services-via-docker.sh index 2793de40ab2d..6ba387a6ab85 100755 --- a/ci/install-ext-services-via-docker.sh +++ b/ci/install-ext-services-via-docker.sh @@ -56,14 +56,14 @@ mkdir tmp cd tmp wget https://raw.githubusercontent.com/api7/nacos-test-service/main/spring-nacos-1.0-SNAPSHOT.jar curl https://raw.githubusercontent.com/api7/nacos-test-service/main/Dockerfile | docker build -t nacos-test-service:1.0-SNAPSHOT -f - . -docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env SUFFIX_NUM=1 -p 18001:18001 --name nacos-service1 nacos-test-service:1.0-SNAPSHOT -docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env SUFFIX_NUM=2 -p 18002:18001 --name nacos-service2 nacos-test-service:1.0-SNAPSHOT +docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env DISCOVERY_PORT=18001 --env SUFFIX_NUM=1 -p 18001:18001 --name nacos-service1 nacos-test-service:1.0-SNAPSHOT +docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env DISCOVERY_PORT=18002 --env SUFFIX_NUM=2 -p 18002:18001 --name nacos-service2 nacos-test-service:1.0-SNAPSHOT # register nacos service with namespaceId=test_ns -docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env NAMESPACE=test_ns --env SUFFIX_NUM=1 -p 18003:18001 --name nacos-service3 nacos-test-service:1.0-SNAPSHOT +docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env DISCOVERY_PORT=18003 -env NAMESPACE=test_ns --env SUFFIX_NUM=1 -p 18003:18001 --name nacos-service3 nacos-test-service:1.0-SNAPSHOT # register nacos service with group=test_group -docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env GROUP=test_group --env SUFFIX_NUM=1 -p 18004:18001 --name nacos-service4 nacos-test-service:1.0-SNAPSHOT +docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env DISCOVERY_PORT=18004 -env GROUP=test_group --env SUFFIX_NUM=1 -p 18004:18001 --name nacos-service4 nacos-test-service:1.0-SNAPSHOT # register nacos service with namespaceId=test_ns and group=test_group -docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env NAMESPACE=test_ns --env GROUP=test_group --env SUFFIX_NUM=1 -p 18005:18001 --name nacos-service5 nacos-test-service:1.0-SNAPSHOT +docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env DISCOVERY_PORT=18005 --env NAMESPACE=test_ns --env GROUP=test_group --env SUFFIX_NUM=1 -p 18005:18001 --name nacos-service5 nacos-test-service:1.0-SNAPSHOT url="127.0.0.1:18005/hello" until [[ "$(curl -s -o /dev/null -w ''%{http_code}'' $url)" == "200" ]]; do From 195cec54419551ec5be613116f3ac514684ab1d5 Mon Sep 17 00:00:00 2001 From: tzssangglass Date: Sat, 18 Sep 2021 10:51:11 +0800 Subject: [PATCH 08/13] fix CI error --- ci/install-ext-services-via-docker.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/install-ext-services-via-docker.sh b/ci/install-ext-services-via-docker.sh index 6ba387a6ab85..ead779fca83e 100755 --- a/ci/install-ext-services-via-docker.sh +++ b/ci/install-ext-services-via-docker.sh @@ -59,9 +59,9 @@ curl https://raw.githubusercontent.com/api7/nacos-test-service/main/Dockerfile | docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env DISCOVERY_PORT=18001 --env SUFFIX_NUM=1 -p 18001:18001 --name nacos-service1 nacos-test-service:1.0-SNAPSHOT docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env DISCOVERY_PORT=18002 --env SUFFIX_NUM=2 -p 18002:18001 --name nacos-service2 nacos-test-service:1.0-SNAPSHOT # register nacos service with namespaceId=test_ns -docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env DISCOVERY_PORT=18003 -env NAMESPACE=test_ns --env SUFFIX_NUM=1 -p 18003:18001 --name nacos-service3 nacos-test-service:1.0-SNAPSHOT +docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env DISCOVERY_PORT=18003 --env NAMESPACE=test_ns --env SUFFIX_NUM=1 -p 18003:18001 --name nacos-service3 nacos-test-service:1.0-SNAPSHOT # register nacos service with group=test_group -docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env DISCOVERY_PORT=18004 -env GROUP=test_group --env SUFFIX_NUM=1 -p 18004:18001 --name nacos-service4 nacos-test-service:1.0-SNAPSHOT +docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env DISCOVERY_PORT=18004 --env GROUP=test_group --env SUFFIX_NUM=1 -p 18004:18001 --name nacos-service4 nacos-test-service:1.0-SNAPSHOT # register nacos service with namespaceId=test_ns and group=test_group docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env DISCOVERY_PORT=18005 --env NAMESPACE=test_ns --env GROUP=test_group --env SUFFIX_NUM=1 -p 18005:18001 --name nacos-service5 nacos-test-service:1.0-SNAPSHOT From 18df15f89da3b068c655894f31c935e35c3849e5 Mon Sep 17 00:00:00 2001 From: tzssangglass Date: Sun, 19 Sep 2021 22:19:18 +0800 Subject: [PATCH 09/13] fix CI error --- apisix/upstream.lua | 4 +-- ci/install-ext-services-via-docker.sh | 14 ++++++---- t/discovery/nacos.t | 38 ++++++++++++--------------- 3 files changed, 27 insertions(+), 29 deletions(-) diff --git a/apisix/upstream.lua b/apisix/upstream.lua index f48c4da1bfd2..5be6d64950c1 100644 --- a/apisix/upstream.lua +++ b/apisix/upstream.lua @@ -243,9 +243,7 @@ function _M.set_by_route(route, api_ctx) if not new_nodes then return HTTP_CODE_UPSTREAM_UNAVAILABLE, "no valid upstream node: " .. (err or "nil") end - -- for test - core.log.info("route_id: ", up_conf.parent.value.id, - ", new_nodes_port: ", new_nodes[1].port) + local same = upstream_util.compare_upstream_node(up_conf, new_nodes) if not same then local pass, err = core.schema.check(core.schema.discovery_nodes, new_nodes) diff --git a/ci/install-ext-services-via-docker.sh b/ci/install-ext-services-via-docker.sh index 231e9fb9fafc..612d0b7136fe 100755 --- a/ci/install-ext-services-via-docker.sh +++ b/ci/install-ext-services-via-docker.sh @@ -56,14 +56,18 @@ mkdir tmp cd tmp wget https://raw.githubusercontent.com/api7/nacos-test-service/main/spring-nacos-1.0-SNAPSHOT.jar curl https://raw.githubusercontent.com/api7/nacos-test-service/main/Dockerfile | docker build -t nacos-test-service:1.0-SNAPSHOT -f - . -docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env DISCOVERY_PORT=18001 --env NACOS_ADDR=nacos2:8848 --env SUFFIX_NUM=1 -p 18001:18001 --name nacos-service1 nacos-test-service:1.0-SNAPSHOT -docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env DISCOVERY_PORT=18002 --env NACOS_ADDR=nacos2:8848 --env SUFFIX_NUM=2 -p 18002:18001 --name nacos-service2 nacos-test-service:1.0-SNAPSHOT +docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env SUFFIX_NUM=1 -p 18001:18001 --name nacos-service1 nacos-test-service:1.0-SNAPSHOT +docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env SUFFIX_NUM=2 -p 18002:18001 --name nacos-service2 nacos-test-service:1.0-SNAPSHOT # register nacos service with namespaceId=test_ns -docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env DISCOVERY_PORT=18003 --env NACOS_ADDR=nacos2:8848 --env NAMESPACE=test_ns --env SUFFIX_NUM=1 -p 18003:18001 --name nacos-service3 nacos-test-service:1.0-SNAPSHOT +docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env NAMESPACE=test_ns --env SUFFIX_NUM=1 -p 18003:18001 --name nacos-service3 nacos-test-service:1.0-SNAPSHOT # register nacos service with group=test_group -docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env DISCOVERY_PORT=18004 --env NACOS_ADDR=nacos2:8848 --env GROUP=test_group --env SUFFIX_NUM=1 -p 18004:18001 --name nacos-service4 nacos-test-service:1.0-SNAPSHOT +docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env GROUP=test_group --env SUFFIX_NUM=1 -p 18004:18001 --name nacos-service4 nacos-test-service:1.0-SNAPSHOT # register nacos service with namespaceId=test_ns and group=test_group -docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env DISCOVERY_PORT=18005 --env NACOS_ADDR=nacos2:8848 --env NAMESPACE=test_ns --env GROUP=test_group --env SUFFIX_NUM=1 -p 18005:18001 --name nacos-service5 nacos-test-service:1.0-SNAPSHOT +docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env NAMESPACE=test_ns --env GROUP=test_group --env SUFFIX_NUM=1 -p 18005:18001 --name nacos-service5 nacos-test-service:1.0-SNAPSHOT +# register nacos service with namespaceId=test_ns and group=test_group2 +docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env NAMESPACE=test_ns --env GROUP=test_group2 --env SUFFIX_NUM=3 -p 18006:18001 --name nacos-service6 nacos-test-service:1.0-SNAPSHOT +# register nacos service with namespaceId=test_ns2 and group=test_group +docker run -d --rm --network nacos_net --env SERVICE_NAME=APISIX-NACOS --env NACOS_ADDR=nacos2:8848 --env NAMESPACE=test_ns2 --env GROUP=test_group --env SUFFIX_NUM=4 -p 18007:18001 --name nacos-service7 nacos-test-service:1.0-SNAPSHOT url="127.0.0.1:18005/hello" until [[ "$(curl -s -o /dev/null -w ''%{http_code}'' $url)" == "200" ]]; do diff --git a/t/discovery/nacos.t b/t/discovery/nacos.t index 0948c31bbfc3..98c309c78920 100644 --- a/t/discovery/nacos.t +++ b/t/discovery/nacos.t @@ -773,7 +773,7 @@ discovery: content_by_lua_block { local t = require("lib.test_admin").test - -- use nacos-service3, NAMESPACE=test_ns and use default group_name + -- use nacos-service5 local code, body = t('/apisix/admin/routes/1', ngx.HTTP_PUT, [[{ @@ -783,7 +783,8 @@ discovery: "discovery_type": "nacos", "type": "roundrobin", "discovery_args": { - "namespace_id": "test_ns" + "namespace_id": "test_ns", + "group_name": "test_group" } } }]] @@ -793,7 +794,7 @@ discovery: ngx.status = code end - -- use nacos-service5, NAMESPACE=test_ns and group_name=test_group + -- use nacos-service6 local code, body = t('/apisix/admin/routes/2', ngx.HTTP_PUT, [[{ @@ -804,7 +805,7 @@ discovery: "type": "roundrobin", "discovery_args": { "namespace_id": "test_ns", - "group_name": "test_group" + "group_name": "test_group2" } }, "plugins": { @@ -830,6 +831,7 @@ discovery: ngx.status = res.status return end + ngx.say(res.body) local uri2 = "http://127.0.0.1:" .. ngx.var.server_port .. "/hello1" res, err = httpc:request_uri(uri2, { method = "GET"}) @@ -838,18 +840,14 @@ discovery: ngx.status = res.status return end - ngx.say("passed") + ngx.say(res.body) } } --- request GET /t ---- wait: 2 ---- timeout: 4 --- response_body -passed ---- error_log -route_id: 1, new_nodes_port: 18003 -route_id: 2, new_nodes_port: 18005 +server 1 +server 3 --- no_error_log [error] @@ -867,7 +865,7 @@ discovery: content_by_lua_block { local t = require("lib.test_admin").test - -- use nacos-service4, group_name=test_group and use default namespace_id + -- use nacos-service5 local code, body = t('/apisix/admin/routes/1', ngx.HTTP_PUT, [[{ @@ -877,6 +875,7 @@ discovery: "discovery_type": "nacos", "type": "roundrobin", "discovery_args": { + "namespace_id": "test_ns", "group_name": "test_group" } } @@ -887,7 +886,7 @@ discovery: ngx.status = code end - -- use nacos-service5, NAMESPACE=test_ns and group_name=test_group + -- use nacos-service7 local code, body = t('/apisix/admin/routes/2', ngx.HTTP_PUT, [[{ @@ -897,7 +896,7 @@ discovery: "discovery_type": "nacos", "type": "roundrobin", "discovery_args": { - "namespace_id": "test_ns", + "namespace_id": "test_ns2", "group_name": "test_group" } }, @@ -924,6 +923,7 @@ discovery: ngx.status = res.status return end + ngx.say(res.body) local uri2 = "http://127.0.0.1:" .. ngx.var.server_port .. "/hello1" res, err = httpc:request_uri(uri2, { method = "GET"}) @@ -932,17 +932,13 @@ discovery: ngx.status = res.status return end - ngx.say("passed") + ngx.say(res.body) } } --- request GET /t ---- wait: 2 ---- timeout: 4 --- response_body -passed ---- error_log -route_id: 1, new_nodes_port: 18004 -route_id: 2, new_nodes_port: 18005 +server 1 +server 4 --- no_error_log [error] From b24337fe65ccd1700717529ebfde162ce3f2f131 Mon Sep 17 00:00:00 2001 From: tzssangglass Date: Wed, 22 Sep 2021 11:26:12 +0800 Subject: [PATCH 10/13] style: add indents Signed-off-by: tzssangglass --- apisix/discovery/nacos.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apisix/discovery/nacos.lua b/apisix/discovery/nacos.lua index df57258fed18..d92052249938 100644 --- a/apisix/discovery/nacos.lua +++ b/apisix/discovery/nacos.lua @@ -321,11 +321,11 @@ local function fetch_full_registry(premature) for _, host in ipairs(data.hosts) do local nodes = up_apps[namespace_id] - [group_name][service_info.service_name] + [group_name][service_info.service_name] if not nodes then nodes = {} up_apps[namespace_id] - [group_name][service_info.service_name] = nodes + [group_name][service_info.service_name] = nodes end core.table.insert(nodes, { host = host.ip, From bba184c96e417cab70e9715e1dd11d85babdc0ea Mon Sep 17 00:00:00 2001 From: tzssangglass Date: Wed, 22 Sep 2021 11:26:12 +0800 Subject: [PATCH 11/13] style: add indents Signed-off-by: tzssangglass --- apisix/discovery/nacos.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apisix/discovery/nacos.lua b/apisix/discovery/nacos.lua index df57258fed18..9ac351409dae 100644 --- a/apisix/discovery/nacos.lua +++ b/apisix/discovery/nacos.lua @@ -297,8 +297,8 @@ local function fetch_full_registry(premature) end local data, err for _, service_info in ipairs(infos) do - local namespace_id = service_info.namespace_id or default_namespace_id - local group_name = service_info.group_name or default_group_name + local namespace_id = service_info.namespace_id + local group_name = service_info.group_name local namespace_param = get_namespace_param(namespace_id) local group_name_param = get_group_name_param(group_name) data, err = get_url(base_uri, instance_list_path .. service_info.service_name @@ -321,11 +321,11 @@ local function fetch_full_registry(premature) for _, host in ipairs(data.hosts) do local nodes = up_apps[namespace_id] - [group_name][service_info.service_name] + [group_name][service_info.service_name] if not nodes then nodes = {} up_apps[namespace_id] - [group_name][service_info.service_name] = nodes + [group_name][service_info.service_name] = nodes end core.table.insert(nodes, { host = host.ip, From 66e3055f5cc51d95b1e63be31beb9bc6a508b0ec Mon Sep 17 00:00:00 2001 From: tzssangglass Date: Wed, 22 Sep 2021 13:50:37 +0800 Subject: [PATCH 12/13] chore(nacos): fix the logic of getting the default group_name and namespace_id Signed-off-by: tzssangglass --- apisix/discovery/nacos.lua | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/apisix/discovery/nacos.lua b/apisix/discovery/nacos.lua index 9ac351409dae..720d40373a9d 100644 --- a/apisix/discovery/nacos.lua +++ b/apisix/discovery/nacos.lua @@ -235,15 +235,11 @@ local function iter_and_add_service(services, values) up = conf end - local namespace_id - if up.discovery_args then - namespace_id = up.discovery_args.namespace_id or default_namespace_id - end + local namespace_id = (up.discovery_args and up.discovery_args.namespace_id) + or default_namespace_id - local group_name - if up.discovery_args then - group_name = up.discovery_args.group_name or default_group_name - end + local group_name = (up.discovery_args and up.discovery_args.group_name) + or default_group_name if up.discovery_type == 'nacos' then core.table.insert(services, { From 5a2a1f9c8f73fa9a61b4c50b20172a5f99c3311d Mon Sep 17 00:00:00 2001 From: tzssangglass Date: Wed, 22 Sep 2021 20:35:24 +0800 Subject: [PATCH 13/13] chore(debug): fetch master branch Signed-off-by: tzssangglass --- apisix/discovery/nacos.lua | 3 --- 1 file changed, 3 deletions(-) diff --git a/apisix/discovery/nacos.lua b/apisix/discovery/nacos.lua index 18737b3ed721..2eee156ffae8 100644 --- a/apisix/discovery/nacos.lua +++ b/apisix/discovery/nacos.lua @@ -303,9 +303,6 @@ local function fetch_full_registry(premature) data, err = get_url(base_uri, query_path) if err then log.error('get_url:', query_path, ' err:', err) - if not applications then - applications = up_apps - end goto CONTINUE end