LockObtainFailedException atualizando o índice de pesquisa Lucene usando solr

Eu pesquisei muito isso no Google. A maioria desses problemas é causada por um bloqueio deixado após uma falha na JVM. Este não é o meu caso.

Tenho um índice com vários leitores e escritores. Estou tentando fazer uma atualização de índice de massa (excluir e adicionar - é assim que o lucene faz atualizações). Estou usando o servidor incorporado do solr (org.apache.solr.client.solrj.embedded.EmbeddedSolrServer). Outros gravadores estão usando o servidor remoto sem streaming (org.apache.solr.client.solrj.impl.CommonsHttpSolrServer).

Eu inicio esta atualização em massa, ela corre bem por um tempo e depois morre com um

Causado por: org.apache.lucene.store.LockObtainFailedException: O bloqueio da obtenção expirou: NativeFSLock @ / ... / lucene-ff783c5d8800fd9722a95494d07d7e37-write.lock

Ajustei meus tempos limite de bloqueio em solrconfig.xml

<writeLockTimeout>20000</writeLockTimeout>
<commitLockTimeout>10000</commitLockTimeout>

Estou prestes a começar a ler o código lucene para descobrir isso. Qualquer ajuda para que eu não precise fazer isso seria ótimo!

EDIT: Todas as minhas atualizações passam pelo seguinte código (Scala):

val req = new UpdateRequest
req.setAction(AbstractUpdateRequest.ACTION.COMMIT, false, false)
req.add(docs)

val rsp = req.process(solrServer)

solrServer é uma instância de org.apache.solr.client.solrj.impl.CommonsHttpSolrServer, org.apache.solr.client.solrj.impl.StreamingUpdateSolrServer ou org.apache.solr.client.solrj.embedded.EmbeddedSolrServe

OUTRA EDIÇÃO: Parei de usar o EmbeddedSolrServer e agora funciona. Eu tenho dois processos separados que atualizam o índice de pesquisa solr:

1) Servlet 2) Ferramenta de linha de comando

A ferramenta de linha de comando estava usando o EmbeddedSolrServer e acabaria travando com o LockObtainFailedException. Quando comecei a usar o StreamingUpdateSolrServer, os problemas desaparecera

Ainda estou um pouco confuso que o EmbeddedSolrServer funcione. Alguém pode explicar isso. Eu pensei que seria bom com o processo Servlet e eles esperariam enquanto o outro está escrevend

questionAnswers(2)

yourAnswerToTheQuestion