refactor lua balancer and fix ipv6 issue

This commit is contained in:
Elvin Efendi 2018-05-30 17:14:28 -04:00
parent 082325b6f5
commit 4b07e73e5d
7 changed files with 16 additions and 29 deletions

View file

@ -135,18 +135,17 @@ function _M.balance()
return return
end end
local host, port = balancer:balance() local peer = balancer:balance()
if not (host and port) then if not peer then
ngx.log(ngx.WARN, ngx.log(ngx.WARN, "no peer was returned, balancer: " .. balancer.name)
string.format("host or port is missing, balancer: %s, host: %s, port: %s", balancer.name, host, port))
return return
end end
ngx_balancer.set_more_tries(1) ngx_balancer.set_more_tries(1)
local ok, err = ngx_balancer.set_current_peer(host, port) local ok, err = ngx_balancer.set_current_peer(peer)
if not ok then if not ok then
ngx.log(ngx.ERR, "error while setting current upstream peer to " .. tostring(err)) ngx.log(ngx.ERR, "error while setting current upstream peer: " .. tostring(err))
end end
end end

View file

@ -1,7 +1,6 @@
local balancer_resty = require("balancer.resty") local balancer_resty = require("balancer.resty")
local resty_chash = require("resty.chash") local resty_chash = require("resty.chash")
local util = require("util") local util = require("util")
local split = require("util.split")
local _M = balancer_resty:new({ factory = resty_chash, name = "chash" }) local _M = balancer_resty:new({ factory = resty_chash, name = "chash" })
@ -15,8 +14,7 @@ end
function _M.balance(self) function _M.balance(self)
local key = util.lua_ngx_var(self.hash_by) local key = util.lua_ngx_var(self.hash_by)
local endpoint_string = self.instance:find(key) return self.instance:find(key)
return split.split_pair(endpoint_string, ":")
end end
return _M return _M

View file

@ -128,7 +128,8 @@ function _M.balance(self)
endpoint = pick_and_score(peer_copy, k) endpoint = pick_and_score(peer_copy, k)
end end
return endpoint.address, endpoint.port -- TODO(elvinefendi) move this processing to _M.sync
return endpoint.address .. ":" .. endpoint.port
end end
function _M.after_balance(_) function _M.after_balance(_)

View file

@ -1,7 +1,6 @@
local balancer_resty = require("balancer.resty") local balancer_resty = require("balancer.resty")
local resty_roundrobin = require("resty.roundrobin") local resty_roundrobin = require("resty.roundrobin")
local util = require("util") local util = require("util")
local split = require("util.split")
local _M = balancer_resty:new({ factory = resty_roundrobin, name = "round_robin" }) local _M = balancer_resty:new({ factory = resty_roundrobin, name = "round_robin" })
@ -14,8 +13,7 @@ function _M.new(self, backend)
end end
function _M.balance(self) function _M.balance(self)
local endpoint_string = self.instance:find() return self.instance:find()
return split.split_pair(endpoint_string, ":")
end end
return _M return _M

View file

@ -1,7 +1,6 @@
local balancer_resty = require("balancer.resty") local balancer_resty = require("balancer.resty")
local resty_chash = require("resty.chash") local resty_chash = require("resty.chash")
local util = require("util") local util = require("util")
local split = require("util.split")
local ck = require("resty.cookie") local ck = require("resty.cookie")
local _M = balancer_resty:new({ factory = resty_chash, name = "sticky" }) local _M = balancer_resty:new({ factory = resty_chash, name = "sticky" })
@ -56,7 +55,7 @@ local function pick_random(instance)
return instance:next(index) return instance:next(index)
end end
local function sticky_endpoint_string(self) function _M.balance(self)
local cookie, err = ck:new() local cookie, err = ck:new()
if not cookie then if not cookie then
ngx.log(ngx.ERR, err) ngx.log(ngx.ERR, err)
@ -73,9 +72,4 @@ local function sticky_endpoint_string(self)
return self.instance:find(key) return self.instance:find(key)
end end
function _M.balance(self)
local endpoint_string = sticky_endpoint_string(self)
return split.split_pair(endpoint_string, ":")
end
return _M return _M

View file

@ -21,9 +21,8 @@ describe("Balancer chash", function()
} }
local instance = balancer_chash:new(backend) local instance = balancer_chash:new(backend)
local host, port = instance:balance() local peer = instance:balance()
assert.equal("10.184.7.40", host) assert.equal("10.184.7.40:8080", peer)
assert.equal("8080", port)
end) end)
end) end)
end) end)

View file

@ -11,9 +11,8 @@ describe("Balancer ewma", function()
} }
local instance = balancer_ewma:new(backend) local instance = balancer_ewma:new(backend)
local host, port = instance:balance() local peer = instance:balance()
assert.equal("10.184.7.40", host) assert.equal("10.184.7.40:8080", peer)
assert.equal("8080", port)
end) end)
it("picks the endpoint with lowest score when there two of them", function() it("picks the endpoint with lowest score when there two of them", function()
@ -32,9 +31,8 @@ describe("Balancer ewma", function()
ngx.shared.balancer_ewma_last_touched_at.get = function(self, key) return t end ngx.shared.balancer_ewma_last_touched_at.get = function(self, key) return t end
local host, port = instance:balance() local peer = instance:balance()
assert.equal("10.184.97.100", host) assert.equal("10.184.97.100:8080", peer)
assert.equal("8080", port)
end) end)
end) end)