I have a situation where, using the Java API, I initiate a bunch of
indexing operations, but throw away the Future object (I don't need the
return status). This is so I can do a lot of indexing reasonably
asynchronously, so I don't have to hold up the GUI that triggers these
calls.
However, if I fire off these indexing operations, and immediately after do
a search operation on the same index, I get the following exception:
Caused by: org.elasticsearch.action.search.SearchPhaseExecutionException:
Failed to execute phase [init_scan], all shards failed
at
org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction.onFirstPhaseResult(TransportSearchTypeAction.java:233)
[elasticsearch-1.4.1.jar:]
at
org.elasticsearch.action.search.type.TransportSearchTypeAction$BaseAsyncAction$1.onFailure(TransportSearchTypeAction.java:179)
[elasticsearch-1.4.1.jar:]
at
org.elasticsearch.search.action.SearchServiceTransportAction$23.run(SearchServiceTransportAction.java:565)
[elasticsearch-1.4.1.jar:]
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
[rt.jar:1.7.0_60]
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
[rt.jar:1.7.0_60]
... 1 more
... however, if I wait awhile after indexing before searching, the search
succeeds, no errors.
Does anyone know what is going on there? Shouldn't initiating an index
operation asynchronously not affect search operations made on the same
client?
I'm using a TransportClient, the same one for all operations.
I made a mistake in my statement above - I am using different
TransportClients for the indexing and the searching... so, one is doing the
indexing, and while that is going on, I'm doing the searching on a
different one.
Final bit of info, and this seems important; one TransportClient is being
run in one thread, the other in another... so it goes like this:
Thread 1: Fork Thread 1
Thread 2: Create new TransportClient; Index list of items, not waiting for
Future objects (i.e. not calling actionGet())
Thread 1: While Thread 2 is running, create new TransportClient and do
search
I wish I could just go back and edit prior postings.
... I should mention, if I do the above, but don't create 2 threads - that
is, synchronously index each item, close the TransportClient, create
another TransportClient and do the search, it works. So this is ONLY
happening when the two actions are happening in different threads.
Apache, Apache Lucene, Apache Hadoop, Hadoop, HDFS and the yellow elephant
logo are trademarks of the
Apache Software Foundation
in the United States and/or other countries.