使用nebula ttl功能与预期现象不符

  • nebula 版本:nebula 2.0 GA
  • 部署方式(分布式 / 单机 / Docker / DBaaS):单机
  • 硬件信息
    • 磁盘( 推荐使用 SSD)500G
    • CPU、内存信息 40C 126G
  • 问题的具体描述
    你好,我们公司使用nebula图数据库存储我们的业务数据,使用了多个导入程序来向nebula导入数据,为了维护这些导入程序的导入状态的一致,选择在nebula上新建了一个space和tage用来存储各个导入程序的导入状态,每个导入状态对应一个vertex,各个导入程序周期性更新导入状态vertex的ttl,当前ttl过期时间是10s,更新频率是2s一次,但是在开启导入程序后近两个小时左右,导入状态vertex还是过期了,导致继续更新ttl报错( response error code: E_EXECUTION_ERROR, message: Storage Error: Vertex or edge not found),这个现象有点让人迷惑,烦请帮忙定位下原因。
    除了会有个独立线程周期更新ttl外,还有业务线程会去update导入状态vertex的其他字段,并发update同一个点会存在某个update失败的问题吗?

导入状态的space和vertex schema:

image

更新ttl使用的update语句:

UPDATE VERTEX ‘global_state’ SET state.ttl = now();

1 个赞

应该是在你update之前,记录已经过期了。

实际过期是在我周期性更新ttl了两个小时后发生的,在这两个小时内我用console查看这个点是存在的,而且ttl字段的时间戳确实是不断被成功更新的。

这个现象很好复现,基本我每次启动导入程序运行一段时间都会出现。

1 个赞

我本地尝试复现下试试。

1 个赞

已经定位,pr restore update atomic operation by panda-sheep · Pull Request #428 · vesoft-inc/nebula-storage · GitHub
以前是ok的,中间某次修改导致的,多谢哈。

:+1: :+1: :+1:

你好,上面那个pr合入到2.0.1版本了吗,我刚才升级到2.0.1还是有上面的问题。

并发操作一个点,只有第一个成功,其他的会失败。
你看看log信息是啥