Re: [THANKS] Re: Deadlock lua when calling register_task inside action function

2019-01-07 Thread Willy Tarreau
On Mon, Jan 07, 2019 at 10:46:08AM +0100, Thierry Fournier wrote:
> great ! 
> 
> Willy, could you apply the attached patch ?

applied, thanks!
Willy



[THANKS] Re: Deadlock lua when calling register_task inside action function

2019-01-07 Thread Thierry Fournier
great ! 

Willy, could you apply the attached patch ?

thanks
Thierry


0001-BUG-MEDIUM-dead-lock-when-Lua-tasks-are-trigerred.patch
Description: Binary data

> On 6 Jan 2019, at 19:11, Thierry Fournier  
> wrote:
> 
> Hi,
> 
> Thanks for the bug report.
> Your "uneducated guess" was right.
> 
> Could you test the patch in attachment ?
> 
> Thanks
> Thierry
> <0001-BUG-MEDIUM-dead-lock-when-Lua-tasks-are-trigerred.patch>
> 
>> On 2 Jan 2019, at 01:40, Flakebi  wrote:
>> 
>> 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  0x08eb8d04fd0f in hlua_ctx_init ()
>> #1  0x08eb8d0533f0 in ?? ()
>> #2  0x6de619c40d27 in ?? () from /usr/lib/liblua.so.5.3
>> #3  0x6de619c4db85 in ?? () from /usr/lib/liblua.so.5.3
>> #4  0x6de619c403b3 in ?? () from /usr/lib/liblua.so.5.3
>> #5  0x6de619c410a9 in lua_resume () from /usr/lib/liblua.so.5.3
>> #6  0x08eb8d04cf9a in ?? ()
>> #7  0x08eb8d05197e in ?? ()
>> #8  0x08eb8d05d037 in http_req_get_intercept_rule ()
>> #9  0x08eb8d063f96 in http_process_req_common ()
>> #10 0x08eb8d08f0f1 in process_stream ()
>> #11 0x08eb8d156b08 in process_runnable_tasks ()
>> #12 0x08eb8d0d443b in ?? ()
>> #13 0x08eb8d02b660 in main ()
>> 
>> 
>> haproxy.cfg:
>> global
>>   lua-load mytest.lua
>> 
>> listen server
>>   modehttp
>>   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
> 



Re: Deadlock lua when calling register_task inside action function

2019-01-06 Thread Flakebi
Hi,

Thanks for the fast fix, everything works fine now!

Cheers,
Flakebi

On Sun, 6 Jan 2019 19:11:21 +0100 Thierry Fournier 
 wrote:
> Hi,
> 
> Thanks for the bug report.
> Your "uneducated guess" was right.
> 
> Could you test the patch in attachment ?
> 
> Thanks
> Thierry


pgp3vWrqoKOPK.pgp
Description: OpenPGP digital signature


Re: Deadlock lua when calling register_task inside action function

2019-01-06 Thread Thierry Fournier
Hi,

Thanks for the bug report.
Your "uneducated guess" was right.

Could you test the patch in attachment ?

Thanks
Thierry


0001-BUG-MEDIUM-dead-lock-when-Lua-tasks-are-trigerred.patch
Description: Binary data


> On 2 Jan 2019, at 01:40, Flakebi  wrote:
> 
> 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  0x08eb8d04fd0f in hlua_ctx_init ()
> #1  0x08eb8d0533f0 in ?? ()
> #2  0x6de619c40d27 in ?? () from /usr/lib/liblua.so.5.3
> #3  0x6de619c4db85 in ?? () from /usr/lib/liblua.so.5.3
> #4  0x6de619c403b3 in ?? () from /usr/lib/liblua.so.5.3
> #5  0x6de619c410a9 in lua_resume () from /usr/lib/liblua.so.5.3
> #6  0x08eb8d04cf9a in ?? ()
> #7  0x08eb8d05197e in ?? ()
> #8  0x08eb8d05d037 in http_req_get_intercept_rule ()
> #9  0x08eb8d063f96 in http_process_req_common ()
> #10 0x08eb8d08f0f1 in process_stream ()
> #11 0x08eb8d156b08 in process_runnable_tasks ()
> #12 0x08eb8d0d443b in ?? ()
> #13 0x08eb8d02b660 in main ()
> 
> 
> haproxy.cfg:
> global
>lua-load mytest.lua
> 
> listen server
>modehttp
>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



Deadlock lua when calling register_task inside action function

2019-01-01 Thread Flakebi
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  0x08eb8d04fd0f in hlua_ctx_init ()
#1  0x08eb8d0533f0 in ?? ()
#2  0x6de619c40d27 in ?? () from /usr/lib/liblua.so.5.3
#3  0x6de619c4db85 in ?? () from /usr/lib/liblua.so.5.3
#4  0x6de619c403b3 in ?? () from /usr/lib/liblua.so.5.3
#5  0x6de619c410a9 in lua_resume () from /usr/lib/liblua.so.5.3
#6  0x08eb8d04cf9a in ?? ()
#7  0x08eb8d05197e in ?? ()
#8  0x08eb8d05d037 in http_req_get_intercept_rule ()
#9  0x08eb8d063f96 in http_process_req_common ()
#10 0x08eb8d08f0f1 in process_stream ()
#11 0x08eb8d156b08 in process_runnable_tasks ()
#12 0x08eb8d0d443b in ?? ()
#13 0x08eb8d02b660 in main ()


haproxy.cfg:
global
lua-load mytest.lua

listen server
modehttp
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


pgpz8uYSzbfax.pgp
Description: OpenPGP digital signature