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/10/17 05:45:05 UTC
[apisix] branch master updated: feat: In dns parse,
when the parameter `resolvers` is empty,
the local dns is used as `resolvers` by default (#2424)
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/apisix.git
The following commit(s) were added to refs/heads/master by this push:
new d1729c0 feat: In dns parse, when the parameter `resolvers` is empty, the local dns is used as `resolvers` by default (#2424)
d1729c0 is described below
commit d1729c0af3bc416a88904568b4d2718c99a1982d
Author: Firstsawyou <52...@users.noreply.github.com>
AuthorDate: Sat Oct 17 13:44:53 2020 +0800
feat: In dns parse, when the parameter `resolvers` is empty, the local dns is used as `resolvers` by default (#2424)
fix #2422
---
apisix/core/utils.lua | 10 ++++++++--
apisix/init.lua | 4 +++-
t/core/utils.t | 47 ++++++++++++++++++++++++++++++++++++++++++++++
t/node/upstream-node-dns.t | 16 ++++++++--------
4 files changed, 66 insertions(+), 11 deletions(-)
diff --git a/apisix/core/utils.lua b/apisix/core/utils.lua
index 9e8fc1e..e29784f 100644
--- a/apisix/core/utils.lua
+++ b/apisix/core/utils.lua
@@ -69,7 +69,8 @@ function _M.split_uri(uri)
end
-local function dns_parse(resolvers, domain)
+local function dns_parse(domain, resolvers)
+ resolvers = resolvers or _M.resolvers
local r, err = resolver:new{
nameservers = table.clone(resolvers),
retrans = 5, -- 5 retransmissions on receive timeout
@@ -100,11 +101,16 @@ local function dns_parse(resolvers, domain)
return nil, "unsupport DNS answer"
end
- return dns_parse(resolvers, answer.cname)
+ return dns_parse(answer.cname, resolvers)
end
_M.dns_parse = dns_parse
+function _M.set_resolver(resolvers)
+ _M.resolvers = resolvers
+end
+
+
local function rfind_char(s, ch, idx)
local b = str_byte(ch)
for i = idx or #s, 1, -1 do
diff --git a/apisix/init.lua b/apisix/init.lua
index 3beec45..de51cd3 100644
--- a/apisix/init.lua
+++ b/apisix/init.lua
@@ -45,6 +45,7 @@ local ver_header = "APISIX/" .. core.version.VERSION
local function parse_args(args)
dns_resolver = args and args["dns_resolver"]
+ core.utils.set_resolver(dns_resolver)
core.log.info("dns resolver", core.json.delay_encode(dns_resolver, true))
end
@@ -177,7 +178,7 @@ end
local function parse_domain(host)
- local ip_info, err = core.utils.dns_parse(dns_resolver, host)
+ local ip_info, err = core.utils.dns_parse(host)
if not ip_info then
core.log.error("failed to parse domain: ", host, ", error: ",err)
return nil, err
@@ -219,6 +220,7 @@ local function parse_domain_for_nodes(nodes)
return new_nodes
end
+
local function compare_upstream_node(old_t, new_t)
if type(old_t) ~= "table" then
return false
diff --git a/t/core/utils.t b/t/core/utils.t
index 9c19f29..25b0419 100644
--- a/t/core/utils.t
+++ b/t/core/utils.t
@@ -68,3 +68,50 @@ qr/random seed \d+\ntwice: false/
GET /t
--- no_error_log
[error]
+
+
+
+=== TEST 3: specify resolvers
+--- config
+ location /t {
+ content_by_lua_block {
+ local core = require("apisix.core")
+ local resolvers = {"8.8.8.8"}
+ core.utils.set_resolver(resolvers)
+ local ip_info, err = core.utils.dns_parse("github.com", resolvers)
+ if not ip_info then
+ core.log.error("failed to parse domain: ", host, ", error: ",err)
+ end
+ ngx.say(core.json.encode(ip_info))
+ }
+ }
+--- request
+GET /t
+--- response_body eval
+qr/"address":.+,"name":"github.com"/
+--- no_error_log
+[error]
+
+
+
+=== TEST 4: default resolvers
+--- config
+ location /t {
+ content_by_lua_block {
+ local core = require("apisix.core")
+ local ip_info, err = core.utils.dns_parse("github.com")
+ if not ip_info then
+ core.log.error("failed to parse domain: ", host, ", error: ",err)
+ end
+ core.log.info("ip_info: ", core.json.encode(ip_info))
+ ngx.say("resolvers: ", core.json.encode(core.utils.resolvers))
+ }
+ }
+--- request
+GET /t
+--- response_body
+resolvers: ["8.8.8.8","114.114.114.114"]
+--- error_log eval
+qr/"address":.+,"name":"github.com"/
+--- no_error_log
+[error]
diff --git a/t/node/upstream-node-dns.t b/t/node/upstream-node-dns.t
index ef15dc2..b539873 100644
--- a/t/node/upstream-node-dns.t
+++ b/t/node/upstream-node-dns.t
@@ -79,7 +79,7 @@ passed
apisix.http_init()
local utils = require("apisix.core.utils")
- utils.dns_parse = function (resolvers, domain) -- mock: DNS parser
+ utils.dns_parse = function (domain, resolvers) -- mock: DNS parser
if domain == "test.com" then
return {address = "127.0.0.2"}
end
@@ -104,7 +104,7 @@ hello world
local utils = require("apisix.core.utils")
local count = 0
- utils.dns_parse = function (resolvers, domain) -- mock: DNS parser
+ utils.dns_parse = function (domain, resolvers) -- mock: DNS parser
count = count + 1
if domain == "test.com" then
@@ -192,7 +192,7 @@ passed
apisix.http_init()
local utils = require("apisix.core.utils")
- utils.dns_parse = function (resolvers, domain) -- mock: DNS parser
+ utils.dns_parse = function (domain, resolvers) -- mock: DNS parser
if domain == "test.com" or domain == "test2.com" then
return {address = "127.0.0.2"}
end
@@ -217,7 +217,7 @@ hello world
local utils = require("apisix.core.utils")
local count = 0
- utils.dns_parse = function (resolvers, domain) -- mock: DNS parser
+ utils.dns_parse = function (domain, resolvers) -- mock: DNS parser
count = count + 1
if domain == "test.com" or domain == "test2.com" then
@@ -338,7 +338,7 @@ passed
local utils = require("apisix.core.utils")
local count = 0
- utils.dns_parse = function (resolvers, domain) -- mock: DNS parser
+ utils.dns_parse = function (domain, resolvers) -- mock: DNS parser
count = count + 1
if domain == "test.com" then
@@ -425,7 +425,7 @@ passed
local utils = require("apisix.core.utils")
local count = 0
- utils.dns_parse = function (resolvers, domain) -- mock: DNS parser
+ utils.dns_parse = function (domain, resolvers) -- mock: DNS parser
count = count + 1
if domain == "test.com" or domain == "test2.com" then
@@ -487,7 +487,7 @@ proxy request to 127.0.0.5:1980
local utils = require("apisix.core.utils")
local count = 1
- utils.dns_parse = function (resolvers, domain) -- mock: DNS parser
+ utils.dns_parse = function (domain, resolvers) -- mock: DNS parser
if domain == "test.com" or domain == "test2.com" then
return {address = "127.0.0.1"}
end
@@ -579,7 +579,7 @@ passed
local utils = require("apisix.core.utils")
local count = 0
- utils.dns_parse = function (resolvers, domain) -- mock: DNS parser
+ utils.dns_parse = function (domain, resolvers) -- mock: DNS parser
count = count + 1
if domain == "test.com" or domain == "test2.com" then
return {address = "127.0.0." .. count}