потому что на реплики сначала приезжает создание спэйса, а потом устанавливается триггер. вам надо function role.init() box.space._space:on_replace(... hook() ...) hook()
local function init(opts) local log = require('log') box.space._space:on_replace(function(old_space, new_space) log.info('on _space replace') log.info(old_space) log.info(new_space) end)
то что на реплике на момент init роли все спейсы уже существуют это мне везет или последовательность по факту такая: сначала создаются все спейсы которых не существует, потом инитятся роли?
скорее везет, я бы не закладывался на последовательность
Почему везёт? Сначала в любом случае инитится мастер, там создаются спэйсы. При джойне реплики она сначала синкает данные и у неё появляются спжйсы, потом вызывается инит
везёт. однозначно. инит ролей на мастере и на реплике не синхронизирован. Ярче всего рейсы проявляются, если сначала собрать репликасет без ролей, а потом включить на нем роль.
то что на реплике на момент init роли все спейсы уже существуют это мне везет или последовательность по факту такая: сначала создаются все спейсы которых не существует, потом инитятся роли?
вам нужно закладываться на оба варианта:
if box.space.my_space ~= nil then ... else -- setup trigger