【发布时间】:2014-12-31 23:50:54
【问题描述】:
我正在尝试在最恶劣的条件下测试我的应用,以确保最终的一致性。看来我可以使用两种方法:
方法 A1:setDefaultHighRepJobPolicyUnappliedJobPercentage(100)
private final LocalServiceTestHelper helper =
new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()
.setDefaultHighRepJobPolicyUnappliedJobPercentage(100));
来源:https://cloud.google.com/appengine/docs/java/tools/localunittesting#Writing_HRD_Datastore_Tests
方法 A2:CustomHighRepJobPolicy
private static final class CustomHighRepJobPolicy implements HighRepJobPolicy {
@Override
public boolean shouldApplyNewJob(Key arg0) {
return false;
}
@Override
public boolean shouldRollForwardExistingJob(Key arg0) {
return false;
}
}
private final LocalServiceTestHelper helper =
new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()
.setAlternateHighRepJobPolicyClass(CustomHighRepJobPolicy.class));
来源:https://groups.google.com/forum/#!topic/google-appengine-java/JLu29LTZPV4(来自 Broc Seib 的评论)
问题 A
这两种方法似乎都产生了从不更新任何索引的预期效果,因此没有祖先的查询永远不会返回结果。但是这两种方法有什么区别吗?
问题 B
当测试相反的情况时(没有最终的一致性,索引会立即更新),似乎有三种方法......是否应该有任何区别?
方法 B1:setDefaultHighRepJobPolicyUnappliedJobPercentage(0)
private final LocalServiceTestHelper helper =
new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()
.setDefaultHighRepJobPolicyUnappliedJobPercentage(0));
来源:https://cloud.google.com/appengine/docs/java/tools/localunittesting#Writing_HRD_Datastore_Tests
方法 B2:CustomHighRepJobPolicy
private static final class CustomHighRepJobPolicy implements HighRepJobPolicy {
@Override
public boolean shouldApplyNewJob(Key arg0) {
return true;
}
@Override
public boolean shouldRollForwardExistingJob(Key arg0) {
return true;
}
}
private final LocalServiceTestHelper helper =
new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()
.setAlternateHighRepJobPolicyClass(CustomHighRepJobPolicy.class));
来源:https://groups.google.com/forum/#!topic/google-appengine-java/JLu29LTZPV4(来自 Broc Seib 的评论)
方法 B3:setApplyAllHighRepJobPolicy
private final LocalServiceTestHelper helper =
new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()
.setApplyAllHighRepJobPolicy());
来源:https://cloud.google.com/appengine/docs/java/tools/localunittesting#Writing_HRD_Datastore_Tests
【问题讨论】:
-
在现实/悲观的负载测试模拟工作负载下测量每个选择怎么样?这将比我们任何人仅仅通过思考就可以更好地回答您的合理怀疑很多! “你不衡量的东西,你就无法管理”和“数据roolz”!
-
谢谢@AlexMartelli。由于这是用于单元测试,因此我不确定要测量什么负载测试。我正在寻找的是了解这两种方法之间的任何不同的副作用,这对我来说可能并不明显。
-
我不知道有什么实质性的区别——这并不意味着没有任何区别(唉,Java 不是我最擅长的领域,所以我可能有一些 Java 特有的微妙之处不知道!),这意味着我会在你的鞋子里做的正是我推荐的——将一些繁重的负载测试工作负载组合在一起,并通过相同的一组单元测试运行它们,只改变策略,看看在测试结果和运行时间方面会发生什么(我希望相同的测试结果和大致相同的运行时间,任何差异都会告诉我我需要深入挖掘的地方)。
-
感谢@AlexMartelli,请随时将其发布为答案,我会接受它,因为没有发布其他答案。
-
现在根据 OP 的要求作为答案发布。
标签: google-app-engine google-cloud-datastore