SOLR 4.6.0通过CLI索引并发问题-org.apache.SOLR.common.SolrException:为



我有一个在Tomcat中运行的web应用程序,带有SQL数据库和SOLR后端。

任务是实现一个独立的增强版本的网络应用程序触发的功能。现有的Webapp版本包括从SQL数据库(也存在于SOLR中(中查询特定产品,并在SOLR引擎中对其进行重新索引/更新。

我正在通过CLI部署的JAR文件中运行一个主类,如下所示:

java -Dxxx.base=/usr/local/xxx -cp "xxxutils-4.12-SNAPSHOT.jar:/usr/local/tomcat/lib/servlet-api.jar:/usr/local/tomcat/conf:/usr/local/xxx/conf:*" org.sam.xxx.utils.SolrReIndexExec

我的CLI版本与web略有不同,它从SQL数据库中查询所有产品,并尝试重新索引所有产品。

我的程序在尝试将文档添加到SOLR时失败,并出现以下错误:

//About to add document to EmbeddedSolrServer  
Exception in thread "main" org.apache.solr.common.SolrException: SolrCore 'XXXX' is not available due to init failure: Index locked for write for core XXXX
at org.apache.solr.core.CoreContainer.getCore(CoreContainer.java:818)
at org.apache.solr.client.solrj.embedded.EmbeddedSolrServer.request(EmbeddedSolrServer.java:110)
at org.apache.solr.client.solrj.request.AbstractUpdateRequest.process(AbstractUpdateRequest.java:117)
at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:116)
at org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:102)
at org.test.sam.service.SolrService.addRecordToSolrCli(SolrService.java:270)
at org.test.sam.service.SolrService.addProductToSolrCli(SolrService.java:517)
at org.test.sam.function.ReIndexProductService.reIndexAllProducts(ReIndexProductService.java:106)
at org.test.sam.utils.SolrReIndexExec.<init>(SolrReIndexExec.java:39)
at org.test.sam.utils.SolrReIndexExec.main(SolrReIndexExec.java:52)
Caused by: org.apache.solr.common.SolrException: Index locked for write for core XXXX
at org.apache.solr.core.SolrCore.<init>(SolrCore.java:834)
at org.apache.solr.core.SolrCore.<init>(SolrCore.java:625)
at org.apache.solr.core.CoreContainer.createFromLocal(CoreContainer.java:557)
at org.apache.solr.core.CoreContainer.create(CoreContainer.java:592)
at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:271)
at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:263)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.lucene.store.LockObtainFailedException: Index locked for write for core XXXX
at org.apache.solr.core.SolrCore.initIndex(SolrCore.java:491)
at org.apache.solr.core.SolrCore.<init>(SolrCore.java:755)
... 11 more
-----------------------------------------------------------------------

经过一番调查。我看到一些帖子建议如下:

  1. 在solrConfig.xml中将lockType更改为simple,潜在的修复没有什么区别
  2. 删除write.lock文件/usr/local/XXXX/Data/solr/XXXX/Data/index/write.lock并重新运行JAR会导致以下错误:

线程中的异常";主";org.apache.solr.common.SolrException:由于初始化失败,SolrCore"XXXX"不可用:打开新搜索器时出错网址:org.apache.solr.core.CoreContainer.getCore(CoreContainer.java:818(网址:org.apache.solr.client.solrj.embedded.EmbeddedSolrServer.request(EmbeddedSolrServer.java:110(网址:org.apache.solr.client.solrj.request.AbstractUpdateRequest.produce(AbstractUpdateRequest.java:117(网址:org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:116(网址:org.apache.solr.client.solrj.SolrServer.add(SolrServer.java:102(网址:org.test.sam.service.SolrService.addRecordToSolrCli(SolrService.java:270(网址:org.test.sam.service.SolrService.addProductToSolrCli(SolrService.java:517(网址:org.test.sam.function.ReIndexProductService.reIndexAllProducts(ReIndexProductService.java:106(网址:org.test.sam.utils.SolrReiIndexExec.(SolrReIndexExec.java:39(网址:org.test.sam.utils.SolrReIndexExec.main(SolrREIndixExec.java:52(导致原因:org.apache.solr.common.SolrException:打开新搜索器时出错网址:org.apache.solr.core.SolrCore。(SolrCore.java:834(网址:org.apache.solr.core.SolCore.(SolrCore.java:625(网址:org.apache.solr.core.CoreContainer.createFromLocal(CoreContainer.java:557(网址:org.apache.solr.core.CoreContainer.create(CoreContainer.java:592(网址:org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:271(网址:org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:263(位于java.util.concurrent.FFutureTask.run(FutureTask.java:266(位于java.util.concurrent.Executors$RunnableAdapter.call(Executitors.java:511(位于java.util.concurrent.FFutureTask.run(FutureTask.java:266(位于java.util.concurrent.ThreadPoolExecutiator.runWorker(ThreadPoolExecutiator.java:1149(位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624(在java.lang.Thread.run(线程.java:748(导致原因:org.apache.solr.common.SolrException:打开新搜索器时出错网址:org.apache.solr.core.SolCore.openNewSearcher(SolrCore.java:1477(网址:org.apache.solr.core.SolCore.getSearcher(SolrCore.java:1589(网址:org.apache.solr.core.SolrCore。(SolrCore.java:821(…还有11个由:org.apache.locene.store.LockObtainFailedException引起:锁获取超时:NativeFSLock@/usr/local/pm6/Data/solr/XXXX/Data/index/write.Lock网址:org.apache.locene.store.Lock.geoure(Lock.java:84(网址:org.apache.locene.index.IndexWriter。(IndexWriter.java:702(网址:org.apache.solr.update.SolrIndexWriter。(SolrIndexWriter.java:77(网址:org.apache.solr.update.SolrIndexWriter.create(SolrIndexWriter.java:64(网址:org.apache.solr.update.DefaultSolrCoreState.createMainIndexWriter(DefaultSolrCorsState.java:267(网址:org.apache.solr.update.DefaultSolrCoreState.getIndexWriter(DefaultSolrCorsState.java:110(网址:org.apache.solr.core.SolCore.openNewSearcher(SolrCore.java:1440(…还有13个

我们的SOLR设置是每台机器每个实例一个SOLR Core。我认为根本原因是SOLR实例是通过webapp初始化的,我正试图通过CLI访问它。理想情况下,我希望使用Web应用程序创建的相同实例。

以下是我通过CLI:创建solr服务器的代码

//Gets the solr server. 
public synchronized static EmbeddedSolrServer getSolrServerCli() {
String basePath = "/usr/local/xxx/Data/solr";
CoreContainer container = new CoreContainer(basePath);
container.load();
return new EmbeddedSolrServer(container, "XXXX");
}

//Then add document
EmbeddedSolrServer server = SolrService.getSolrServerCli();
UpdateResponse x = server.add(doc);

任何想法都将不胜感激。感谢

我的解决方案使用现有的web应用程序入口点与SOLR索引交互。我已经实现了一个通过CLI触发的独立应用程序,它通过rest客户端调用servlet。servlet反过来使用服务类与servlet上下文中的SOLR索引进行交互。因此避免了并发问题。

有关更多详细信息,请参阅我的帖子。

如何改进我的Java应用程序,将数百万条记录从MariaDB数据库迁移到SOLR服务器

@MatsLindh是我的设计伙伴。谢谢朋友。

最新更新