Skip to content

Commit

Permalink
fix: be compatibile with the router created before 2.5
Browse files Browse the repository at this point in the history
Signed-off-by: spacewander <spacewanderlzx@gmail.com>
  • Loading branch information
spacewander committed Apr 15, 2021
1 parent 1a2e8e0 commit 54d5eea
Show file tree
Hide file tree
Showing 4 changed files with 71 additions and 2 deletions.
24 changes: 24 additions & 0 deletions apisix/patch.lua
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ local ngx_socket = ngx.socket
local original_tcp = ngx.socket.tcp
local concat_tab = table.concat
local new_tab = require("table.new")
local expr = require("resty.expr.v1")
local log = ngx.log
local WARN = ngx.WARN
local ipairs = ipairs
Expand Down Expand Up @@ -227,6 +228,27 @@ local function luasocket_tcp()
end


local patched_expr_new
do
local function eval_empty_rule(self, ctx, ...)
return true
end


local mt = {__index = {eval = eval_empty_rule}}
local old_expr_new = expr.new


function patched_expr_new(rule)
if #rule == 0 then
return setmetatable({}, mt)
end

return old_expr_new(rule)
end
end


function _M.patch()
-- make linter happy
-- luacheck: ignore
Expand All @@ -238,6 +260,8 @@ function _M.patch()

return luasocket_tcp()
end

expr.new = patched_expr_new
end


Expand Down
2 changes: 1 addition & 1 deletion docs/en/latest/admin-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ Config Example:
"name": "route-xxx",
"desc": "hello world",
"remote_addrs": ["127.0.0.1"], # A set of Client IP.
"vars": [], # A list of one or more `{var, operator, val}` elements
"vars": [["http_user", "==", "ios"]], # A list of one or more `[var, operator, val]` elements
"upstream_id": "1", # upstream id, recommended
"upstream": {}, # upstream, not recommended
"filter_func": "", # User-defined filtering function
Expand Down
2 changes: 1 addition & 1 deletion docs/zh/latest/admin-api.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ route 对象 json 配置内容:
"name": "路由xxx",
"desc": "hello world",
"remote_addrs": ["127.0.0.1"], # 一组客户端请求 IP 地址
"vars": [], # 由一个或多个 {var, operator, val} 元素组成的列表
"vars": [["http_user", "==", "ios"]], # 由一个或多个 [var, operator, val] 元素组成的列表
"upstream_id": "1", # upstream 对象在 etcd 中的 id ,建议使用此值
"upstream": {}, # upstream 信息对象,建议尽量不要使用
"filter_func": "", # 用户自定义的过滤函数,非必填
Expand Down
45 changes: 45 additions & 0 deletions t/router/radixtree-uri-vars.t
Original file line number Diff line number Diff line change
Expand Up @@ -383,3 +383,48 @@ demo: prod
--- error_code: 404
--- no_error_log
[error]



=== TEST 19: be compatibile with empty vars
--- config
location /t {
content_by_lua_block {
local t = require("lib.test_admin").test
local code, body = t('/apisix/admin/routes/1',
ngx.HTTP_PUT,
[=[{
"methods": ["GET"],
"upstream": {
"nodes": {
"127.0.0.1:1980": 1
},
"type": "roundrobin"
},
"uri": "/hello",
"vars": []
}]=]
)

if code >= 300 then
ngx.status = code
end
ngx.say(body)
}
}
--- request
GET /t
--- response_body
passed
--- no_error_log
[error]



=== TEST 20: hit
--- request
GET /hello
--- response_body
hello world
--- no_error_log
[error]

0 comments on commit 54d5eea

Please sign in to comment.