如果Firestore事务失败,它将抛出FirestoreException,只表示“由于重试次数过多而取消了事务”。
即使我将退休人数设置为1,也没有根本原因或任何其他线索。
有可能找到根本原因吗?
发布于 2021-01-03 21:50:58
据文档称,带有消息的FirestoreException“由于重试次数过多而取消了事务”。只能在private void runTransactionAttempt下找到
private void maybeRetry() {
if (attemptsRemaining > 0) {
span.addAnnotation("retrying");
runTransactionAttempt(
transactionCallback,
resultFuture,
new TransactionOptions(
attemptsRemaining, options.getExecutor(), transaction.getTransactionId()),
span);
} else {
span.setStatus(TOO_MANY_RETRIES_STATUS);
rejectTransaction(
FirestoreException.serverRejected(
Status.ABORTED, "Transaction was cancelled because of too many retries."));
}
}正如您所看到的,在尝试运行事务和/或批写时,您遇到了重复的异常。在查看[消]火基文件之后,您可以看到三个导致事务失败的主要原因:
1.事务包含写操作后的读操作。读取操作必须总是在任何写操作之前。 2.事务读取在事务之外修改的文档。在这种情况下,事务会自动再次运行。 3.事务被重试了有限次。事务超过了10 MiB的最大请求大小。事务大小取决于事务修改的文档和索引项的大小。对于删除操作,这包括目标文档的大小和响应该操作而删除的索引项的大小。
为了调试这个问题,我强烈建议进一步阅读的以下来源--如果您的部分没有代码片段,就很难帮助您实现解决方案:
https://stackoverflow.com/questions/57131045
复制相似问题