规范错误代码
Kumo产品是一个庞大的体系,基于MACH理念,设计多层次的API,为了规范这些返回的状态,我们尽量减少错误码的数量,减少使用的复杂性。
Status 使用 turbo::StatusCode 返回错误,这是一个枚举类型指示没有错误(正常)或出现错误情况。
错误代码
这是一个错误码表,您可以使用它来选择适当的错误。选最多的适用的特定错误代码。
| 条件 | 错误码 |
|---|---|
| 请求成功 | OK |
| 请求被取消,通常是由调用者取消 | CANCELLED |
| 错误请求参数 | INVALID_ARGUMENT |
| 操作未在规定期限内完成 | DEADLINE_EXCEEDED |
| 请求的实体不存在 | NOT_FOUND |
| 正在创建的实体已经存在 | ALREADY_EXISTS |
| 调用者没有执行该操作的权限 | PERMISSION_DENIED |
| 无法验证来电者身份 | UNAUTHENTICATED |
| 某些基础设施资源耗尽(配额、服务器容量等) | RESOURCE_EXHAUSTED |
| 系统未处于操作所需的状态 | FAILED_PRECONDITION |
| 操作被中止,通常是由于并发问题(例如定序器检查失败、事务中止等)。 | ABORTED |
| 出现暂时性错误 | UNAVAILABLE |
| 客户端迭代得太远,应该停止 | OUT_OF_RANGE |
| 请求的操作没有实现 | UNIMPLEMENTED |
| 严重的内部不变量被破坏(即值得错误或中断报告) | INTERNAL |
| 不可恢复的数据丢失或损坏 | DATA_LOSS |
| 无法确定更具体的错误代码 | UNKNOWN |
info
在“FAILED_PRECONDITION”、“ABORTED”和“UNAVAILABLE”之间进行选择
是微妙的,特别是对于调用者应该重试的策略
使用。一些可能对服务实施者有所帮助的准则:* 如果客户端可以仅重试失败的调用,请使用“UNAVAILABLE”。* 如果客户端应该在更高的事务级别重试,则使用“ABORTED”(例如当客户端指定的测试和设置失败时,表明客户端
应重新启动读取-修改-写入序列)。* 如果客户端不应重试,直到系统恢复正常,请使用“FAILED_PRECONDITION”
状态已被明确修复。例如,如果“rmdir”失败,因为
目录非空,应该返回 FAILED_PRECONDITION
客户端不应重试,除非文件已从
目录。* 如果输入值符合以下条件,请使用“INVALID_ARGUMENT”(而不是“OUT_OF_RANGE”)
永远不会被接受。应为以下输入保留“OUT_OF_RANGE”
仅由于当前系统状态而超出范围。