首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何修复LockObtainFailedException:锁获得超时?

如何修复LockObtainFailedException:锁获得超时?
EN

Stack Overflow用户
提问于 2014-09-03 16:52:23
回答 3查看 6.4K关注 0票数 5

当我从一个Gradle任务运行它们时,我的集成测试失败了。

代码语言:javascript
复制
org.springframework.data.solr.UncategorizedSolrException: **SolrCore 'collection1' is not available due to init failure: Error opening new searcher; nested exception is org.apache.solr.common.SolrException: SolrCore 'collection1' is not available due to init failure: Error opening new searcher**
at org.springframework.data.solr.core.SolrTemplate.execute(SolrTemplate.java:122)
at org.springframework.data.solr.core.SolrTemplate.saveDocuments(SolrTemplate.java:206)
at org.springframework.data.solr.core.SolrTemplate.saveDocuments(SolrTemplate.java:201)

org.apache.lucene.store.LockObtainFailedException:锁获得超时: NativeFSLock@/opt/solr/example/solr/collection1/data/index/write.lock

当我在Intellij中直接运行集成测试时,测试将成功运行。下面是我对嵌入式服务器的bean定义。我加入了destroyMethod,但没有效果。

代码语言:javascript
复制
 @Bean(destroyMethod = "shutdown")
public SolrServer solrServer(org.apache.commons.configuration.Configuration configuration)  {

    EmbeddedSolrServerFactory factory;
    try {
        factory = new EmbeddedSolrServerFactory(configuration.getString("solr.home"));
    } catch (ParserConfigurationException | IOException | SAXException e) {
        String errorMsg = "Encountered an exception while initializing the SolrServer bean.";
        log.error(errorMsg, e);
        throw new OrdersClientRuntimeException(errorMsg, e);
    }
    return factory.getSolrServer();
}

这是原木。一切似乎都在正确地关闭。

代码语言:javascript
复制
2014-09-02 17:32:15.757 thread="Thread-6" level="DEBUG" logger="o.s.b.f.s.DisposableBeanAdapter" - **Invoking destroy method 'shutdown' on bean with name 'solrServer'**
2014-09-02 17:32:15.759 thread="Thread-8" level="DEBUG" logger="o.s.b.f.s.DefaultListableBeanFactory" - Retrieved dependent beans for bean 'solrDocumentRepository': [net.nike.orders.client.search.repository.DocumentRepositorySpec]
2014-09-02 17:32:15.759 thread="Thread-6" level="INFO " logger="org.apache.solr.core.CoreContainer" - **Shutting down CoreContainer instance=179265569**
2014-09-02 17:32:15.760 thread="Thread-8" level="DEBUG" logger="o.s.b.f.s.DisposableBeanAdapter" - **Invoking destroy method 'shutdown' on bean with name 'solrServer'**
2014-09-02 17:32:15.760 thread="Thread-8" level="INFO " logger="org.apache.solr.core.CoreContainer" - **Shutting down CoreContainer instance=1604485329**
2014-09-02 17:32:15.762 thread="Thread-6" level="INFO " logger="org.apache.solr.core.SolrCore" - [collection1]  **CLOSING SolrCore** org.apache.solr.core.SolrCore@28da98e2
2014-09-02 17:32:15.769 thread="Thread-8" level="DEBUG" logger="o.a.h.i.c.PoolingClientConnectionManager" - **Connection manager is shutting down**
2014-09-02 17:32:15.769 thread="Thread-6" level="INFO " logger="**org.apache.solr.update.UpdateHandler" - closing** DirectUpdateHandler2{commits=23,autocommit maxTime=15000ms,autocommits=0,soft autocommits=2,optimizes=0,rollbacks=0,expungeDeletes=0,docsPending=0,adds=0,deletesById=0,deletesByQuery=0,errors=0,cumulative_adds=33,cumulative_deletesById=32,cumulative_deletesByQuery=0,cumulative_errors=0,transaction_logs_total_size=5302,transaction_logs_total_number=10}
2014-09-02 17:32:15.771 thread="Thread-8" level="DEBUG" logger="o.a.h.i.c.PoolingClientConnectionManager" - Connection manager shut down
2014-09-02 17:32:15.773 thread="Thread-8" level="DEBUG" logger="o.a.h.i.c.PoolingClientConnectionManager" - Connection manager is shutting down
2014-09-02 17:32:15.774 thread="Thread-8" level="DEBUG" logger="o.a.h.i.c.PoolingClientConnectionManager" - Connection manager shut down

这是我的环境信息:

  • Linux 17
  • Solr 4.9.0
  • Solr测试框架4.9.0
  • Oracle Java 1.7
  • Spring数据Solr 1.2.2.
  • IntelliJ 13.1.4
  • 1.12级
  • 测试是在斯波克开发的

任何帮助都将不胜感激。谢谢!

EN

回答 3

Stack Overflow用户

发布于 2014-10-04 20:33:51

我在测试中遇到了同样的情况,但是unlockOnStartup标志对我不起作用。我最后更改了锁类型(并将unlockOnStartup注释掉了):

代码语言:javascript
复制
<lockType>${solr.lock.type:single}</lockType>
<!--<unlockOnStartup>true</unlockOnStartup>-->

默认锁类型(本机)上的注意事项让我认为我没有在测试运行之间关闭cleany,但是我还没有找到它:(

代码语言:javascript
复制
         native = NativeFSLockFactory - uses OS native file locking.
                  Do not use when multiple solr webapps in the same
                  JVM are attempting to share a single index.
票数 2
EN

Stack Overflow用户

发布于 2015-03-11 10:26:08

只是有个类似的问题把它修好了。

我在单元测试中使用EmbeddedSolrServer,并在运行时动态创建新的核心。

在创建CoreContainer时,一定要在测试之后调用When ()。

还请确保所有SolrCore实例在测试后都会关闭。

调用coreContainer.create(CoreDescriptor, name, ...)将打开一个必须手动关闭的SolrCore。

通过传递EmbeddedSolrServer创建coreName时,不会打开SolrCore!打开和关闭由EmbeddedSolrServer对每个请求/操作进行处理。

票数 0
EN

Stack Overflow用户

发布于 2014-09-11 16:55:29

好吧,所以我可以通过改变

代码语言:javascript
复制
<unlockOnStartup>true</unlockOnStartup>

在solrconfig.xml文件中。

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

https://stackoverflow.com/questions/25649737

复制
相关文章

相似问题

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