> On June 16, 2017, 8:31 p.m., Simon Willnauer wrote:
> > lucene/core/src/java/org/apache/lucene/index/BufferedUpdatesStream.java
> > Lines 276 (patched)
> > <https://reviews.apache.org/r/60154/diff/1/?file=1752292#file1752292line312>
> >
> >     is it possible that an indexing thread is currently handling this? in 
> > that case we would do it twice? I'd love if you could add some in-line 
> > comment about that

I sync on the packet and checked the `applied` CountDownLatch to see if it was 
completed already, so it should never happen twice.

I'll move this whole method into `FrozenBufferedUpdates` to make that sync 
clearer.


> On June 16, 2017, 8:31 p.m., Simon Willnauer wrote:
> > lucene/core/src/java/org/apache/lucene/index/BufferedUpdatesStream.java
> > Lines 342 (patched)
> > <https://reviews.apache.org/r/60154/diff/1/?file=1752292#file1752292line397>
> >
> >     this is pretty scary if you do that without a try / finally block. if 
> > we fail before we can decrement the refs we might leak the file references?
> >     
> >     it's pretty unclear to me where it will be released and I wonder if we 
> > sould use some kind of datastructure where we can record all the files and 
> > make sure that if we exit this loop we release them? ie. have a single 
> > place where we release, like a list we add to?

OK, I've changed the incRef to be the last thing we do in the sync(IW) block, 
and the matched decRef to the first thing I do in the finally block.


> On June 16, 2017, 8:31 p.m., Simon Willnauer wrote:
> > lucene/core/src/java/org/apache/lucene/index/BufferedUpdatesStream.java
> > Lines 348 (patched)
> > <https://reviews.apache.org/r/60154/diff/1/?file=1752292#file1752292line403>
> >
> >     this loop is pretty scary while I get what you are doing. maybe it 
> > would be simpler if we can break out part of it into seperate methods? the 
> > size of the loop also makes it hard to reason about if we leak any resources

OK, I factored out two chunks of code to separate methods.


> On June 16, 2017, 8:31 p.m., Simon Willnauer wrote:
> > lucene/core/src/java/org/apache/lucene/index/BufferedUpdatesStream.java
> > Line 295 (original), 377 (patched)
> > <https://reviews.apache.org/r/60154/diff/1/?file=1752292#file1752292line438>
> >
> >     this entire finally block should be a seperate method

OK I did that.


> On June 16, 2017, 8:31 p.m., Simon Willnauer wrote:
> > lucene/core/src/java/org/apache/lucene/index/DocumentsWriter.java
> > Lines 720 (patched)
> > <https://reviews.apache.org/r/60154/diff/1/?file=1752296#file1752296line726>
> >
> >     `catch(Throwable t)` really :) I know IW#tragicEvent will sort it out 
> > for us

Yeah :)  I think an exception here is necessarily tragic because the internal 
state of the packet has changed and we cannot easily recover/retry applying 
it...


> On June 16, 2017, 8:31 p.m., Simon Willnauer wrote:
> > lucene/core/src/java/org/apache/lucene/index/DocumentsWriterPerThreadPool.java
> > Line 213 (original), 217 (patched)
> > <https://reviews.apache.org/r/60154/diff/1/?file=1752301#file1752301line218>
> >
> >     is this a leftover?

Yeah, I intend to switch to notify.  I think the notifyAll defensively is too 
much: only one thread state freed up.


> On June 16, 2017, 8:31 p.m., Simon Willnauer wrote:
> > lucene/core/src/java/org/apache/lucene/index/FrozenBufferedUpdates.java
> > Lines 449 (patched)
> > <https://reviews.apache.org/r/60154/diff/1/?file=1752305#file1752305line463>
> >
> >     I'd love to see dedicated unittests for these methods here if there 
> > aren't any. I mean it's private so maybe we should add some? It's pretty 
> > intense code here

I think TestNumeric/BinaryDocValuesUpdates and TestIndexWriterDelete/ByQuery do 
a pretty good job testing here?


> On June 16, 2017, 8:31 p.m., Simon Willnauer wrote:
> > lucene/core/src/java/org/apache/lucene/index/SegmentReader.java
> > Lines 165 (patched)
> > <https://reviews.apache.org/r/60154/diff/1/?file=1752317#file1752317line166>
> >
> >     is this a bug? should this be fixed seperately?

Not I bug: I just refactored the ternary operator up above to a real `if`.


- Mike


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/60154/#review178121
-----------------------------------------------------------


