Skip to content

Commit

Permalink
fix(traffic-split): failed to match rule when the first rule failed (#…
Browse files Browse the repository at this point in the history
…6292)

Co-authored-by: tangzhenhuang <tangzhenhuang@cvte.com>
  • Loading branch information
tangzhenhuang and tangzhenhuang committed Feb 14, 2022
1 parent 3f965c4 commit 605141c
Show file tree
Hide file tree
Showing 2 changed files with 107 additions and 0 deletions.
1 change: 1 addition & 0 deletions apisix/plugins/traffic-split.lua
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,7 @@ function _M.access(conf, ctx)

for _, rule in ipairs(conf.rules) do
if not rule.match then
match_passed = true
weighted_upstreams = rule.weighted_upstreams
break
end
Expand Down
106 changes: 106 additions & 0 deletions t/plugin/traffic-split5.t
Original file line number Diff line number Diff line change
Expand Up @@ -311,3 +311,109 @@ passed
}
--- response_body
1970, 1970, 1971, 1972, 1972, 1973
=== TEST 5: set upstream(multiple rules, the first rule has the match attribute and the second rule does not) and add route
--- config
location /t {
content_by_lua_block {
local json = require("toolkit.json")
local t = require("lib.test_admin").test
local data = {
uri = "/hello",
plugins = {
["traffic-split"] = {
rules = {
{
match = { {
vars = { { "arg_id", "==", "1" } }
} },
weighted_upstreams = {
{
upstream = {
name = "upstream_A",
type = "roundrobin",
nodes = {
["127.0.0.1:1970"] = 1
}
},
weight = 1
}
}
},
{
weighted_upstreams = {
{
upstream = {
name = "upstream_B",
type = "roundrobin",
nodes = {
["127.0.0.1:1971"] = 1
}
},
weight = 1
},
{
weight = 1
}
}
}
}
}
},
upstream = {
type = "roundrobin",
nodes = {
["127.0.0.1:1972"] = 1
}
}
}
local code, body = t('/apisix/admin/routes/1',
ngx.HTTP_PUT,
json.encode(data)
)
if code >= 300 then
ngx.status = code
end
ngx.say(body)
}
}
--- request
GET /t
--- response_body
passed
--- no_error_log
[error]
=== TEST 6: first rule match failed and the second rule match success
--- config
location /t {
content_by_lua_block {
local http = require "resty.http"
local httpc = http.new()
local uri = "http://127.0.0.1:" .. ngx.var.server_port .. "/hello?id=1"
local ports = {}
local res, err
for i = 1, 2 do
res, err = httpc:request_uri(uri)
local port = tonumber(res.body)
ports[i] = port
end
local uri = "http://127.0.0.1:" .. ngx.var.server_port .. "/hello?id=2"
for i = 3, 4 do
res, err = httpc:request_uri(uri)
local port = tonumber(res.body)
ports[i] = port
end
table.sort(ports)
ngx.say(table.concat(ports, ", "))
}
}
--- response_body
1970, 1970, 1971, 1972

0 comments on commit 605141c

Please sign in to comment.