在tarantool中更改的box.info字段上设置触发器?

时间:2019-08-07 14:06:25

标签: lua tarantool

我需要将box.info.status从“正在加载”更改为“就绪”。因此,我可以在读取WAL之后但在复制同步之前启用触发器。

我在box.space.myspace上的触发功能:

local function before_replace(old, new)
    -- collision resolving here
    if box.session.type() ~= 'applier' then
        box.space.stat:upsert(
            { "key", 0 },
            {
                {"+", stat.COUNT, 1}
            })
    end
    return
end
  • 如果我在架构初始化上设置触发器,它将失败,并显示read_only 错误。尝试增加只读stat空间时。
  • 如果我在box.info.ro == False上设置它,则会跳过Replication_sync。

我发现最合适的触发时间是box.info.statusloading更改为running的时刻。我可以解决this之类的问题。但我想知道哪里有更好的方法?

我考虑过在box.info.status字段上设置回调函数。我该如何实现?

2 个答案:

答案 0 :(得分:0)

我能想到的最简单的方法是生成一个光纤,该光纤会定期检查更改并在检测到更改时运行回叫。

答案 1 :(得分:0)

您做错了。如果要等待实例离开只读模式,则有box.ctl.wait_ro()。如果要等待引导结束,请将代码放在box.cfg之后。最后,如果要捕获模式初始化事件,请设置box.ctl.on_schema_init触发器。 请描述您到底要完成什么,并且将有一个适当的工具。