, Второе издание, Майкл МакКэндлесс, Эрик Хэтчер и Отис Господнетич, 2010
го гуглил это. Большинство этих проблем вызвано блокировкой, оставшейся после сбоя JVM. Это не мой случай.
У меня есть индекс с несколькими читателями и писателями. Я пытаюсь сделать массовое обновление индекса (удалить и добавить - вот как lucene делает обновления). Я использую встроенный сервер Solr (org.apache.solr.client.solrj.embedded.EmbeddedSolrServer). Другие авторы используют удаленный, не потоковый сервер (org.apache.solr.client.solrj.impl.CommonsHttpSolrServer).
Я запускаю это массовое обновление, какое-то время он работает нормально, затем умирает с
Вызывается: org.apache.lucene.store.LockObtainFailedException: время ожидания блокировки истекло: NativeFSLock @ / ... / lucene-ff783c5d8800fd9722a95494d07d7e37-write.lock
Я изменил время ожидания блокировки в solrconfig.xml
<writeLockTimeout>20000</writeLockTimeout>
<commitLockTimeout>10000</commitLockTimeout>
Я собираюсь начать читать код Lucene, чтобы понять это. Любая помощь, так что мне не нужно это делать, было бы здорово!
РЕДАКТИРОВАТЬ: Все мои обновления проходят через следующий код (Scala):
val req = new UpdateRequest
req.setAction(AbstractUpdateRequest.ACTION.COMMIT, false, false)
req.add(docs)
val rsp = req.process(solrServer)
solrServer
является экземпляром org.apache.solr.client.solrj.impl.CommonsHttpSolrServer, org.apache.solr.client.solrj.impl.StreamingUpdateSolrServer или org.apache.solr.client.solrj.embedded.EmbeddedSolrServer.
ДРУГОЕ РЕДАКТИРОВАНИЕ: я перестал использовать EmbeddedSolrServer, и теперь он работает. У меня есть два отдельных процесса, которые обновляют индекс поиска Solr:
1) Сервлет 2) Инструмент командной строки
Утилита командной строки использовала EmbeddedSolrServer, и в конечном итоге она вылетала из-за исключения LockObtainFailedException. Когда я начал использовать StreamingUpdateSolrServer, проблемы исчезли.
Я все еще немного сбит с толку, что EmbeddedSolrServer будет работать вообще. Может кто-нибудь объяснить это. Я думал, что это будет хорошо с процессом Servlet, и они будут ждать, пока другой пишет.