On June 21, 2017, 10:04 a.m., Mike McCandless wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/60154/
> -----------------------------------------------------------
> 
> (Updated June 21, 2017, 10:04 a.m.)
> 
> 
> Review request for lucene.
> 
> 
> Repository: lucene-solr
> 
> 
> Description
> -------
> 
> Today Lucene uses a single thread to resolve buffered delete/update terms to 
> actual docIDs, but this is a costly process.  This change uses multiple 
> threads (the incoming indexing threads) to resolve terms concurrently.
> 
> Jira issue: https://issues.apache.org/jira/browse/LUCENE-7868
> 
> 
> Diffs
> -----
> 
>   
> lucene/core/src/java/org/apache/lucene/index/BinaryDocValuesFieldUpdates.java 
> f8cece9 
>   lucene/core/src/java/org/apache/lucene/index/BufferedUpdates.java 1c3494f 
>   lucene/core/src/java/org/apache/lucene/index/BufferedUpdatesStream.java 
> 9955626 
>   lucene/core/src/java/org/apache/lucene/index/CoalescedUpdates.java bf92ac1 
>   lucene/core/src/java/org/apache/lucene/index/DocValuesFieldUpdates.java 
> 528d4bf 
>   lucene/core/src/java/org/apache/lucene/index/DocValuesUpdate.java 1c85f33 
>   lucene/core/src/java/org/apache/lucene/index/DocumentsWriter.java 2807517 
>   
> lucene/core/src/java/org/apache/lucene/index/DocumentsWriterDeleteQueue.java 
> db0e571 
>   
> lucene/core/src/java/org/apache/lucene/index/DocumentsWriterFlushControl.java 
> a5b4b7c 
>   lucene/core/src/java/org/apache/lucene/index/DocumentsWriterFlushQueue.java 
> 2c62487 
>   lucene/core/src/java/org/apache/lucene/index/DocumentsWriterPerThread.java 
> c929ba2 
>   
> lucene/core/src/java/org/apache/lucene/index/DocumentsWriterPerThreadPool.java
>  cc72342 
>   lucene/core/src/java/org/apache/lucene/index/FlushByRamOrCountsPolicy.java 
> a85c98b 
>   lucene/core/src/java/org/apache/lucene/index/FlushPolicy.java e70959f 
>   lucene/core/src/java/org/apache/lucene/index/FreqProxTermsWriter.java 
> 1ca2830 
>   lucene/core/src/java/org/apache/lucene/index/FrozenBufferedUpdates.java 
> 4f482ad 
>   lucene/core/src/java/org/apache/lucene/index/IndexFileDeleter.java f7f196d 
>   lucene/core/src/java/org/apache/lucene/index/IndexWriter.java 14fbbae 
>   lucene/core/src/java/org/apache/lucene/index/IndexWriterConfig.java 0fdbc3e 
>   lucene/core/src/java/org/apache/lucene/index/LiveIndexWriterConfig.java 
> d9e1bc7 
>   
> lucene/core/src/java/org/apache/lucene/index/MergedPrefixCodedTermsIterator.java
>  cd14eec 
>   
> lucene/core/src/java/org/apache/lucene/index/NumericDocValuesFieldUpdates.java
>  4dd3cd0 
>   lucene/core/src/java/org/apache/lucene/index/PrefixCodedTerms.java df1653b 
>   lucene/core/src/java/org/apache/lucene/index/ReadersAndUpdates.java d4dd4a4 
>   lucene/core/src/java/org/apache/lucene/index/SegmentCommitInfo.java b1084a6 
>   lucene/core/src/java/org/apache/lucene/index/SegmentCoreReaders.java 
> ce2d448 
>   lucene/core/src/java/org/apache/lucene/index/SegmentInfo.java 1c02441 
>   lucene/core/src/java/org/apache/lucene/index/SegmentReader.java c8235d5 
>   lucene/core/src/java/org/apache/lucene/index/SerialMergeScheduler.java 
> 5a8f98b 
>   lucene/core/src/java/org/apache/lucene/index/TieredMergePolicy.java 668f1ec 
>   
> lucene/core/src/java/org/apache/lucene/util/packed/AbstractPagedMutable.java 
> c5fac1e 
>   
> lucene/core/src/test/org/apache/lucene/index/TestBinaryDocValuesUpdates.java 
> ed2b66f 
>   
> lucene/core/src/test/org/apache/lucene/index/TestDocumentsWriterDeleteQueue.java
>  c60f54d 
>   
> lucene/core/src/test/org/apache/lucene/index/TestFlushByRamOrCountsPolicy.java
>  aa2901c 
>   lucene/core/src/test/org/apache/lucene/index/TestForceMergeForever.java 
> 0379395 
>   lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java 6897f06 
>   lucene/core/src/test/org/apache/lucene/index/TestIndexWriterConfig.java 
> 2014c16 
>   lucene/core/src/test/org/apache/lucene/index/TestIndexWriterDelete.java 
> 25817d9 
>   lucene/core/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java 
> c0907a5 
>   lucene/core/src/test/org/apache/lucene/index/TestIndexWriterReader.java 
> 584e03c 
>   lucene/core/src/test/org/apache/lucene/index/TestNRTReaderWithThreads.java 
> 871715f 
>   
> lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java 
> 94da587 
>   lucene/core/src/test/org/apache/lucene/index/TestPerSegmentDeletes.java 
> 112a108 
>   lucene/core/src/test/org/apache/lucene/index/TestPrefixCodedTerms.java 
> 89d4ad1 
>   
> lucene/core/src/test/org/apache/lucene/search/TestControlledRealTimeReopenThread.java
>  a1b2a5c 
>   lucene/join/src/test/org/apache/lucene/search/join/TestJoinUtil.java 
> 1503de8 
>   
> lucene/sandbox/src/java/org/apache/lucene/codecs/idversion/IDVersionPostingsWriter.java
>  334f784 
>   
> lucene/sandbox/src/java/org/apache/lucene/codecs/idversion/VersionBlockTreeTermsWriter.java
>  d83b915 
>   
> lucene/test-framework/src/java/org/apache/lucene/index/BaseDocValuesFormatTestCase.java
>  8cb6665 
>   
> lucene/test-framework/src/java/org/apache/lucene/index/BaseIndexFileFormatTestCase.java
>  959466a 
>   lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java 
> 0243a56 
> 
> 
> Diff: https://reviews.apache.org/r/60154/diff/3/
> 
> 
> Testing
> -------
> 
> I ran performance tests on my internal corpus; details described here: 
> https://issues.apache.org/jira/browse/LUCENE-7868?focusedCommentId=16050729&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-16050729
> 
> I also uncovered a pre-existing bug if you use DV updates with index sorting 
> and update recently indexed documents; I'll open a separate issue to fix that 
> on 6.x.
> 
> 
> Thanks,
> 
> Mike McCandless
> 
>

Reply via email to