YugabyteDB YSQL 出现 "Already present: Duplicate request" 个错误
Getting "Already present: Duplicate request" errors in YugabyteDB YSQL
[用户在 YugabyteDB Community Slack 上发布的问题]
在 YSQL 层发送大量并发请求,我们收到 Already present: Duplicate request, XX000
错误。这些重试安全吗?
以下是正在进行的可重试案例列表:
如果您在交易过程中得到 Duplicate Request
,那么可以安全地重试。
如果Duplicate Request
是由独立语句生成的,那么它
可能执行了原始语句并将其应用于数据库。
所以安全取决于查询和应用。
Catalog Version Mismatch
— 这实际上是一个 txn 冲突,但特别是与 DDL。已经存在更改错误代码的问题:https://github.com/yugabyte/yugabyte-db/issues/8597.
带有 Try Again
前缀的任何错误 — 但这些可能在内部已经是 re-mapped/retried。
Leader not ready to serve requests.
和 Leader does not have a valid lease.
也可以重试。
TimedOut
请求在某些情况下也可以重试(例如纯读取和事务块中的操作),但对于单行写入不安全。
通常,对于非 XX000 错误代码,适用与普通 Postgres 相同的规则。 (例如 40001
是可重试的——我们应该已经将 YB transaction errors
和 read restart required
错误映射到该错误代码。
对于 XX000
(内部错误),有一些特定错误应该可以安全重试。
我们已经在内部将一些错误重新映射到 YSQL/PG 错误代码(如上所述),通常我们的目标是适当地做到这一点。
内部错误代码的完整列表位于:https://github.com/yugabyte/yugabyte-db/blob/master/src/yb/util/status.h#L149
[用户在 YugabyteDB Community Slack 上发布的问题]
在 YSQL 层发送大量并发请求,我们收到 Already present: Duplicate request, XX000
错误。这些重试安全吗?
以下是正在进行的可重试案例列表:
如果您在交易过程中得到
Duplicate Request
,那么可以安全地重试。如果
Duplicate Request
是由独立语句生成的,那么它 可能执行了原始语句并将其应用于数据库。 所以安全取决于查询和应用。Catalog Version Mismatch
— 这实际上是一个 txn 冲突,但特别是与 DDL。已经存在更改错误代码的问题:https://github.com/yugabyte/yugabyte-db/issues/8597.带有
Try Again
前缀的任何错误 — 但这些可能在内部已经是 re-mapped/retried。Leader not ready to serve requests.
和Leader does not have a valid lease.
也可以重试。TimedOut
请求在某些情况下也可以重试(例如纯读取和事务块中的操作),但对于单行写入不安全。
通常,对于非 XX000 错误代码,适用与普通 Postgres 相同的规则。 (例如 40001
是可重试的——我们应该已经将 YB transaction errors
和 read restart required
错误映射到该错误代码。
对于 XX000
(内部错误),有一些特定错误应该可以安全重试。
我们已经在内部将一些错误重新映射到 YSQL/PG 错误代码(如上所述),通常我们的目标是适当地做到这一点。
内部错误代码的完整列表位于:https://github.com/yugabyte/yugabyte-db/blob/master/src/yb/util/status.h#L149