Sunspot Solr核心初始化失败

pth*_*amm 5 lucene solr ruby-on-rails sunspot sunspot-rails

当我运行测试时,大多数测试都失败,并显示以下错误。

Failure/Error: let(:user){ FactoryGirl.create(:user) }
   RSolr::Error::Http:
     RSolr::Error::Http - 500 Internal Server Error
     Error:     {msg=SolrCore 'test' is not available due to init failure: Error opening new searcher,trace=org.apache.solr.common.SolrException: SolrCore 'test' is not available due to init failure: Error opening new searcher
        at org.apache.solr.core.CoreContainer.getCore(CoreContainer.java:745)
        at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:299)
        at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:207)
        at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1419)
        at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455)
        at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
        at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)
        at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
        at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075)
        at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384)

     URI: http://localhost:8981/solr/test/update?wt=ruby
     Request Headers: {"Content-Type"=>"text/xml"}
     Request Data: "<?xml version=\"1.0\" encoding=\"UTF-8\"?><add><doc><field name=\"id\">User 13497</field><field name=\"type\">User</field><field name=\"type\">ActiveRecord::Base</field><field name=\"class_name\">User</field><field name=\"phone_number_text\">+11111111200</field><field name=\"name_text\">111.111.1200</field></doc></add>"
Run Code Online (Sandbox Code Playgroud)

开发工作正常。我认为这可能是一个损坏的测试索引,所以:

$ rm -rf solr/data/test/
$ rm -rf solr/test/
Run Code Online (Sandbox Code Playgroud)

那没有帮助。查看开发管理页面:http:// localhost:8982 / solr /#/我没有看到任何警告或错误。

当我转到测试管理页面时: http:// localhost:8981 / solr /#/

SolrCore Initialization Failures
development: org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: Error opening new searcher
default: org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: Error opening new searcher
test: org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: Error opening new searcher
Run Code Online (Sandbox Code Playgroud)

在测试管理网站的日志中,我看到:

null:org.apache.solr.common.SolrException: SolrCore 'test' is not available due to init failure: Error opening new searcher
    at org.apache.solr.core.CoreContainer.getCore(CoreContainer.java:745)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:299)
    at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:207)
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1419)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:557)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1075)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:384)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1009)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)
    at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:255)
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:154)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)
    at org.eclipse.jetty.server.Server.handle(Server.java:368)
    at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489)
    at org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53)
    at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:953)
    at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1014)
    at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:861)
    at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240)
    at org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72)
    at org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.solr.common.SolrException: Error opening new searcher
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:873)
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:646)
    at org.apache.solr.core.CoreContainer.create(CoreContainer.java:491)
    at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:255)
    at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:249)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    ... 1 more
Caused by: org.apache.solr.common.SolrException: Error opening new searcher
    at org.apache.solr.core.SolrCore.openNewSearcher(SolrCore.java:1565)
    at org.apache.solr.core.SolrCore.getSearcher(SolrCore.java:1677)
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:845)
    ... 8 more
Caused by: org.apache.lucene.store.LockObtainFailedException: Lock obtain timed out: NativeFSLock@/Users/pramod/workspace/merlin/solr/test/data/index/write.lock
    at org.apache.lucene.store.Lock.obtain(Lock.java:89)
    at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:753)
    at org.apache.solr.update.SolrIndexWriter.<init>(SolrIndexWriter.java:77)
    at org.apache.solr.update.SolrIndexWriter.create(SolrIndexWriter.java:64)
    at org.apache.solr.update.DefaultSolrCoreState.createMainIndexWriter(DefaultSolrCoreState.java:279)
    at org.apache.solr.update.DefaultSolrCoreState.getIndexWriter(DefaultSolrCoreState.java:111)
    at org.apache.solr.core.SolrCore.openNewSearcher(SolrCore.java:1528)
    ... 10 more
Run Code Online (Sandbox Code Playgroud)

因此,我最好的猜测是写锁定的创建/删除方式存在问题。我检查了一下solr/conf/solrconfig.xml,发现以下内容(其他stackoverflow帖子似乎说这是必要的):

<unlockOnStartup>true</unlockOnStartup>
Run Code Online (Sandbox Code Playgroud)

我也重新启动计算机。但是,它仍然无法正常工作。对于如何解决这个问题,有任何的建议吗?谢谢!

系统信息:

  • Mac OS X 10.11 El Capitan
  • 太阳黑子2.2.0
  • 红宝石2.2.2
  • 导轨4.2.1
  • 索尔4.10.2

我将solr版本从黑子随附的默认版本升级到4.10.2,以匹配我的生产环境。这似乎是把一切搞砸了的行动。

------------局部解决方案------------

在我中,solr/conf/solrconfig.xml我添加了以下内容:

<lockType>simple</lockType>
Run Code Online (Sandbox Code Playgroud)

正上方 <unlockOnStartup>true</unlockOnStartup>

重新启动solr实例,它可以解决该时间的问题。

看来NativeFSLockFactory(Solr使用的默认值)会引起问题(http://wiki.apache.org/lucene-java/AvailableLockFactories

但是,如果我停止Solr实例然后尝试再次启动它,则现在会得到另一个异常:由以下原因引起:java.nio.file.NoSuchFileException:/solr/test/data/index/_5p.si

解决方法是

$ rm -rf solr/data/test/
$ rm -rf solr/test/
Run Code Online (Sandbox Code Playgroud)

每当我关闭或启动Solr实例时。看来现在已经解决了这个问题。我还是不明白怎么了。