Spanner模拟器-挂交易

问题描述 投票:0回答:2

我们在沙箱环境中使用扳手模拟器。有时,某些事务会挂起,导致以下错误:

Caused by: com.google.api.gax.rpc.AbortedException: io.grpc.StatusRuntimeException: ABORTED: Transaction 37431 aborted due to active transaction 27078. The emulator only supports one transaction at a time.

我们发现在出现此类问题后使扳手模拟器再次工作的唯一方法是重新创建数据库(删除和创建),这非常烦人。

我尝试终止

gcloud spanner databases sessions list --database=db --instance=sand
列出的所有会话,但没有帮助。

有什么方法可以中止/回滚扳手模拟器中挂起的事务吗?

transactions google-cloud-spanner google-cloud-spanner-emulator
2个回答
0
投票

对事务 27078 执行 Rollback RPC 应该可以做到这一点。话虽这么说,但这并不一定简单:

  1. 您使用哪个客户端库/驱动程序?从你发布的错误信息来看,它似乎是Java的。在这种情况下,您可以尝试构造一个
    RollbackRequest
    并在生成的客户端中手动调用 Rollback 方法。
  2. 这如何/何时发生?通常,Java 客户端应自动回滚任何失败的事务。或者您是否使用了常规 Java 客户端以外的其他驱动程序?

0
投票

我在使用 Python Client 时也遇到了这个问题。在深入研究代码后,我发现如果事务中引发异常,则客户端不会关闭该事务。根据我的观察,云 Spanner 可以很好地自行正确关闭这些挂起的事务,但 Spanner 模拟器根本无法做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.