Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

resty http got BAD ARGUMENT exception by accident

Open
#294 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
20/100
Issue type
Bug
Clarity
Needs clarification
Activity status
Stale
Tech stack
lua, nginx
Domain
networking

Research direction

Start with the traceback at resty/http.lua:365, then inspect resty/consul.lua:156 and apisix/discovery/consul/init.lua:342 to trace the request and thread lifecycle. Reproduce the BAD ARGUMENT exception using the reported OpenResty 1.21.4.1 environment and the provided concurrent request pattern; done means the cause is isolated and the failing path is corrected or clearly documented.

Written by the indexing model from the issue text.

Description

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)
    -- long pull
    -- Blocking request, increase timeout
    -- https://www.consul.io/api/index.html#blocking-queries
    local c = http.new()
    -- call the url
end

local function call_url2(url)
    -- long pull
    -- Blocking request, increase timeout
    -- https://www.consul.io/api/index.html#blocking-queries
    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
    -- short pull
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
Dominant language
Lua
Stars
2.1k
Forks
630
PR merge metrics
No merged PRs in 30d

Getting set up

  • Ships a Dockerfile or Docker Compose file
  • No pull request template
  • No contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from ledgetech/lua-resty-http

All issues in ledgetech/lua-resty-http

Similar issues

More Lua issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.