google-cloud-platform - 如何重试已中止的 Spanner 提交?
问题描述
在 Spanner 文档中Commit()
,它说:
提交可能会返回一个 ABORTED 错误。这可能随时发生;通常,原因是与并发事务冲突。但是,它也可能由于各种其他原因而发生。如果 Commit 返回 ABORTED,调用者应该从头开始重新尝试事务,重新使用相同的会话。
两个问题:
如果事务被中止,我是否必须重新运行从事务开始执行的所有语句才能重试?或者只是重试
commit()
一次就足够了?如何在 Spanner 上重现中止的提交以验证我的重试逻辑是否正确?
解决方案
我建议使用官方 Cloud Spanner 客户端库。它们有各种事务运行器抽象,可以对错误做出适当的反应,包括重试逻辑。
如果事务中止,则应重试整个事务。
Cloud Spanner 没有提供强制中止事务的直接方法。您可以设置两个事务来执行以下操作:
- 开始交易 T1
- 开始交易 T2
- T1 读取第 1 行
- T2 读取第 1 行
- T1 提交(写入第 1 行)将成功
- T2 提交(写入第 1 行)将中止
推荐阅读
- jxbrowser - 如何为 JX 浏览器设置脚本超时
- c# - NAudio - 将任何 wav 文件格式转换为原始 PCM
- html - 为什么css文件不适用于html文件 - Django
- android - 将 Android Studio 从 3.1.3 版更新到 3.1.4 版时出现的问题
- javascript - 将部分html页面存储在变量中
- cassandra - 我们如何在 Cassandra 中进行空间查询?Cassandra 是否有任何 GIS 扩展?
- css - SCSS - 检查字体系列的变量
- apache-spark - 如何强制 Spark/Hive 创建具有自定义权限的 task_* 目录
- python - NLP:是否有任何模型可以生成具有自定义长度的句子嵌入?
- xamarin.forms - 如何在 HttpClient Post 中发送 XML 数据