[ https://issues.apache.org/jira/browse/LUCENE-1516?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jason Rutherglen updated LUCENE-1516: ------------------------------------- Attachment: LUCENE-1516.patch - Added SegmentReaderPool that maintains a map of SegmentInfoKey -> SegmentReader. SegmentInfoKey returns a hashcode of a SegmentInfo that also includes the deletes and norms generations. SegmentReaderPool also maintains a map of SegmentReaders that represent "working copies" (cloned readers) for realtime deletes occurring. When IW.getReader is called the "working copy" readers replace the existing readers keyed with the same segmentinfo in the SegmentReaderPool. This way IW.deleteDocument applies to the in memory cloned "working copies" but does not alter SegmentReaders already returned from SegmentReaderPool. - The test methods in TestIndexWriterReader pass - I'm hesitant to automatically flush on IW.getReader as IW.flush has a number of parameters. However for updateDocument to work properly we'll probably need to do this? - DocumentsWriter.applyDeletes should no longer need to apply deletes as they are already applied in realtime in IW.deleteDocument? It should only need to call SR.commitChanges? - "ant test-core" fails in ConcurrentMergeScheduler with the same exception as above in TestSnapshotDeletionPolicy (and some others). I suspect in the case of TestSnapshotDeletionPolicy the errors could be due to the SegmentReader holding files open while they are being copied. Perhaps this would explain the EOFExceptions? > Integrate IndexReader with IndexWriter > --------------------------------------- > > Key: LUCENE-1516 > URL: https://issues.apache.org/jira/browse/LUCENE-1516 > Project: Lucene - Java > Issue Type: Improvement > Affects Versions: 2.4 > Reporter: Jason Rutherglen > Assignee: Michael McCandless > Priority: Minor > Fix For: 2.9 > > Attachments: LUCENE-1516.patch, LUCENE-1516.patch, LUCENE-1516.patch, > LUCENE-1516.patch, LUCENE-1516.patch, LUCENE-1516.patch, LUCENE-1516.patch, > LUCENE-1516.patch, LUCENE-1516.patch, LUCENE-1516.patch > > Original Estimate: 672h > Remaining Estimate: 672h > > The current problem is an IndexReader and IndexWriter cannot be open > at the same time and perform updates as they both require a write > lock to the index. While methods such as IW.deleteDocuments enables > deleting from IW, methods such as IR.deleteDocument(int doc) and > norms updating are not available from IW. This limits the > capabilities of performing updates to the index dynamically or in > realtime without closing the IW and opening an IR, deleting or > updating norms, flushing, then opening the IW again, a process which > can be detrimental to realtime updates. > This patch will expose an IndexWriter.getReader method that returns > the currently flushed state of the index as a class that implements > IndexReader. The new IR implementation will differ from existing IR > implementations such as MultiSegmentReader in that flushing will > synchronize updates with IW in part by sharing the write lock. All > methods of IR will be usable including reopen and clone. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: java-dev-unsubscr...@lucene.apache.org For additional commands, e-mail: java-dev-h...@lucene.apache.org