本页面介绍了 Spanner 错误代码和建议的操作,
处理这些错误。Google API(包括 Spanner)使用
由 google.rpc.Code
定义的规范错误代码。
当 Spanner 请求成功时,API 会返回一个 HTTP
200 OK
状态代码以及响应正文中请求的数据。
当请求失败时,Spanner API 会返回 HTTP
4xx
或 5xx
状态代码,一般标识故障以及
针对导致错误引发的
错误。
响应对象包含单个字段 error
,其值包含以下元素:
元素 | 说明 |
---|---|
code |
HTTP 状态代码,一般用于标识请求失败。 |
message |
有关请求失败的具体信息。 |
status |
Google API 的规范错误代码 (google.rpc.Code )。错误代码中列出了 Spanner API 可能返回的代码。 |
如果采用 application/x-protobuf
内容类型发出的请求导致错误,则将返回一个序列化的 google.rpc.Status
消息作为载荷。
错误代码
要对错误进行分类,推荐的方式是检查
规范错误代码 (google.rpc.Code
)。在 JSON 错误中,此代码显示为
(在 status
字段中)。在 application/x-protobuf
错误中,此代码出现在 code
字段中。
错误代码 | 说明 | 建议采取的操作 |
---|---|---|
ABORTED |
操作已取消,通常是由于定序器检查失败或事务中止等并发问题。表示该请求与另一请求发生冲突。 | 对于非事务性提交: 重试该请求或设计实体结构以减少争用。 对于随事务性提交而发出的请求: 重试整个事务或设计实体结构以减少争用。 |
ALREADY_EXISTS |
客户端尝试创建的实体已存在(例如,插入具有现有主键的行)。 | 在解决问题之前,请勿重试。 |
CANCELLED |
操作已取消(通常是被调用者取消)。 | 重试该操作。 |
DEADLINE_EXCEEDED |
截止期限已过,但操作尚未完成。 | 调查截止日期是否足够。请使用与回复有用的实际时间相对应的截止时间。请注意,对于更改系统状态的操作,即使操作已成功完成,也可能会返回错误。 如需查看相关提示,请参阅对“在截止日期已过”错误进行问题排查。 |
FAILED_PRECONDITION |
由于未满足请求的前提条件,操作被拒绝。错误响应中的消息字段提供了未满足的先决条件的相关信息。例如,从超过时间戳过时时间上限的时间戳中读取或查询。 | 在解决问题之前,请勿重试。 |
INTERNAL |
服务器返回了一个错误。底层系统所期望的一些不变量已损坏。 | 除非您了解错误的具体情况和原因,否则请勿重试。 |
INVALID_ARGUMENT |
客户端指定的值无效。错误响应中的消息字段提供了无效值的相关信息。 | 在解决问题之前,请勿重试。 |
NOT_FOUND |
表示某些请求的实体(例如更新实体或查询表或列)不存在。 | 在解决问题之前,请勿重试。 |
OUT_OF_RANGE |
尝试执行的操作已超出有效范围。 | 在解决问题之前,请勿重试。 |
PERMISSION_DENIED |
该用户无权发出请求。 | 在解决问题之前,请勿重试。 |
RESOURCE_EXHAUSTED |
部分资源已用尽。这可能是因为项目超出了其配额,或者整个文件系统空间不足。 | 确认您没有超出 Spanner 或项目配额。如果您超出配额,请先解决问题,再重试。 否则,请使用指数退避算法重试。 |
UNAUTHENTICATED |
请求没有相应操作的有效身份验证凭据。 | 在解决问题之前,请勿重试。 |
UNAVAILABLE |
服务器不可用。 | 使用指数退避算法重试。请注意,重试执行非幂等操作并非总是安全的。 |
UNIMPLEMENTED |
操作在此服务中未实现或不受支持/未启用。 | 在解决问题之前,请勿重试。 |
UNKNOWN |
服务器返回了未知错误。如果 API 未返回足够错误信息,则引发的错误可能会转换为此错误。 | 检查您的请求是否安全。然后,使用指数退避算法重试。 |