diff --git a/rootfs/etc/nginx/lua/balancer.lua b/rootfs/etc/nginx/lua/balancer.lua index 2d88f8f79..4fcf035ff 100644 --- a/rootfs/etc/nginx/lua/balancer.lua +++ b/rootfs/etc/nginx/lua/balancer.lua @@ -133,9 +133,25 @@ local function route_to_alternative_balancer(balancer) end -- TODO: support traffic shaping for n > 1 alternative backends - local alternative_balancer = balancers[balancer.alternative_backends[1]] + local backend_name = balancer.alternative_backends[1] + if not backend_name then + ngx.log(ngx.ERR, "empty alternative backend") + return false + end - local clean_target_header = util.replace_special_char(alternative_balancer.traffic_shaping_policy.header, "-", "_") + local alternative_balancer = balancers[backend_name] + if not alternative_balancer then + ngx.log(ngx.ERR, "no alternative balancer for backend: " .. tostring(backend_name)) + return false + end + + local traffic_shaping_policy = alternative_balancer.traffic_shaping_policy + if not traffic_shaping_policy then + ngx.log(ngx.ERR, "traffic shaping policy is not set for balanacer of backend: " .. tostring(backend_name)) + return false + end + + local clean_target_header = util.replace_special_char(traffic_shaping_policy.header, "-", "_") local header = ngx.var["http_" .. clean_target_header] if header then @@ -146,7 +162,7 @@ local function route_to_alternative_balancer(balancer) end end - local clean_target_cookie = util.replace_special_char(alternative_balancer.traffic_shaping_policy.cookie, "-", "_") + local clean_target_cookie = util.replace_special_char(traffic_shaping_policy.cookie, "-", "_") local cookie = ngx.var["cookie_" .. clean_target_cookie] if cookie then @@ -157,7 +173,7 @@ local function route_to_alternative_balancer(balancer) end end - if math.random(100) <= alternative_balancer.traffic_shaping_policy.weight then + if math.random(100) <= traffic_shaping_policy.weight then return true end diff --git a/rootfs/etc/nginx/lua/balancer/chash.lua b/rootfs/etc/nginx/lua/balancer/chash.lua index d9108a8b3..ffd9f54e0 100644 --- a/rootfs/etc/nginx/lua/balancer/chash.lua +++ b/rootfs/etc/nginx/lua/balancer/chash.lua @@ -9,6 +9,8 @@ function _M.new(self, backend) local o = { instance = self.factory:new(nodes), hash_by = backend["upstream-hash-by"], + traffic_shaping_policy = backend.trafficShapingPolicy, + alternative_backends = backend.alternativeBackends, } setmetatable(o, self) self.__index = self diff --git a/rootfs/etc/nginx/lua/balancer/ewma.lua b/rootfs/etc/nginx/lua/balancer/ewma.lua index 8e4512000..0ab4e6544 100644 --- a/rootfs/etc/nginx/lua/balancer/ewma.lua +++ b/rootfs/etc/nginx/lua/balancer/ewma.lua @@ -120,6 +120,8 @@ end function _M.new(self, backend) local o = { peers = backend.endpoints, + traffic_shaping_policy = backend.trafficShapingPolicy, + alternative_backends = backend.alternativeBackends, } setmetatable(o, self) self.__index = self diff --git a/rootfs/etc/nginx/lua/balancer/round_robin.lua b/rootfs/etc/nginx/lua/balancer/round_robin.lua index db6c8e7dd..46641363e 100644 --- a/rootfs/etc/nginx/lua/balancer/round_robin.lua +++ b/rootfs/etc/nginx/lua/balancer/round_robin.lua @@ -8,6 +8,8 @@ function _M.new(self, backend) local nodes = util.get_nodes(backend.endpoints) local o = { instance = self.factory:new(nodes), + traffic_shaping_policy = backend.trafficShapingPolicy, + alternative_backends = backend.alternativeBackends, } setmetatable(o, self) self.__index = self diff --git a/rootfs/etc/nginx/lua/balancer/sticky.lua b/rootfs/etc/nginx/lua/balancer/sticky.lua index c61cef446..de9a557bc 100644 --- a/rootfs/etc/nginx/lua/balancer/sticky.lua +++ b/rootfs/etc/nginx/lua/balancer/sticky.lua @@ -18,6 +18,8 @@ function _M.new(self, backend) cookie_expires = backend["sessionAffinityConfig"]["cookieSessionAffinity"]["expires"], cookie_max_age = backend["sessionAffinityConfig"]["cookieSessionAffinity"]["maxage"], digest_func = digest_func, + traffic_shaping_policy = backend.trafficShapingPolicy, + alternative_backends = backend.alternativeBackends, } setmetatable(o, self) self.__index = self