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