1

我看到一些与客观化和最终一致性相关的奇怪行为。我在运行一些向 App Engine Java 开发服务器发出 HTTP 请求的集成测试时注意到了这种行为。

由于我希望这些测试在针对真实应用程序引擎环境运行时也能正常工作,因此它们通过重复请求来处理最终一致性,这些请求根据最终一致的查询返回结果。

我之前不小心将 ObjectifyFilter 放在 web.xml 中的错误位置,因此 ObjectifyFilter 无法运行。现在我将它移到过滤器链的开头,以便它实际运行,我所有的查询似乎总是返回一致的结果!没有更多的最终一致性,就是!

例如,一项测试执行以下操作:

  1. 添加具有某些用户名的用户的请求
  2. 尝试使用用户名和密码授权用户的请求。这将对具有给定用户名的用户进行全局查询,并且查询应该最终保持一致,但它始终会找到用户实体。

我不知道发生了什么。

更多信息:

  • 我检查了 ofy().toString 为每个请求返回不同的值。
  • 我正在使用 -Ddatastore.default_high_rep_job_policy_unapplied_job_pct=50
  • Appengine SDK 版本 1.8.6
  • 我正在事务中进行所有写入
4

1 回答 1

0

禁用测试中的最终一致性。添加重试和休眠不会改变代码的逻辑,它只会使测试复杂化。尝试围绕最终一致的行为进行测试是没有意义的。请注意它的存在。

我不知道您的具体问题的答案,因为它实际上与测试工具的具体行为有关。仔细阅读单元测试指南;未应用的作业应用在奇数点,例如第二次运行查询。这只是服务器环境最终一致行为的一个非常粗略的近似。

于 2013-11-09T08:22:20.873 回答