2014-09-03 22 views
3

當我從Gradle任務運行它們時,我的集成測試失敗。如何修復LockObtainFailedException:鎖定獲取超時?

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:鎖定獲取超時:[email protected]/opt/solr/example/solr/collection1/data/index/write.lock

當我直接在Intellij中運行集成測試,測試運行成功。這是我的嵌入式服務器的bean定義。我添加了destroyMethod並且沒有任何效果。

@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(); 
} 

這裏是日誌。一切似乎都在正確關閉。

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** [email protected] 
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 Mint的17
  • 的Solr 4.9.0
  • Solr的測試框架4.9.0
  • 甲骨文的Java 1.7
  • 春數據的Solr 1.2.2.RELEASE
  • IntelliJ 13.1.4
  • 搖籃1.12
  • 測試是在斯波克

任何幫助將不勝感激發展。謝謝!

回答

-1

好了,我可以通過在solrconfig.xml中的文件改變

<unlockOnStartup>true</unlockOnStartup> 

來解決該問題。

2

我遇到了與我的測試相同的事情,但unlockOnStartup標誌不適用於我。我結束了換鎖的類型(和離開unlockOnStartup註釋掉):

<lockType>${solr.lock.type:single}</lockType> 
<!--<unlockOnStartup>true</unlockOnStartup>--> 

的默認鎖型(天然)的說明讓我覺得,我不把服務器關閉測試運行,但我之間cleany一直沒能找到它尚未:(

  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. 
0

剛剛有了一個類似的問題,並得到它固定。

我用我的單元測試EmbeddedSolrServer和動態運行時創建新的內核。

創建CoreContainer時,請確保在測試後調用shutdown()。

還要確保所有SolrCore實例在測試後關閉。

調用coreContainer.create(CoreDescriptor, name, ...)打開一個SolrCore,您必須手動關閉它。

通過傳遞coreName創建EmbeddedSolrServer時,SolrCore未打開!對於每個請求/操作,打開和關閉由EmbeddedSolrServer處理。

相關問題