我正在努力遵循《入门》指南中的KuduTestHarness使用指南。我创建了以下简单的测试用例。
import org.apache.kudu.test.KuduTestHarness;
import static org.junit.Assert.assertTrue;
import org.junit.Rule;
import org.junit.Test;
public class DemoTest{
@Rule
public KuduTestHarness harness=new KuduTestHarness();
@Test
public void testDemo(){
assertTrue(true);
}
}
但我在控制台日志中得到了以下错误。
2020-10-07 11:50:01,060 [cluster stderr printer] INFO org.apache.kudu.test.cluster.MiniKuduCluster - E1007 11:50:01.059237 17257 block_cache.cc:99] Block cache capacity exceeds the memory pressure threshold (536870912 bytes vs. 498776800 bytes). This will cause instability and harmful flushing behavior. Lower --block_cache_capacity_mb or raise --memory_limit_hard_bytes.
2020-10-07 11:50:01,060 [cluster stderr printer] INFO org.apache.kudu.test.cluster.MiniKuduCluster - E1007 11:50:01.059262 17257 flags.cc:441] Detected inconsistency in command-line flags; exiting
2020-10-07 11:50:01,100 [main] DEBUG org.apache.kudu.test.cluster.MiniKuduCluster - Response: error {
code: RUNTIME_ERROR
message: "failed to start masters: Unable to start Master at index 0: /tmp/kudu-binary-jar1893943400146501302/kudu-binary-1.13.0-linux-x86_64/bin/kudu-master: process exited with non-zero status 1"
}
我尝试在基础生成器中添加一个标志,但它没有任何影响。新标志不会显示在日志的标志列表中。
import org.apache.kudu.test.cluster.MiniKuduCluster.MiniKuduClusterBuilder;
...
static{
MiniKuduClusterBuilder builder=KuduTestHarness.getBaseClusterBuilder();
builder.addMasterServerFlag("--block_cache_capacity_mb=498776800");
}
...
有人能告诉我正确配置测试线束的正确方向吗。
好吧,我通过阅读源代码自己解决了这个问题。我很困惑为什么MiniKuduCluster的相关javdocs没有在线。
答案是getBaseClusterBuilder((是一个工厂方法,而不是我假设的访问器方法。每次都会得到一个新的生成器,并且在创建新规则实例时,测试线束类将使用一个新生成器,因此此时需要注入自定义生成器。有一个构造函数接受生成器对象。
这段代码展示了如何做到这一点。
public static MiniKuduClusterBuilder builder;
@BeforeClass
public static void classInit(){
builder=KuduTestHarness.getBaseClusterBuilder()
.addMasterServerFlag("--block_cache_capacity_mb=475")
.addTabletServerFlag("--block_cache_capacity_mb=475");
}
@Rule
public KuduTestHarness harness=new KuduTestHarness(builder);
潜在的问题是由于在我的笔记本电脑上使用了内存有限的虚拟机。我对此无能为力,因此在这一点上定制构建器的能力非常有用。