Well, it's a bit involved to try it in a single thread as I've
oversimplified the example. But as far as I understand this should work,
right? So something else is wrong? Committing the writer and then
"maybeRefreshBlocking" should be enough to have the changes visible, yes?

On 11/9/18 4:45 PM, Michael Sokolov wrote:
> That should work, I think, but if you are serializing these threads so
> that they cannot run concurrently, maybe try running both operations
> in a single thread, at least as a test.
> On Fri, Nov 9, 2018 at 9:16 AM Boris Petrov <boris_pet...@live.com> wrote:
>> 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!
>>>>
>>>>

---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-user-h...@lucene.apache.org

Reply via email to