Google 数据存储锁定超时
Google datastore lock timeout
我想知道如果我在 Google 数据存储中 运行 一个事务并且在我无法完成事务的过程中发生某些事情(比如应用程序服务器在等待响应时死机)会发生什么).此时事务将锁定实体。没有 deleting/restarting/etc 我怎么能干净地解锁实体?是否存在任何类型的超时(比如交易是否需要超过 10 秒才能失败)?
根据Google Cloud Datastore documentation、Transactions have a maximum duration of 60 seconds with a 10 second idle expiration time after 30 seconds
。所以他们会超时。
如果服务器死机并且您遇到事务超时,您将返回一个异常。如果您的应用程序终止,那么事务应该只是超时,并且由于事务是原子的,不会保留损坏的数据。
因此,除了在数据存储出现异常时重新发送数据之外,不需要进行任何清理。
是的,t运行sactions 确实会过期。碰巧的是,就在今天,我有一个编程 "oops" 导致 t运行saction 没有正确完成——因此我得到了 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.
我的代码中存在相同的潜在错误(我反应时间太长),两个不同的异常 -- 即一些 "race condition" 关于哪个错误将首先触发,因为两个问题的截止日期相同,均为 60 秒.
顺便说一句,这就是全部 w/Python(一直是我的最爱:-),但是虽然名称等可以改变,但数据存储的底层逻辑在任何 GAE 支持的语言中应该是相同的。
我想知道如果我在 Google 数据存储中 运行 一个事务并且在我无法完成事务的过程中发生某些事情(比如应用程序服务器在等待响应时死机)会发生什么).此时事务将锁定实体。没有 deleting/restarting/etc 我怎么能干净地解锁实体?是否存在任何类型的超时(比如交易是否需要超过 10 秒才能失败)?
根据Google Cloud Datastore documentation、Transactions have a maximum duration of 60 seconds with a 10 second idle expiration time after 30 seconds
。所以他们会超时。
如果服务器死机并且您遇到事务超时,您将返回一个异常。如果您的应用程序终止,那么事务应该只是超时,并且由于事务是原子的,不会保留损坏的数据。
因此,除了在数据存储出现异常时重新发送数据之外,不需要进行任何清理。
是的,t运行sactions 确实会过期。碰巧的是,就在今天,我有一个编程 "oops" 导致 t运行saction 没有正确完成——因此我得到了 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.
我的代码中存在相同的潜在错误(我反应时间太长),两个不同的异常 -- 即一些 "race condition" 关于哪个错误将首先触发,因为两个问题的截止日期相同,均为 60 秒.
顺便说一句,这就是全部 w/Python(一直是我的最爱:-),但是虽然名称等可以改变,但数据存储的底层逻辑在任何 GAE 支持的语言中应该是相同的。