If you mean the synchronization of the threads, it is not in the
example, but Thread 2 is *started* after Thread 1 finished executing the
code that I gave as an example. So there is happens-before between them.
If you mean synchronization on the Lucene level - isn't that what
"maybeRefreshBlocking" should do?

On 11/9/18 3:29 PM, Michael Sokolov wrote:
> I'm not seeing anything there that would synchronize, or serialize, the
> read after the write and commit. Did you expect that for some reason?
>
> On Fri, Nov 9, 2018, 6:00 AM Boris Petrov <boris_pet...@live.com wrote:
>
>> Hi all,
>>
>> I'm using Lucene version 7.5.0. We have a test that does something like:
>>
>> Thread 1:
>>
>>             Field idStringField = new StringField("id", id,
>> Field.Store.YES);
>>             Field contentsField = new TextField("contents", reader);
>>             Document document = new Document();
>>             document.add(idStringField);
>>             document.add(contentsField);
>>
>>             writer.updateDocument(new Term(ID_FIELD, id), document);
>>             writer.flush(); // not sure this flush is needed?
>>             writer.commit();
>>
>> Thread 2:
>>
>>             searchManager.maybeRefreshBlocking();
>>             IndexSearcher searcher = searchManager.acquire();
>>             try {
>>                 QueryParser parser = new QueryParser("contents", analyzer);
>>                 Query luceneQuery = parser.parse(queryText);
>>                 ScoreDoc[] hits = searcher.search(luceneQuery,
>> 50).scoreDocs;
>>             } finally {
>>                 searchManager.release(searcher);
>>             }
>>
>> Thread 1 happens before Thread 2.
>>
>> Sometimes, only sometimes, the commit from thread 1 is not *immediately*
>> visible in Thread 2. If I put a "Thread.sleep(1000)" it always works.
>> Without it, sometimes the search is empty. I'm not sure if I'm doing
>> something wrong or this is a bug?
>>
>> Thanks!
>>
>>

Reply via email to