lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Erick Erickson <erickerick...@gmail.com>
Subject Re: SearcherManager not seeing changes in IndexWriteral and
Date Fri, 09 Nov 2018 15:37:12 GMT
If it's hard to do in a single thread, how about timestamping the
events to insure that they happen in the expected order?

That would verify the sequencing is happening as you expect and
_still_ not see the expected docs...

Assuming it does fail, do you think you could reduce it to a
multi-threaded test case?

Best,
Erick
On Fri, Nov 9, 2018 at 7:03 AM Boris Petrov <boris_petrov@live.com> wrote:
>
> 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_petrov@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_petrov@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-unsubscribe@lucene.apache.org
> For additional commands, e-mail: java-user-help@lucene.apache.org
>

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


Mime
View raw message