diff options
author | dormando <dormando@rydia.net> | 2022-02-08 18:18:13 -0800 |
---|---|---|
committer | dormando <dormando@rydia.net> | 2022-02-08 18:18:13 -0800 |
commit | 2cb5f95ceea7e29b1d1eaa7dc6a66becbf1c7fe1 (patch) | |
tree | aae9d44e75447291ae16280268882dd23a4333a0 | |
parent | 4b781973608a8f31fff314340759af936c518cd2 (diff) | |
download | memcached-2cb5f95ceea7e29b1d1eaa7dc6a66becbf1c7fe1.tar.gz |
proxy: accept fractional time for timeouts
the uring bits make abstraction this to the obvious common function a
little harder, so I skipped for now.
-rw-r--r-- | proto_proxy.c | 35 | ||||
-rw-r--r-- | t/startfile.lua | 2 |
2 files changed, 26 insertions, 11 deletions
diff --git a/proto_proxy.c b/proto_proxy.c index 20f908f..94fca9c 100644 --- a/proto_proxy.c +++ b/proto_proxy.c @@ -3211,15 +3211,22 @@ static int mcplib_backend_failure_limit(lua_State *L) { return 0; } -// TODO: take fractional time and convert. +// sad, I had to look this up... +#define NANOSECONDS(x) ((x) * 1E9 + 0.5) +#define MICROSECONDS(x) ((x) * 1E6 + 0.5) + static int mcplib_backend_connect_timeout(lua_State *L) { - int seconds = luaL_checkinteger(L, -1); + lua_Number secondsf = luaL_checknumber(L, -1); + lua_Integer secondsi = (lua_Integer) secondsf; + lua_Number subseconds = secondsf - secondsi; proxy_ctx_t *ctx = settings.proxy_ctx; // FIXME (v2): get global ctx reference in thread/upvalue. STAT_L(ctx); - ctx->tunables.connect.tv_sec = seconds; + ctx->tunables.connect.tv_sec = secondsi; + ctx->tunables.connect.tv_usec = MICROSECONDS(subseconds); #ifdef HAVE_LIBURING - ctx->tunables.connect_ur.tv_sec = seconds; + ctx->tunables.connect_ur.tv_sec = secondsi; + ctx->tunables.connect_ur.tv_nsec = NANOSECONDS(subseconds); #endif STAT_UL(ctx); @@ -3227,13 +3234,17 @@ static int mcplib_backend_connect_timeout(lua_State *L) { } static int mcplib_backend_retry_timeout(lua_State *L) { - int seconds = luaL_checkinteger(L, -1); + lua_Number secondsf = luaL_checknumber(L, -1); + lua_Integer secondsi = (lua_Integer) secondsf; + lua_Number subseconds = secondsf - secondsi; proxy_ctx_t *ctx = settings.proxy_ctx; // FIXME (v2): get global ctx reference in thread/upvalue. STAT_L(ctx); - ctx->tunables.retry.tv_sec = seconds; + ctx->tunables.retry.tv_sec = secondsi; + ctx->tunables.retry.tv_usec = MICROSECONDS(subseconds); #ifdef HAVE_LIBURING - ctx->tunables.retry_ur.tv_sec = seconds; + ctx->tunables.retry_ur.tv_sec = secondsi; + ctx->tunables.retry_ur.tv_nsec = NANOSECONDS(subseconds); #endif STAT_UL(ctx); @@ -3241,13 +3252,17 @@ static int mcplib_backend_retry_timeout(lua_State *L) { } static int mcplib_backend_read_timeout(lua_State *L) { - int seconds = luaL_checkinteger(L, -1); + lua_Number secondsf = luaL_checknumber(L, -1); + lua_Integer secondsi = (lua_Integer) secondsf; + lua_Number subseconds = secondsf - secondsi; proxy_ctx_t *ctx = settings.proxy_ctx; // FIXME (v2): get global ctx reference in thread/upvalue. STAT_L(ctx); - ctx->tunables.read.tv_sec = seconds; + ctx->tunables.read.tv_sec = secondsi; + ctx->tunables.read.tv_usec = MICROSECONDS(subseconds); #ifdef HAVE_LIBURING - ctx->tunables.read_ur.tv_sec = seconds; + ctx->tunables.read_ur.tv_sec = secondsi; + ctx->tunables.read_ur.tv_nsec = NANOSECONDS(subseconds); #endif STAT_UL(ctx); diff --git a/t/startfile.lua b/t/startfile.lua index b1d2787..85c743b 100644 --- a/t/startfile.lua +++ b/t/startfile.lua @@ -13,7 +13,7 @@ local STAT_ANOTHER <const> = 2 function mcp_config_pools(oldss) mcp.add_stat(STAT_EXAMPLE, "example") mcp.add_stat(STAT_ANOTHER, "another") - mcp.backend_connect_timeout(5) -- 5 second timeout. + mcp.backend_connect_timeout(5.5) -- 5 and a half second timeout. -- alias mcp.backend for convenience. -- important to alias global variables in routes where speed is concerned. local srv = mcp.backend |