From 73649a1ffef31c1a3539d9d81118922e456ade3b Mon Sep 17 00:00:00 2001 From: Wei Wu <62574090+weiwu-sre@users.noreply.github.com> Date: Wed, 29 Dec 2021 16:14:50 -0800 Subject: [PATCH] Fix chashsubset backend with canary (#7235) * Fix chashsubset backend with canary * use floor for buckets calculation to remove hot spot * Remove testing code --- rootfs/etc/nginx/lua/balancer/chashsubset.lua | 5 +++-- .../nginx/lua/test/balancer/chashsubset_test.lua | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/rootfs/etc/nginx/lua/balancer/chashsubset.lua b/rootfs/etc/nginx/lua/balancer/chashsubset.lua index d9ceb471e..f004521bd 100644 --- a/rootfs/etc/nginx/lua/balancer/chashsubset.lua +++ b/rootfs/etc/nginx/lua/balancer/chashsubset.lua @@ -25,7 +25,6 @@ local function build_subset_map(backend) local set_count = math.ceil(#endpoints/subset_size) local node_count = set_count * subset_size - -- if we don't have enough endpoints, we reuse endpoints in the last set to -- keep the same number on all of them. local j = 1 @@ -61,7 +60,9 @@ function _M.new(self, backend) instance = resty_chash:new(subset_map), hash_by = complex_val, subsets = subsets, - current_endpoints = backend.endpoints + current_endpoints = backend.endpoints, + traffic_shaping_policy = backend.trafficShapingPolicy, + alternative_backends = backend.alternativeBackends, } setmetatable(o, self) self.__index = self diff --git a/rootfs/etc/nginx/lua/test/balancer/chashsubset_test.lua b/rootfs/etc/nginx/lua/test/balancer/chashsubset_test.lua index bbf55838c..59cb1e588 100644 --- a/rootfs/etc/nginx/lua/test/balancer/chashsubset_test.lua +++ b/rootfs/etc/nginx/lua/test/balancer/chashsubset_test.lua @@ -86,5 +86,21 @@ describe("Balancer chash subset", function() assert.are.equal(#endpoints, 3) end end) + + it("set alternative backends", function() + local backend = get_test_backend(7) + backend.trafficShapingPolicy = { + weight = 0, + header = "", + headerValue = "", + cookie = "" + } + backend.alternativeBackends = { + "my-dummy-canary-backend" + } + local instance = balancer_chashsubset:new(backend) + assert.not_equal(instance.traffic_shaping_policy, nil) + assert.not_equal(instance.alternative_backends, nil) + end) end) end)