【问题标题】:Set trigger on box.info fields changed in tarantool?在 tarantool 中更改 box.info 字段设置触发器?
【发布时间】:2019-08-08 00:31:01
【问题描述】:

我需要将 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
  • 如果我在架构初始化时设置触发器,它会以只读方式失败 错误。在尝试 upsert read_only stat 空间时。
  • 如果我将其设置为 box.info.ro == False,它会跳过 replication_sync。

我发现最适合设置触发器的时间是一瞬间,然后box.info.statusloading 更改为running。我解决了我的问题,例如this。但我想知道是否有更好的方法?

我想过在box.info.status 字段上设置回调函数已更改。我怎样才能做到这一点?

【问题讨论】:

    标签: lua tarantool


    【解决方案1】:

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

    【讨论】:

    • 我修正了描述。想知道哪里有更合适的工具?
    【解决方案2】:

    我能想到的最简单的破解方法是生成一个 Fiber,它会定期检查更改并在检测到更改时运行回调。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多