lua-nginx-module icon indicating copy to clipboard operation
lua-nginx-module copied to clipboard

resty http got BAD ARGUMENT exception by accident

Open Fabriceli opened this issue 2 years ago • 1 comments

This place is for bug reports and development discussions only. For general questions and discussions, please join the openresty-en mailing list instead: https://openresty.org/en/community.html ERROR Stacks:

2023/04/06 14:14:08 [error] 121939#121939: *28808 lua entry thread aborted: runtime error: /usr/local/apisix//deps/share/lua/5.1/resty/http.lua:365: bad argument #1 to 'str_sub' (string expected, got boolean)
stack traceback:
coroutine 0:
        [C]: in function 'str_sub'
        /usr/local/apisix//deps/share/lua/5.1/resty/http.lua:365: in function '_receive_status'
        /usr/local/apisix//deps/share/lua/5.1/resty/http.lua:777: in function 'request'
        /usr/local/apisix//deps/share/lua/5.1/resty/consul.lua:156: in function 'get'
        /usr/local/apisix/apisix/discovery/consul/init.lua:342: in function </usr/local/apisix/apisix/discovery/consul/init.lua:273>, context: ngx.timer

Here is the code snippet:

local function call_url1(url)
    local c = http.new()
    -- call the url
end

local function call_url2(url)
    local c = http.new()
    -- call the url
end

function _M.connect(premature)
    if premature then
        return
    end

   local url1_thread, url1_err = ngx.thread.spawn(call_url1, url1)
   if not url1_thread then
       log.error("spawn url1 thread error")
       return
   end
   local url2_thread, url2_err = ngx.thread.spawn(call_url2, url2)
   if not url2_thread then
       log.error("spawn url2 thread error")
       return
   end
   local thread_wait_ok, wait_res = ngx.thread.wait(url1_thread, url2_thread)
   ngx.thread.kill(url1_thread)
   ngx.thread.kill(url2_thread)
   if not thread_wait_ok then
        log.error("failed to wait thread: ", err, ", wait_res: ", wait_res)
        return
    end
    
    local c3 = http.new()
    -- call other url and got exception here
end

Ensure you have provided the following details while reporting a problem:

  • The exact version of the related software, including but not limited to the OpenResty version (if any), the NGINX core version, the ngx_lua module version,
nginx version: openresty/1.21.4.1

and your operating system version.

  • A minimal and standalone test case that others can easily run on their side and reproduce the issue you are seeing.
  • Do not simply say "something is broken" or "something does not work". Always provide as much details as possible. Always describe the symptoms and your expected results.
  • You can (temporarily) enable the nginx debugging logs to see the internal workings of NGINX in your nginx''s error.log file. See http://nginx.org/en/docs/debugging_log.html The same instructions apply equally well to OpenResty.
  • If you are seeing crashes, please provide the full backtrace for the crash. See https://www.nginx.com/resources/wiki/start/topics/tutorials/debugging/#core-dump for more details.

Please, do not use Chinese here. This place is considered English only. If you really want to use Chinese, please join and post to the openresty (Chinese) mailing list instead. Please see https://openresty.org/en/community.html Thanks for your cooperation.

Fabriceli avatar Apr 07 '23 07:04 Fabriceli

The error is thrown by /usr/local/apisix//deps/share/lua/5.1/resty/http.lua:365: in function '_receive_status You'd better report this bug to lua-resty-http.](https://github.com/ledgetech/lua-resty-http

zhuizhuhaomeng avatar Apr 07 '23 08:04 zhuizhuhaomeng