You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@apisix.apache.org by GitBox <gi...@apache.org> on 2020/09/09 05:53:36 UTC
[GitHub] [apisix] griffenliu opened a new issue #2194: bug: error when route not found
griffenliu opened a new issue #2194:
URL: https://github.com/apache/apisix/issues/2194
### Issue description
when route not found and `return core.response.exit(404, {error_msg = "failed to match any routes"})`, the apisix occur error.
### Environment
* apisix version (cmd: `apisix version`): 1.5
* OS: Ubuntu 18.04
### Minimal test code / Steps to reproduce the issue
1. add global plugin cors
```
curl -X PUT \
https://{apisix_listen_address}/apisix/admin/global_rules/1 \
-H 'Content-Type: application/json' \
-H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' \
-d '{
"plugins": {
"cors": { }
}
}'
```
2. Access a nonexistent Route, for example: http://172.0.0.1:9080/test
3. the code snippet
```
-- ### init.lua
function _M.http_access_phase()
.....
-- load and run global rule
if router.global_rules and router.global_rules.values
and #router.global_rules.values > 0 then
local plugins = core.tablepool.fetch("plugins", 32, 0)
local values = router.global_rules.values
for _, global_rule in config_util.iterate_values(values) do
api_ctx.conf_type = "global_rule"
api_ctx.conf_version = global_rule.modifiedIndex
api_ctx.conf_id = global_rule.value.id
core.table.clear(plugins)
api_ctx.plugins = plugin.filter(global_rule, plugins)
run_plugin("rewrite", plugins, api_ctx)
run_plugin("access", plugins, api_ctx)
end
core.tablepool.release("plugins", plugins)
-- Note: api_ctx is cleared here
api_ctx.plugins = nil
api_ctx.conf_type = nil
api_ctx.conf_version = nil
api_ctx.conf_id = nil
api_ctx.global_rules = router.global_rules
end
.....
-- Note: here no route matched, so exit 404
local route = api_ctx.matched_route
if not route then
return core.response.exit(404,
{error_msg = "failed to match any routes"})
end
...
end
-- Continue with the following code
function _M.http_header_filter_phase()
common_phase("header_filter")
end
local function common_phase(phase_name)
...
if api_ctx.global_rules then
local plugins = core.tablepool.fetch("plugins", 32, 0)
local values = api_ctx.global_rules.values
for _, global_rule in config_util.iterate_values(values) do
core.table.clear(plugins)
plugins = plugin.filter(global_rule, plugins)
-- Note: here run global plugin
run_plugin(phase_name, plugins, api_ctx)
end
core.tablepool.release("plugins", plugins)
end
...
end
local function run_plugin(phase, plugins, api_ctx)
.....
for i = 1, #plugins, 2 do
local phase_fun = plugins[i][phase]
if phase_fun then
phase_fun(plugins[i + 1], api_ctx)
end
end
.....
end
-- ### cors.lua
function _M.header_filter(conf, ctx)
.....
-- Note: here the ctx is api_ctx
local multiple_origin, err = core.lrucache.plugin_ctx(plugin_name, ctx,
create_mutiple_origin_cache, conf)
.....
end
-- ### lrucache.lua
function _M.plugin_ctx(plugin_name, api_ctx, create_obj_fun, ...)
-- Note: here used api_ctx.conf_id is nil
local key = api_ctx.conf_type .. "#" .. api_ctx.conf_id
return _plugin(plugin_name, key, api_ctx.conf_version, create_obj_fun, ...)
end
```
### What's the actual result? (including assertion message & call stack if applicable)
2020/09/09 11:37:14 [error] 9701#9701: *373 failed to run header_filter_by_lua*: ...user-center//deps/share/lua/5.1/apisix/core/lrucache.lua:202: attempt to concaten ate field 'conf_id' (a nil value)
2297217 stack traceback:
2297218 ...user-center//deps/share/lua/5.1/apisix/core/lrucache.lua:202: in function 'plugin_ctx'
2297219 ...-user-center//deps/share/lua/5.1/apisix/plugins/cors.lua:144: in function 'phase_fun'
2297220 ...odes/dfy-user-center//deps/share/lua/5.1/apisix/init.lua:142: in function 'run_plugin'
2297221 ...odes/dfy-user-center//deps/share/lua/5.1/apisix/init.lua:562: in function 'common_phase'
2297222 ...odes/dfy-user-center//deps/share/lua/5.1/apisix/init.lua:573: in function 'http_header_filter_phase'
2297223 header_filter_by_lua:2: in main chunk, client: 172.30.212.206, server: , request: "GET /dfy-h5-user HTTP/1.0", host: "m.dafangya.com.cn"
### What's the expected result?
404 page.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [apisix] spacewander closed issue #2194: bug: error when route not found
Posted by GitBox <gi...@apache.org>.
spacewander closed issue #2194:
URL: https://github.com/apache/apisix/issues/2194
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [apisix] spacewander commented on issue #2194: bug: error when route not found
Posted by GitBox <gi...@apache.org>.
spacewander commented on issue #2194:
URL: https://github.com/apache/apisix/issues/2194#issuecomment-690091100
Please attach your report to #2006 instead.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [apisix] spacewander commented on issue #2194: bug: error when route not found
Posted by GitBox <gi...@apache.org>.
spacewander commented on issue #2194:
URL: https://github.com/apache/apisix/issues/2194#issuecomment-689467983
Duplicate of #2006 ?
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org