local log = require 'log'.new('roles.billing-queue')
local fiber = require 'fiber'
local queue = require 'queue'
queue.cfg({ in_replicaset = true })
rawset(_G, 'queue', queue)
local M = {
role_name = ...,
defaults = {
netbox_timeout = 1.5,
ttr = 2,
ttl = 30 * 86400,
take_timeout = 1,
},
tube_name = 'billing',
}
function M.validate(cfg)
cfg = cfg or {}
if cfg.ttr then
assert(type(cfg.ttr) == 'number', 'ttr must be a number')
assert(cfg.ttr > 0, 'ttr must be a positive number')
end
if cfg.ttl then
assert(type(cfg.ttl) == 'number', 'ttl must be a number')
assert(cfg.ttl > 0, 'ttl must be a positive number')
end
end
function M.apply(cfg)
log.info('[queue_debug] apply role')
-- workaround for correct queue bootstrap
-- fiber.create(function ()
-- log.info('[queue_debug] wait master')
-- box.ctl.wait_rw()
-- -- trigger box.cfg wrapper
-- log.info('[queue_debug] box.cfg {}')
-- box.cfg {}
-- -- create queue
-- log.info('[queue_debug] ro=%s', box.info.ro)
-- if not queue.create_tube(M.tube_name, 'fifottl', { if_not_exists = true }) then
-- log.info('[queue_debug] failed tube creation')
-- end
-- end)
-- without workaround
if not queue.create_tube(M.tube_name, 'fifottl', { if_not_exists = true }) then
log.info('[queue_debug] failed tube creation')
end
end
function M.stop()
end
return M
Problem
I tried to run cluster on tarantool 3 with queue on shard. Everething was fine until i added a replicas to queue replicaset.
Sometimes after cluster start i got strange behavior: queue stuck in INIT state on RW instance.
Reproduce
Versions:
config.yaml
app/roles/billing.lua