首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应用程序初始化期间出错: ClusterSearcher应具有顶级调度

应用程序初始化期间出错: ClusterSearcher应具有顶级调度
EN

Stack Overflow用户
提问于 2019-06-19 08:11:21
回答 1查看 68关注 0票数 1

具有多个内容的应用程序以及每个具有多个文档的内容都抛出了"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 =

代码语言:javascript
复制
  <?xml version="1.0" encoding="utf-8" ?>
代码语言:javascript
复制
<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>

EN

回答 1

Stack Overflow用户

发布于 2019-06-21 19:55:18

在注释中,不是在实际部署到多个节点时,而是在单元测试中实例化一个模拟应用程序实例时,如在Application.fromApplicationPackage(...)中。

这样做的原因是application不能完全模拟完整的应用程序,只能模拟无状态容器部分。在这个设置中实例化的ClusterSearcher抱怨它看不到下游的任何真正的内容集群(这是正确的),它不知道它是在模拟的设置中创建的。

出于这个原因,您需要为单元测试创建特殊的services.xmls,因为您在生产中使用的as通常会出现这样的问题。使用application可以很好地测试一组组件的特定功能,但不能对真正的生产应用程序进行单元测试。

我们希望通过模拟应用程序内部的组件集群来改善这一点,但目前还没有人在做这件事。如果你想尝试一下,代码是用https://github.com/vespa-engine/vespa/tree/master/application编写的

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56658523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档