【问题标题】:Spanner emulator - hanging transactionSpanner 模拟器 - 挂起交易
【发布时间】:2020-12-03 12:54:05
【问题描述】:

我们在沙盒环境中使用扳手模拟器。有时会发生某些事务挂起导致以下错误的原因:

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


    【解决方案1】:

    为事务 27078 执行 Rollback RPC 应该这样做。话虽如此,这并不一定很简单:

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

    【讨论】:

    • 感谢您的回答。是的,它是java。我们正在使用spring-cloud-gcp-starter-data-spanner 提供的DatabaseClient (google-cloud-spanner)(但我们不是通过SpannerTemplate 直接使用它)。当它发生时我找不到规则。我们的测试在这个模拟器上运行,并且不时有一个事务挂起。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-29
    • 1970-01-01
    • 2022-08-16
    • 2019-10-03
    • 2021-03-02
    • 1970-01-01
    • 2021-06-25
    相关资源
    最近更新 更多