Java 如何找出Firestore中事务失败的根本原因?
如果Firestore事务失败,它将抛出Java 如何找出Firestore中事务失败的根本原因?,java,firebase,google-cloud-firestore,Java,Firebase,Google Cloud Firestore,如果Firestore事务失败,它将抛出FirestoreException,该异常仅表示“由于重试次数过多,事务被取消。” 即使我将退休人数设置为1,也没有根本原因或任何其他线索 有可能找到根本原因吗?如果允许编辑,您应该检查firebase控制台firestore规则。。。创建新的编辑权限 service cloud.firestore { match /databases/{database}/documents { // Anyone can read a p
FirestoreException
,该异常仅表示“由于重试次数过多,事务被取消。”
即使我将退休人数设置为1,也没有根本原因或任何其他线索
有可能找到根本原因吗?如果允许编辑,您应该检查firebase控制台firestore规则。。。创建新的编辑权限
service cloud.firestore {
match /databases/{database}/documents {
// Anyone can read a product, only authorized
// users can create or update. Deletes are not allowed.
match /products/{productId} {
allow read: if true;
allow create, update: if request.auth.uid != null;
}
}
}
根据a,显示消息“由于重试次数过多,交易被取消”。只能在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。
事务大小取决于文档和索引项的大小
由事务修改。对于删除操作,这包括
目标文档的大小和删除的索引项的大小
作为对这次行动的回应
要调试此问题,我强烈建议您使用以下来源进行深入阅读——如果没有您的部件中的代码片段,很难帮助您实现解决方案: