当我尝试使用Aerospike客户端写()时,我得到了这个错误:
22 AS_PROTO_RESULT_FAIL_FORBIDDEN
仅当在截断()之后调用Write操作且仅在特定键上调用时才会发生错误。 我试着:
没有解决这个问题所以我认为唯一的原因是Truncate操作。
错误是系统性的;因为同一组密钥在相同的密钥上完全失败。
在调用截断后,等待X秒并检查控制台管理,Set上的对象编号是" 0"
我必须等待几分钟(1到5)以确保运行该过程问题已经消失。
群集有3个节点,副本因子为2. SSD持久性
我正在使用NuGet C#Aerospike.Client v 3.4.4
在单个本地节点(docker,在内存中)运行进程不会产生任何错误。
如何知道Truncate()进程(其后面的删除操作)何时完全终止并且我可以安全地使用Set?
[解决]
正如所建议的,我们的devops检查了时间跨度同步。他在机器图像上发现 NTP未启用(错误地)
启用它。再次测试。没有更多的错误。
谢谢,
亚历
答案 0 :(得分:3)
听起来像跨节点时间同步的潜在问题,请确保正确设置ntp ...这是我在这一点上的唯一猜测,特别是当你提到它在单个节点上工作时。 truncate命令将捕获当前时间(如果您没有指定时间),并将使用它来防止写入“之前”写入的记录。检查(从我的头顶,对不起,如果不是这样)/opt/aerospike/smd/truncate.smd在每个节点上查看截断命令的时间戳并检查不同节点的时间。
[感谢@kporter的评论。因此,所有truncate.smd文件中的时间都是相同的,但是机器之间的时间差异仍会导致写入对某些节点失败]