From 3b217cf766709ac1b150a2289f5c4a48e97c6185 Mon Sep 17 00:00:00 2001 From: Elvin Efendi Date: Thu, 30 Apr 2020 09:12:50 -0400 Subject: [PATCH] make sure first backend sync happens in timer phase --- rootfs/etc/nginx/lua/balancer.lua | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/rootfs/etc/nginx/lua/balancer.lua b/rootfs/etc/nginx/lua/balancer.lua index 21318a54c..1661735b7 100644 --- a/rootfs/etc/nginx/lua/balancer.lua +++ b/rootfs/etc/nginx/lua/balancer.lua @@ -248,11 +248,18 @@ local function get_balancer() end function _M.init_worker() - sync_backends() -- when worker starts, sync backends without delay - local _, err = ngx.timer.every(BACKENDS_SYNC_INTERVAL, sync_backends) - if err then - ngx.log(ngx.ERR, "error when setting up timer.every for sync_backends: ", - tostring(err)) + -- when worker starts, sync backends without delay + -- we call it in timer because for endpoints that require + -- DNS resolution it needs to use socket which is not avalable in + -- init_worker phase + local ok, err = ngx.timer.at(0, sync_backends) + if not ok then + ngx.log(ngx.ERR, "failed to create timer: ", err) + end + + ok, err = ngx.timer.every(BACKENDS_SYNC_INTERVAL, sync_backends) + if not ok then + ngx.log(ngx.ERR, "error when setting up timer.every for sync_backends: ", err) end end