调用 Truncate 后写入操作出错(代码 22)。 - C#客户端
Error on Write operation (code 22) after calling Truncate. - C# client
当我尝试使用 Aerospike 客户端 Write() 时,出现此错误:
22 AS_PROTO_RESULT_FAIL_FORBIDDEN
仅当在 Truncate() 之后调用 Write 操作且仅在特定键上时才会发生错误。
我试过:
- 更改密钥类型(字符串、长、小数字、大数字)
- 更改传递的密钥类型(值、长、字符串)
- 更改 WritePolicy 的重试次数
- 在每次写入前添加延迟(200ms、500ms)
- 生成全新的密钥 (GUID.NewGuid().ToString())
None 解决了这个问题,所以我认为唯一的原因是截断操作。
系统性错误;对于同一组键,完全在相同的键上失败。
在调用 Truncate 后,我等待 X 秒并检查控制台管理,结果集上的对象编号为“0”时也会发生错误。
我必须等待几分钟(1 到 5 分钟)才能确保 运行 问题已解决。
集群有3个节点,副本因子为2。SSD持久化
我正在使用 NuGet C# Aerospike.Client v 3.4.4
运行单个本地节点(docker,在内存中)上的进程没有给出任何错误。
我如何知道 Truncate() 进程(其背后的删除操作)何时完全终止并且我可以安全地使用 Set?
[解决方案]
正如建议的那样,我们的开发人员检查了时间跨度同步。他发现 NTP 未在机器映像上启用(错误地)。
启用它。再次测试。没有更多的错误。
谢谢,
亚历克斯
听起来像是跨节点时间同步的潜在问题,请确保您正确设置了 ntp...这是我目前唯一的猜测,尤其是当您提到它在单个节点上工作时。 truncate 命令将捕获当前时间(如果您未指定时间)并将使用它来防止写入 'prior' 到该时间的记录被写入。检查(从我的头顶开始,对不起,如果不完全是这个)/opt/aerospike/smd/truncate.smd 以查看每个节点上截断命令的时间戳并检查不同节点之间的时间。
[感谢@kporter 的评论。所以时间在所有 truncate.smd 文件中都是相同的,但是机器之间的时间差异仍然会导致对某些节点的写入失败]
当我尝试使用 Aerospike 客户端 Write() 时,出现此错误:
22 AS_PROTO_RESULT_FAIL_FORBIDDEN
仅当在 Truncate() 之后调用 Write 操作且仅在特定键上时才会发生错误。 我试过:
- 更改密钥类型(字符串、长、小数字、大数字)
- 更改传递的密钥类型(值、长、字符串)
- 更改 WritePolicy 的重试次数
- 在每次写入前添加延迟(200ms、500ms)
- 生成全新的密钥 (GUID.NewGuid().ToString())
None 解决了这个问题,所以我认为唯一的原因是截断操作。
系统性错误;对于同一组键,完全在相同的键上失败。
在调用 Truncate 后,我等待 X 秒并检查控制台管理,结果集上的对象编号为“0”时也会发生错误。
我必须等待几分钟(1 到 5 分钟)才能确保 运行 问题已解决。
集群有3个节点,副本因子为2。SSD持久化
我正在使用 NuGet C# Aerospike.Client v 3.4.4
运行单个本地节点(docker,在内存中)上的进程没有给出任何错误。
我如何知道 Truncate() 进程(其背后的删除操作)何时完全终止并且我可以安全地使用 Set?
[解决方案]
正如建议的那样,我们的开发人员检查了时间跨度同步。他发现 NTP 未在机器映像上启用(错误地)。
启用它。再次测试。没有更多的错误。
谢谢,
亚历克斯
听起来像是跨节点时间同步的潜在问题,请确保您正确设置了 ntp...这是我目前唯一的猜测,尤其是当您提到它在单个节点上工作时。 truncate 命令将捕获当前时间(如果您未指定时间)并将使用它来防止写入 'prior' 到该时间的记录被写入。检查(从我的头顶开始,对不起,如果不完全是这个)/opt/aerospike/smd/truncate.smd 以查看每个节点上截断命令的时间戳并检查不同节点之间的时间。
[感谢@kporter 的评论。所以时间在所有 truncate.smd 文件中都是相同的,但是机器之间的时间差异仍然会导致对某些节点的写入失败]