NightOwl888 opened a new pull request #325:
URL: https://github.com/apache/lucenenet/pull/325


   This fixes a bottleneck (see #261) caused by unzipping the line docs file in 
RAM (~15MB) and then selecting a random line in the file. The .NET `GZipStream` 
is not seekable, so this was done by copying the entire contents into a 
`MemoryStream` first. This happened during a significant number of the tests 
(~20%), and happened in each one of those tests.
   
   The fix was to set up the test framework to unzip the file to a temp file on 
the test machine. This happens in 1 of 3 different ways:
   
   1. If `LineFileDocs` is used directly in a class that does not specify 
`LuceneTestCase.UseTempLineDocsFile = true`, `LineFileDocs` will unzip the file 
before it is used (per instance of the class) and deleted when it is disposed.
   2. If `LuceneTestCase.UseTempLineDocsFile = true` is specified in the test 
fixture, the file will be unzipped in the `BeforeClass()` method and deleted in 
the `AfterClass()` method.
   3. If the test project makes heavy use of this file, adding a subclass of 
`LuceneTestFrameworkInitializer` to the test project (outside of all 
namespaces) will cause the file to be unzipped only once for all of the tests 
in that project and deleted after the last test is finished.
   
   There are also several other patches in this PR:
   
   - The seek behavior of `LineFileDocs` was reverted back to Lucene's original 
implementation, which has revealed some (potential) false positives in some of 
the ICU tests. A `BufferedStream` was added to improve performance.
   - Removed unnecessary variable allocations.
   - Fixed a bug with the `Nightly`, `Weekly`, `Slow`, and `AwaitsFix` 
attributes so they will wait until NUnit runs the initialization code before 
running.
   - Added a `DeadlockAttribute` to time out tests that we are now seeing 
threading contention issues with after improving raw speed. This is to ensure 
that they will fail in the CI environment if they actually deadlock and also 
can be used to filter out these tests during runs.
   - Simplified some expressions to make them simpler to maintain.
   - Commented out dead code and unnecessary variable declarations that were 
carried over from Java.
   - Fixed a bug in the `ICUTokenizer` where it was calling 
`System.Char.IsWhiteSpace()` when it should have been calling 
`ICU4N.UChar.IsWhiteSpace()` to ensure it is reading the correct version of ICU.
   - Changed implementation of `DisposableThreadLocal` to that of RavenDB, 
[with permission from its 
maintainers](https://issues.apache.org/jira/browse/LUCENENET-640?focusedCommentId=17033146&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-17033146).
 (closes #251)


----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to