lua randomseed per worker
This commit is contained in:
parent
66aecbd0b2
commit
4896b064ca
6 changed files with 51 additions and 3 deletions
26
rootfs/etc/nginx/lua/lua_ingress.lua
Normal file
26
rootfs/etc/nginx/lua/lua_ingress.lua
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
local _M = {}
|
||||
|
||||
local seeds = {}
|
||||
local original_randomseed = math.randomseed
|
||||
math.randomseed = function(seed)
|
||||
local pid = ngx.worker.pid()
|
||||
|
||||
if seeds[pid] then
|
||||
ngx.log(ngx.WARN,
|
||||
string.format("ignoring math.randomseed(%d) since PRNG is already seeded for worker %d", seed, pid))
|
||||
return
|
||||
end
|
||||
|
||||
original_randomseed(seed)
|
||||
seeds[pid] = seed
|
||||
end
|
||||
|
||||
local function randomseed()
|
||||
math.randomseed(ngx.time() + ngx.worker.pid())
|
||||
end
|
||||
|
||||
function _M.init_worker()
|
||||
randomseed()
|
||||
end
|
||||
|
||||
return _M
|
||||
9
rootfs/etc/nginx/lua/test/lua_ingress_test.lua
Normal file
9
rootfs/etc/nginx/lua/test/lua_ingress_test.lua
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
describe("lua_ingress", function()
|
||||
it("patches math.randomseed to not be called more than once per worker", function()
|
||||
local s = spy.on(ngx, "log")
|
||||
|
||||
math.randomseed(100)
|
||||
assert.spy(s).was_called_with(ngx.WARN,
|
||||
string.format("ignoring math.randomseed(%d) since PRNG is already seeded for worker %d", 100, ngx.worker.pid()))
|
||||
end)
|
||||
end)
|
||||
|
|
@ -1,4 +1,5 @@
|
|||
local ffi = require("ffi")
|
||||
local lua_ingress = require("lua_ingress")
|
||||
|
||||
-- without this we get errors such as "attempt to redefine XXX"
|
||||
local old_cdef = ffi.cdef
|
||||
|
|
@ -32,7 +33,6 @@ end
|
|||
ngx.log = function(...) end
|
||||
ngx.print = function(...) end
|
||||
|
||||
-- TODO(elvinefendi) once this is implemented for production (should be!), share the same code
|
||||
math.randomseed(ngx.time() + ngx.worker.pid())
|
||||
lua_ingress.init_worker()
|
||||
|
||||
require "busted.runner"({ standalone = false })
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue