Google数据存储区锁定超时

时间:2015-12-17 23:02:58

标签: google-app-engine transactions google-cloud-datastore

我想知道如果我在Google Datastore内部运行一个事务会发生什么事情,并且在我无法完成事务的过程中发生了一些事情(比如应用服务器在等待响应时死亡)。此时,事务将锁定实体。如何在不删除/重启/ etc的情况下干净地解锁实体?是否存在任何类型的超时(例如,如果事务需要超过10秒才能使其失败)?

2 个答案:

答案 0 :(得分:4)

根据Google Cloud Datastore documentationTransactions have a maximum duration of 60 seconds with a 10 second idle expiration time after 30 seconds。所以他们会自己抽出时间。

如果服务器死机并且您获得了事务超时,您将收到异常。如果你的应用程序死了,那么事务应该只是超时,因为事务是原子的,所以不会保留损坏的数据。

因此,如果您从数据存储区获得异常,那么除了重新发送数据之外,不应该需要清理。

答案 1 :(得分:0)

是的,交易确实到期。事实上,就在今天,我有一个编程" oops"导致事务未正确完成 - 因此我得到了500 HTTP状态,并在日志中记录了一个日志,详细的回溯结束于

BadRequestError: The referenced transaction has expired or is no longer valid

特别是,当我再次运行相同的代码(试图准确理解我做错了什么)时,第二次HTTP 500伴随着以

结尾的追溯
DeadlineExceededError: The overall deadline for responding to the HTTP request was exceeded.

我的代码中存在相同的潜在错误(我花了太长时间才回复),两个不同的例外 - 即一些"竞争条件"关于哪个错误会先触发,因为两个问题的截止日期相等,为60秒。

顺便说一下,这是所有w / Python(总是我最喜欢的:-)但是虽然名称等可以改变,但数据存储的基础逻辑在任何GAE支持的语言中应该是相同的。