You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by "Michael McCandless (JIRA)" <ji...@apache.org> on 2015/06/20 20:01:00 UTC

[jira] [Commented] (LUCENE-6565) Is it ok for IndexWriter.prepareCommit to be an NRT-visible change?

    [ https://issues.apache.org/jira/browse/LUCENE-6565?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14594704#comment-14594704 ] 

Michael McCandless commented on LUCENE-6565:
--------------------------------------------

I suspect this is not right: NRT readers should not "see" that prepareCommit (but not the 2nd phase commit) had been called, and should only see the event once the 2nd phase (commit) succeeds.

And I suspect if you reopen your NRT reader after prepareCommit, then you commit, then if you try to reopen the NRT reader it will see no changes from the 2nd phase yet will still see the old segments_N file.

However, this is tricky to fix, because of how prepareCommit forks (clones) the SegmentInfos, allowing concurrent indexing changes while the 2nd commit phase runs likely slowly (fsync), and because we use a single linear comparable (the long SIS.getVersion) to correspond to changes ... but I don't yet see a simple way to fix this, and I'd rather not make this part of IW any more complex.

> Is it ok for IndexWriter.prepareCommit to be an NRT-visible change?
> -------------------------------------------------------------------
>
>                 Key: LUCENE-6565
>                 URL: https://issues.apache.org/jira/browse/LUCENE-6565
>             Project: Lucene - Core
>          Issue Type: Task
>            Reporter: Adrien Grand
>            Assignee: Michael McCandless
>
> Because of LUCENE-6523, IndexWriter.prepareCommit is now an NRT-visible change. For instance the following test would fail:
> {code}
> Directory dir = newDirectory();
> IndexWriter w = new IndexWriter(dir, new IndexWriterConfig(new MockAnalyzer(random())));
> w.addDocument(new Document());
> DirectoryReader reader = DirectoryReader.open(w, true);
> assertNull(DirectoryReader.openIfChanged(reader)); // ok
> w.prepareCommit();
> assertNull(DirectoryReader.openIfChanged(reader)); // fails
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

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