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é >