Hi Cyril,

Any idea how I can deterministically set the readtimeout as well?

Thanks
Sachin

On Fri, Jul 27, 2018 at 1:23 PM, Sachin Shetty <sshe...@egnyte.com> wrote:

> Thankyou Cyril, your patch fixed the connect issue.
>
> Read timeout still seems a bit weird though, at settimeout(1), readtimeout
> kicks in at about 4 seconds, and at settimeout(2), readtimeout kicks in at
> about 8 seconds.
>
> is that expected? I couldn't find read timeout explicitly set anywhere in
> the same source file.
>
> Thanks
> Sachin
>
> On Fri, Jul 27, 2018 at 5:18 AM, Cyril Bonté <cyril.bo...@free.fr> wrote:
>
>> Hi,
>>
>> Le 26/07/2018 à 19:54, Sachin Shetty a écrit :
>>
>>> Hi,
>>>
>>> We are using a http-req lua action to dynamically set some app specific
>>> metadata headers. The lua handler connects to a upstream memcache like
>>> service over tcp to fetch additional metadata.
>>>
>>> Functionally everything works ok, but I am seeing that socket.settimeout
>>> has no effect. Irrespective of what I set in settimeout if the upstream
>>> service is unreachable, connect always timesout at 5 seconds, and read
>>> timeout around 10 seconds. It seems like  settimeout has no effect and it
>>> always picks defaults of 5 seconds for connect timeout and 10 seconds for
>>> read timeout.
>>>
>>
>> For the connect timeout, it seems this is a hardcoded default value in
>> src/hlua.c:
>>   socket_proxy.timeout.connect = 5000; /* By default the timeout
>> connection is 5s. */
>>
>> If it's possible, can you try the patch attached (for the 1.7.x branch) ?
>> But please don't use it in production yet ;-)
>>
>>
>>> Haproxy conf call:
>>>
>>> http-request lua.get_proxy
>>>
>>> Lua code sample:
>>>
>>> function get_proxy(txn)
>>>      local sock = core.tcp()
>>>      sock:settimeout(2)
>>>      status, error = sock:connect(gds_host, gds_port)
>>>      if not status then
>>>          core.Alert("1 Error in connecting:" .. key .. ":" .. error)
>>>          return result, "Error: " .. error
>>>      end
>>>      sock:send(key .. "\r\n")
>>>      ....
>>>      ....
>>>
>>>
>>> core.register_action("get_proxy", { "http-req" }, get_proxy)
>>>
>>> Haproxy version:
>>>
>>> HA-Proxy version 1.7.8 2017/07/07
>>> Copyright 2000-2017 Willy Tarreau <wi...@haproxy.org <mailto:
>>> wi...@haproxy.org>>
>>>
>>>
>>> Build options :
>>>    TARGET  = linux2628
>>>    CPU     = generic
>>>    CC      = gcc
>>>    CFLAGS  = -O2 -g -fno-strict-aliasing -Wdeclaration-after-statement
>>> -fwrapv -DTCP_USER_TIMEOUT=18
>>>    OPTIONS = USE_LINUX_TPROXY=1 USE_ZLIB=1 USE_REGPARM=1 USE_OPENSSL=1
>>> USE_LUA=1 USE_PCRE=1
>>>
>>> Default settings :
>>>    maxconn = 2000, bufsize = 16384, maxrewrite = 1024, maxpollevents =
>>> 200
>>>
>>> Encrypted password support via crypt(3): yes
>>> Built with zlib version : 1.2.7
>>> Running on zlib version : 1.2.7
>>> Compression algorithms supported : identity("identity"),
>>> deflate("deflate"), raw-deflate("deflate"), gzip("gzip")
>>> Built with OpenSSL version : OpenSSL 1.0.1e-fips 11 Feb 2013
>>> Running on OpenSSL version : OpenSSL 1.0.1e-fips 11 Feb 2013
>>> OpenSSL library supports TLS extensions : yes
>>> OpenSSL library supports SNI : yes
>>> OpenSSL library supports prefer-server-ciphers : yes
>>> Built with PCRE version : 8.32 2012-11-30
>>> Running on PCRE version : 8.32 2012-11-30
>>> PCRE library supports JIT : no (USE_PCRE_JIT not set)
>>> Built with Lua version : Lua 5.3.2
>>> Built with transparent proxy support using: IP_TRANSPARENT
>>> IPV6_TRANSPARENT IP_FREEBIND
>>>
>>> Available polling systems :
>>>        epoll : pref=300,  test result OK
>>>         poll : pref=200,  test result OK
>>>       select : pref=150,  test result OK
>>> Total: 3 (3 usable), will use epoll.
>>>
>>> Available filters :
>>>      [COMP] compression
>>>      [TRACE] trace
>>>      [SPOE] spoe
>>>
>>>
>>>
>>> Thanks
>>> Sachin
>>>
>>
>>
>> --
>> Cyril Bonté
>>
>
>

Reply via email to