Hi,

I am currently trying to send an http request for some incoming requests to a 
logging server.
The incoming connection should be handled independent of the logging, so it 
should be possible
that the incoming connection is already closed, while the logging is still in 
progress.

I use lua to create a new http action. This action then registers a task to 
decouple the logging.
And the rest happens inside this task.

As far as I understand the lua api documentation, it should be possible to call 
`register_task` [1]
inside an action. However, HAProxy deadlocks when a request comes in.
My uneducated guess would be that HAProxy hangs in a spinlock because it tries 
to create a lua context
while still executing lua.

I tested version 1.8.14 and 1.9.0 and they show the same behaviour.
The lua version is 5.3.5.

Am I missing something? Should this be possible at all?

gdb tells the following stacktrace. HAProxy never leaves the hlua_ctx_init 
function:

#0  0x000008eb8d04fd0f in hlua_ctx_init ()
#1  0x000008eb8d0533f0 in ?? ()
#2  0x00006de619c40d27 in ?? () from /usr/lib/liblua.so.5.3
#3  0x00006de619c4db85 in ?? () from /usr/lib/liblua.so.5.3
#4  0x00006de619c403b3 in ?? () from /usr/lib/liblua.so.5.3
#5  0x00006de619c410a9 in lua_resume () from /usr/lib/liblua.so.5.3
#6  0x000008eb8d04cf9a in ?? ()
#7  0x000008eb8d05197e in ?? ()
#8  0x000008eb8d05d037 in http_req_get_intercept_rule ()
#9  0x000008eb8d063f96 in http_process_req_common ()
#10 0x000008eb8d08f0f1 in process_stream ()
#11 0x000008eb8d156b08 in process_runnable_tasks ()
#12 0x000008eb8d0d443b in ?? ()
#13 0x000008eb8d02b660 in main ()


haproxy.cfg:
global
    lua-load mytest.lua

listen server
    mode    http
    bind :7999
    http-request lua.test
    server s 127.0.0.1:8081


mytest.lua:
function test(txn)
    -- This works when commenting out the task creation
    core.register_task(function()
        core.Warning("Aha")
    end)
end

core.register_action("test", { "http-req" }, test, 0)



Cheers,
Flakebi

[1] 
https://www.arpalert.org/src/haproxy-lua-api/1.8/index.html#core.register_task

Attachment: pgpz8uYSzbfax.pgp
Description: OpenPGP digital signature

Reply via email to