具有多个内容的应用程序以及每个具有多个文档的内容都抛出了"ClusterSearcher应该有一个顶级分派“。部署在包含多个内容节点的多节点群集上时。在具有单个内容节点的单节点群集上也是如此。
使用Vespa版本: 7.51.13
由: java.lang.IllegalStateException: ClusterSearcher应具有顶级调度导致的构造“”com.yahoo.prelude.cluster.ClusterSearcher in acme“”时出现com.yahoo.container.di.componentgraph.core.ComponentNode$ComponentConstructorException:错误。“”
= services.xml =
<?xml version="1.0" encoding="utf-8" ?><admin version="2.0">
<adminserver hostalias="admin0"/>
<configservers>
<configserver hostalias="admin0"/>
</configservers>
</admin>
<container id="container" version="1.0">
<config name="search.config.qr-start">
<jvm>
<heapSizeAsPercentageOfPhysicalMemory>50</heapSizeAsPercentageOfPhysicalMemory>
</jvm>
</config>
<document-api />
<http>
<server id="stateless1" port="8080">
</server>
</http>
<search>
<chain id="default" inherits="vespa">
<searcher id="com.acme.search.CatalogSearcher" bundle="sth-search">
<config name="com.acme.search.Searcher">
<redirectsFile>redirects.txt</redirectsFile>
<autoCorrectAPI>https://apps02.acme.com:9815/search/</autoCorrectAPI>
<connectionTimeout>250</connectionTimeout>
<connectionRequestTimeout>250</connectionRequestTimeout>
<socketTimeout>250</socketTimeout>
</config>
</searcher>
</chain>
</search>
<nodes jvmargs="-verbose:gc">
<node hostalias="stateless0"/>
<node hostalias="stateless1"/>
</nodes>
</container>
<content id="sth" version="1.0">
<redundancy>2</redundancy>
<documents>
<document type="sth" mode="index" />
</documents>
<nodes>
<node hostalias="content0" distribution-key="0"/>
<node hostalias="content1" distribution-key="1"/>
</nodes>
</content>
<content id="thesaurus" version="1.0">
<redundancy>2</redundancy>
<documents>
<document type="thesaurus" mode="index"/>
</documents>
<nodes>
<node hostalias="content0" distribution-key="0"/>
<node hostalias="content1" distribution-key="1"/>
</nodes>
</content>
<content id="acme" version="1.0">
<redundancy>2</redundancy>
<documents>
<document type="vc_products" mode="index" />
<document type="vc_thesaurus" mode="index"/>
</documents>
<nodes>
<node hostalias="content0" distribution-key="0"/>
<node hostalias="content1" distribution-key="1"/>
</nodes>
</content>
发布于 2019-06-21 19:55:18
在注释中,不是在实际部署到多个节点时,而是在单元测试中实例化一个模拟应用程序实例时,如在Application.fromApplicationPackage(...)中。
这样做的原因是application不能完全模拟完整的应用程序,只能模拟无状态容器部分。在这个设置中实例化的ClusterSearcher抱怨它看不到下游的任何真正的内容集群(这是正确的),它不知道它是在模拟的设置中创建的。
出于这个原因,您需要为单元测试创建特殊的services.xmls,因为您在生产中使用的as通常会出现这样的问题。使用application可以很好地测试一组组件的特定功能,但不能对真正的生产应用程序进行单元测试。
我们希望通过模拟应用程序内部的组件集群来改善这一点,但目前还没有人在做这件事。如果你想尝试一下,代码是用https://github.com/vespa-engine/vespa/tree/master/application编写的
https://stackoverflow.com/questions/56658523
复制相似问题