代码之家  ›  专栏  ›  技术社区  ›  Alex 75

调用Truncate后的写入操作(代码22)出错。-C#客户

  •  3
  • Alex 75  · 技术社区  · 7 年前

    ()我得到这个错误:
    22禁止AS\u PROTO\u RESULT\u FAIL\u

    仅当在 截断 ()并且仅在特定键上。 我试图:

    • 更改传递的键类型(Value、long、string)
    • 在每次写入之前添加延迟(200ms、500ms)
    • 生成全新的密钥(GUID.NewGuid()。ToString())

    误差是系统性的;对于同一组密钥,在相同的密钥上完全失败。

    截断

    我必须等待几分钟(1到5分钟),以确保运行进程时问题消失。

    该集群有3个节点,副本因子为2。SSD持久性

    在单个本地节点(docker,内存中)上运行进程不会产生任何错误。

    我怎么知道Truncate()进程(它后面的删除操作)何时完全终止,我可以安全地使用集合?


    正如我们建议的那样,我们的devops检查了时间跨度同步。他发现了 未启用NTP

    谢谢

    亚历克斯

    1 回复  |  直到 7 年前
        1
  •  3
  •   Meher    7 年前

    听起来像是跨节点时间同步的潜在问题,请确保您正确设置了ntp。。。这将是我在这一点上的唯一猜测,特别是当你提到它在单个节点上工作时。truncate命令将捕获当前时间(如果未指定时间),并使用该时间防止写入“之前”写入的记录。检查下(从我的头顶,抱歉,如果不是这样)/opt/aerospike/smd/truncate。smd在每个节点上查看截断命令的时间戳,并检查不同节点上的时间。

    [感谢@kporter的评论。因此,所有truncate.smd文件中的时间都是相同的,但机器之间的时间差异仍然会导致对某些节点的写入失败]