This is an automated email from the ASF dual-hosted git repository. nightowl888 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/lucenenet.git
commit 49d3e931e270c64bb2361fc531a240be7ead4fbc Author: Vincent Van Den Berghe <[email protected]> AuthorDate: Tue Jun 13 07:50:31 2017 +0200 LUCENE-5644: switch to simpler LIFO thread to ThreadState allocator during indexing. Technically, this is something from releases/lucene-solr/4.8.1, but profiling indicates it makes a huge difference in multithreaded scenarios --- .../Index/RandomDocumentsWriterPerThreadPool.cs | 102 --- .../Lucene.Net.TestFramework.csproj | 437 +++++++++++ .../Util/LuceneTestCase.cs | 27 +- .../Index/TestFlushByRamOrCountsPolicy.cs | 8 +- .../Index/TestIndexWriterConfig.cs | 2 +- src/Lucene.Net.Tests/Index/TestStressIndexing2.cs | 2 +- src/Lucene.Net/Index/DocumentsWriter.cs | 10 +- .../Index/DocumentsWriterFlushControl.cs | 4 +- .../Index/DocumentsWriterPerThreadPool.cs | 203 +++-- src/Lucene.Net/Index/IndexWriterConfig.cs | 43 +- src/Lucene.Net/Index/LiveIndexWriterConfig.cs | 4 +- .../ThreadAffinityDocumentsWriterThreadPool.cs | 95 --- src/Lucene.Net/Lucene.Net.csproj | 845 +++++++++++++++++++++ 13 files changed, 1453 insertions(+), 329 deletions(-) diff --git a/src/Lucene.Net.TestFramework/Index/RandomDocumentsWriterPerThreadPool.cs b/src/Lucene.Net.TestFramework/Index/RandomDocumentsWriterPerThreadPool.cs deleted file mode 100644 index fc82ddb..0000000 --- a/src/Lucene.Net.TestFramework/Index/RandomDocumentsWriterPerThreadPool.cs +++ /dev/null @@ -1,102 +0,0 @@ -using Lucene.Net.Diagnostics; -using System; -using System.Threading; - -namespace Lucene.Net.Index -{ - /* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - /// <summary> - /// A <see cref="DocumentsWriterPerThreadPool"/> that selects thread states at random. - /// <para/> - /// @lucene.internal - /// @lucene.experimental - /// </summary> - internal class RandomDocumentsWriterPerThreadPool : DocumentsWriterPerThreadPool - { - private readonly ThreadState[] states; - private readonly Random random; - private readonly int maxRetry; - - public RandomDocumentsWriterPerThreadPool(int maxNumPerThreads, Random random) - : base(maxNumPerThreads) - { - if (Debugging.AssertsEnabled) Debugging.Assert(MaxThreadStates >= 1); - states = new ThreadState[maxNumPerThreads]; - this.random = new Random(random.Next()); - this.maxRetry = 1 + random.Next(10); - } - - public override ThreadState GetAndLock(Thread requestingThread, DocumentsWriter documentsWriter) - { - ThreadState threadState = null; - if (NumThreadStatesActive == 0) - { - lock (this) - { - if (NumThreadStatesActive == 0) - { - threadState = states[0] = NewThreadState(); - return threadState; - } - } - } - if (Debugging.AssertsEnabled) Debugging.Assert(NumThreadStatesActive > 0); - for (int i = 0; i < maxRetry; i++) - { - int ord = random.Next(NumThreadStatesActive); - lock (this) - { - threadState = states[ord]; - if (Debugging.AssertsEnabled) Debugging.Assert(threadState != null); - } - - if (threadState.TryLock()) - { - return threadState; - } - if (random.Next(20) == 0) - { - break; - } - } - /* - * only try to create a new threadstate if we can not lock the randomly - * selected state. this is important since some tests rely on a single - * threadstate in the single threaded case. Eventually it would be nice if - * we would not have this limitation but for now we just make sure we only - * allocate one threadstate if indexing is single threaded - */ - - lock (this) - { - ThreadState newThreadState = NewThreadState(); - if (newThreadState != null) // did we get a new state? - { - threadState = states[NumThreadStatesActive - 1] = newThreadState; - //if (Debugging.AssertsEnabled) Debugging.Assert(threadState.HeldByCurrentThread); - return threadState; - } - // if no new state is available lock the random one - } - if (Debugging.AssertsEnabled) Debugging.Assert(threadState != null); - threadState.@Lock(); - return threadState; - } - } -} \ No newline at end of file diff --git a/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj b/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj index ffe9890..4edd47b 100644 --- a/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj +++ b/src/Lucene.Net.TestFramework/Lucene.Net.TestFramework.csproj @@ -23,6 +23,8 @@ <Import Project="$(SolutionDir)build/NuGet.props" /> +<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> <PropertyGroup> <TargetFrameworks>netstandard2.1;netstandard2.0;</TargetFrameworks> <TargetFrameworks Condition="$([MSBuild]::IsOsPlatform('Windows'))">$(TargetFrameworks);net451</TargetFrameworks> @@ -45,6 +47,431 @@ <None Remove="Util\europarl.lines.txt.gz" /> <EmbeddedResource Include="Util\europarl.lines.txt.gz" /> <None Include="*.txt" /> + <Compile Include="Analysis\BaseTokenStreamTestCase.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Analysis\CannedBinaryTokenStream.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Analysis\CannedTokenStream.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Analysis\CollationTestBase.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Analysis\LookaheadTokenFilter.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Analysis\MockAnalyzer.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Analysis\MockBytesAnalyzer.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Analysis\MockBytesAttributeFactory.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Analysis\MockCharFilter.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Analysis\MockFixedLengthPayloadFilter.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Analysis\MockGraphTokenFilter.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Analysis\MockHoleInjectingTokenFilter.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Analysis\MockPayloadAnalyzer.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Analysis\MockRandomLookaheadTokenFilter.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Analysis\MockReaderWrapper.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Analysis\MockTokenFilter.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Analysis\MockTokenizer.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Analysis\MockUTF16TermAttributeImpl.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Analysis\MockVariableLengthPayloadFilter.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Analysis\TokenStreamToDot.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Analysis\ValidatingTokenFilter.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Analysis\VocabularyAssert.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Attributes\HasTimeoutAttribute.cs" /> + <Compile Include="Attributes\LongRunningTestAttribute.cs" /> + <Compile Include="Attributes\LuceneNetSpecificAttribute.cs" /> + <Compile Include="Codecs\Asserting\AssertingCodec.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Asserting\AssertingDocValuesFormat.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Asserting\AssertingNormsFormat.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Asserting\AssertingPostingsFormat.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Asserting\AssertingStoredFieldsFormat.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Asserting\AssertingTermVectorsFormat.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Bloom\TestBloomFilteredLucene41Postings.cs" /> + <Compile Include="Codecs\CheapBastard\CheapBastardCodec.cs" /> + <Compile Include="Codecs\Compressing\CompressingCodec.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Compressing\Dummy\DummyCompressingCodec.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Compressing\FastCompressingCodec.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Compressing\FastDecompressionCompressingCodec.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Compressing\HighCompressionCompressingCodec.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene3x\PreFlexRWCodec.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene3x\PreFlexRWFieldInfosFormat.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene3x\PreFlexRWFieldInfosReader.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene3x\PreFlexRWFieldInfosWriter.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene3x\PreFlexRWFieldsWriter.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene3x\PreFlexRWNormsConsumer.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene3x\PreFlexRWNormsFormat.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene3x\PreFlexRWPostingsFormat.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene3x\PreFlexRWSegmentInfoFormat.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene3x\PreFlexRWSegmentInfoWriter.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene3x\PreFlexRWSkipListWriter.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene3x\PreFlexRWStoredFieldsFormat.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene3x\PreFlexRWStoredFieldsWriter.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene3x\PreFlexRWTermVectorsFormat.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene3x\PreFlexRWTermVectorsWriter.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene3x\TermInfosWriter.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene40\Lucene40DocValuesWriter.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene40\Lucene40FieldInfosWriter.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene40\Lucene40PostingsWriter.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene40\Lucene40RWCodec.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene40\Lucene40RWDocValuesFormat.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene40\Lucene40RWNormsFormat.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene40\Lucene40RWPostingsFormat.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene40\Lucene40SkipListWriter.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene41Ords\Lucene41WithOrds.cs" /> + <Compile Include="Codecs\Lucene41\Lucene41RWCodec.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene42\Lucene42DocValuesConsumer.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene42\Lucene42FieldInfosWriter.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene42\Lucene42RWCodec.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene42\Lucene42RWDocValuesFormat.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\Lucene45\Lucene45RWCodec.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\MissingOrdRemapper.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\MockIntBlock\MockFixedIntBlockPostingsFormat.cs" /> + <Compile Include="Codecs\MockIntBlock\MockVariableIntBlockPostingsFormat.cs" /> + <Compile Include="Codecs\MockRandom\MockRandomPostingsFormat.cs" /> + <Compile Include="Codecs\MockSep\MockSepPostingsFormat.cs" /> + <Compile Include="Codecs\MockSep\MockSingleIntFactory.cs" /> + <Compile Include="Codecs\MockSep\MockSingleIntIndexInput.cs" /> + <Compile Include="Codecs\MockSep\MockSingleIntIndexOutput.cs" /> + <Compile Include="Codecs\NestedPulsing\NestedPulsingPostingsFormat.cs" /> + <Compile Include="Codecs\RAMOnly\RAMOnlyPostingsFormat.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Codecs\TestCodecFactory.cs" /> + <Compile Include="Codecs\TestDocValuesFormatFactory.cs" /> + <Compile Include="Codecs\TestPostingsFormatFactory.cs" /> + <Compile Include="Index\AlcoholicMergePolicy.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Index\AllDeletedFilterReader.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Index\AssertingAtomicReader.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Index\AssertingDirectoryReader.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Index\BaseCompressingDocValuesFormatTestCase.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Index\BaseDocValuesFormatTestCase.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Index\BaseIndexFileFormatTestCase.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Index\BaseMergePolicyTestCase.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Index\BasePostingsFormatTestCase.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Index\BaseStoredFieldsFormatTestCase.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Index\BaseTermVectorsFormatTestCase.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Index\DocHelper.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Index\FieldFilterAtomicReader.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Index\MockIndexInput.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Index\MockRandomMergePolicy.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Index\RandomCodec.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Index\RandomIndexWriter.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Index\ThreadedIndexingAndSearchingTestCase.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="JavaCompatibility\AbstractBeforeAfterRule.cs" /> + <Compile Include="Randomized\Attributes\SeedAttribute.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Randomized\Attributes\SeedDecoratorAttribute.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Randomized\Attributes\ThreadLeakScopeAttribute.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Randomized\Generators\RandomInts.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Randomized\InternalAssumptionViolatedException.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Randomized\ISeedDecorator.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Randomized\MurmurHash3.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Randomized\RandomizedContext.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Randomized\RandomizedRunner.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Randomized\Randomness.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Randomized\SeedUtils.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Randomized\SingleThreadedRandom.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Randomized\ThreadGroup.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Search\AssertingBulkOutOfOrderScorer.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Search\AssertingBulkScorer.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Search\AssertingCollector.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Search\AssertingIndexSearcher.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Search\AssertingQuery.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Search\AssertingScorer.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Search\AssertingWeight.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Search\CheckHits.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Search\QueryUtils.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Search\RandomOrderCollector.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Search\RandomSimilarityProvider.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Search\SearchEquivalenceTestBase.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Search\ShardSearchingTestBase.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Store\BaseDirectoryWrapper.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Store\MockDirectoryWrapper.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Store\MockIndexInputWrapper.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Store\MockIndexOutputWrapper.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Store\MockLockFactoryWrapper.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Store\SlowClosingMockIndexInputWrapper.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Store\SlowOpeningMockIndexInputWrapper.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Store\TestHelper.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Support\CultureInfoSupport.cs" /> + <Compile Include="Support\RandomizedTest.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Support\ExceptionSerializationTestBase.cs" /> + <Compile Include="Support\SystemProperties.cs" /> + <Compile Include="Support\ApiScanTestBase.cs" /> + <Compile Include="Util\Automaton\AutomatonTestUtil.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Util\BaseDocIdSetTestCase.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Util\English.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Util\FailOnNonBulkMergesInfoStream.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Util\Fst\FSTTester.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Util\LineFileDocs.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Util\LuceneTestCase.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Util\NullInfoStream.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Util\Paths.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Util\StackTraceHelper.cs" /> + <Compile Include="Util\TestRuleSetupAndRestoreClassEnv.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Util\TestUtil.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Util\ThrottledIndexOutput.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Util\TimeUnits.cs"> + <SubType>Code</SubType> + </Compile> + <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="JavaCompatibility\RandomHelpers.cs" /> + <Compile Include="JavaCompatibility\LuceneTestCase.cs" /> + <Compile Include="JavaCompatibility\LuceneTypesHelpers.cs" /> + <Compile Include="JavaCompatibility\SystemTypesHelpers.cs" /> + <Compile Include="Util\VirtualMethod.cs" /> + <Compile Include="..\CommonAssemblyInfo.cs"> + <Link>Properties\CommonAssemblyInfo.cs</Link> + </Compile> </ItemGroup> <ItemGroup> @@ -130,3 +557,13 @@ </ItemGroup> </Project> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> + <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> +</Project> \ No newline at end of file diff --git a/src/Lucene.Net.TestFramework/Util/LuceneTestCase.cs b/src/Lucene.Net.TestFramework/Util/LuceneTestCase.cs index 6460cbd..b6cc7dc 100644 --- a/src/Lucene.Net.TestFramework/Util/LuceneTestCase.cs +++ b/src/Lucene.Net.TestFramework/Util/LuceneTestCase.cs @@ -1606,32 +1606,7 @@ namespace Lucene.Net.Util { int maxNumThreadStates = Rarely(random) ? TestUtil.NextInt32(random, 5, 20) : TestUtil.NextInt32(random, 1, 4); // reasonable value - crazy value - if (Rarely(random)) - { - //// Retrieve the package-private setIndexerThreadPool - //// method: - ////MethodInfo setIndexerThreadPoolMethod = typeof(IndexWriterConfig).GetMethod("SetIndexerThreadPool", new Type[] { typeof(DocumentsWriterPerThreadPool) }); - //MethodInfo setIndexerThreadPoolMethod = typeof(IndexWriterConfig).GetMethod( - // "SetIndexerThreadPool", - // BindingFlags.NonPublic | BindingFlags.Instance, - // null, - // new Type[] { typeof(DocumentsWriterPerThreadPool) }, - // null); - ////setIndexerThreadPoolMethod.setAccessible(true); - //Type clazz = typeof(RandomDocumentsWriterPerThreadPool); - //ConstructorInfo ctor = clazz.GetConstructor(new[] { typeof(int), typeof(Random) }); - ////ctor.Accessible = true; - //// random thread pool - //setIndexerThreadPoolMethod.Invoke(c, new[] { ctor.Invoke(new object[] { maxNumThreadStates, r }) }); - - // LUCENENET specific: Since we are using InternalsVisibleTo, there is no need for Reflection - c.SetIndexerThreadPool(new RandomDocumentsWriterPerThreadPool(maxNumThreadStates, random)); - } - else - { - // random thread pool - c.SetMaxThreadStates(maxNumThreadStates); - } + c.SetMaxThreadStates(maxNumThreadStates); } #if !FEATURE_INSTANCE_TESTDATA_INITIALIZATION c.SetMergePolicy(NewMergePolicy(random)); diff --git a/src/Lucene.Net.Tests/Index/TestFlushByRamOrCountsPolicy.cs b/src/Lucene.Net.Tests/Index/TestFlushByRamOrCountsPolicy.cs index 58bd570..4f47926 100644 --- a/src/Lucene.Net.Tests/Index/TestFlushByRamOrCountsPolicy.cs +++ b/src/Lucene.Net.Tests/Index/TestFlushByRamOrCountsPolicy.cs @@ -91,7 +91,7 @@ namespace Lucene.Net.Index IndexWriterConfig iwc = NewIndexWriterConfig(TEST_VERSION_CURRENT, analyzer).SetFlushPolicy(flushPolicy); int numDWPT = 1 + AtLeast(2); - DocumentsWriterPerThreadPool threadPool = new ThreadAffinityDocumentsWriterThreadPool(numDWPT); + DocumentsWriterPerThreadPool threadPool = new DocumentsWriterPerThreadPool(numDWPT); iwc.SetIndexerThreadPool(threadPool); iwc.SetRAMBufferSizeMB(maxRamMB); iwc.SetMaxBufferedDocs(IndexWriterConfig.DISABLE_AUTO_FLUSH); @@ -153,7 +153,7 @@ namespace Lucene.Net.Index IndexWriterConfig iwc = NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random)).SetFlushPolicy(flushPolicy); int numDWPT = 1 + AtLeast(2); - DocumentsWriterPerThreadPool threadPool = new ThreadAffinityDocumentsWriterThreadPool(numDWPT); + DocumentsWriterPerThreadPool threadPool = new DocumentsWriterPerThreadPool(numDWPT); iwc.SetIndexerThreadPool(threadPool); iwc.SetMaxBufferedDocs(2 + AtLeast(10)); iwc.SetRAMBufferSizeMB(IndexWriterConfig.DISABLE_AUTO_FLUSH); @@ -206,7 +206,7 @@ namespace Lucene.Net.Index iwc.SetFlushPolicy(flushPolicy); int numDWPT = 1 + Random.Next(8); - DocumentsWriterPerThreadPool threadPool = new ThreadAffinityDocumentsWriterThreadPool(numDWPT); + DocumentsWriterPerThreadPool threadPool = new DocumentsWriterPerThreadPool(numDWPT); iwc.SetIndexerThreadPool(threadPool); IndexWriter writer = new IndexWriter(dir, iwc); @@ -277,7 +277,7 @@ namespace Lucene.Net.Index FlushPolicy flushPolicy = new FlushByRamOrCountsPolicy(); iwc.SetFlushPolicy(flushPolicy); - DocumentsWriterPerThreadPool threadPool = new ThreadAffinityDocumentsWriterThreadPool(numThreads[i] == 1 ? 1 : 2); + DocumentsWriterPerThreadPool threadPool = new DocumentsWriterPerThreadPool(numThreads[i] == 1 ? 1 : 2); iwc.SetIndexerThreadPool(threadPool); // with such a small ram buffer we should be stalled quiet quickly iwc.SetRAMBufferSizeMB(0.25); diff --git a/src/Lucene.Net.Tests/Index/TestIndexWriterConfig.cs b/src/Lucene.Net.Tests/Index/TestIndexWriterConfig.cs index 11b761c..41e7f50 100644 --- a/src/Lucene.Net.Tests/Index/TestIndexWriterConfig.cs +++ b/src/Lucene.Net.Tests/Index/TestIndexWriterConfig.cs @@ -81,7 +81,7 @@ namespace Lucene.Net.Index Assert.IsNull(conf.MergedSegmentWarmer); Assert.AreEqual(IndexWriterConfig.DEFAULT_READER_TERMS_INDEX_DIVISOR, conf.ReaderTermsIndexDivisor); Assert.AreEqual(typeof(TieredMergePolicy), conf.MergePolicy.GetType()); - Assert.AreEqual(typeof(ThreadAffinityDocumentsWriterThreadPool), conf.IndexerThreadPool.GetType()); + Assert.AreEqual(typeof(DocumentsWriterPerThreadPool), conf.IndexerThreadPool.GetType()); Assert.AreEqual(typeof(FlushByRamOrCountsPolicy), conf.FlushPolicy.GetType()); Assert.AreEqual(IndexWriterConfig.DEFAULT_RAM_PER_THREAD_HARD_LIMIT_MB, conf.RAMPerThreadHardLimitMB); Assert.AreEqual(Codec.Default, conf.Codec); diff --git a/src/Lucene.Net.Tests/Index/TestStressIndexing2.cs b/src/Lucene.Net.Tests/Index/TestStressIndexing2.cs index 3209749..1e1cbda 100644 --- a/src/Lucene.Net.Tests/Index/TestStressIndexing2.cs +++ b/src/Lucene.Net.Tests/Index/TestStressIndexing2.cs @@ -224,7 +224,7 @@ namespace Lucene.Net.Index public virtual IDictionary<string, Document> IndexRandom(int nThreads, int iterations, int range, Directory dir, int maxThreadStates, bool doReaderPooling) { IDictionary<string, Document> docs = new Dictionary<string, Document>(); - IndexWriter w = RandomIndexWriter.MockIndexWriter(dir, NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random)).SetOpenMode(OpenMode.CREATE).SetRAMBufferSizeMB(0.1).SetMaxBufferedDocs(maxBufferedDocs).SetIndexerThreadPool(new ThreadAffinityDocumentsWriterThreadPool(maxThreadStates)).SetReaderPooling(doReaderPooling).SetMergePolicy(NewLogMergePolicy()), new YieldTestPoint(this)); + IndexWriter w = RandomIndexWriter.MockIndexWriter(dir, NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random)).SetOpenMode(OpenMode.CREATE).SetRAMBufferSizeMB(0.1).SetMaxBufferedDocs(MaxBufferedDocs).SetIndexerThreadPool(new DocumentsWriterPerThreadPool(maxThreadStates)).SetReaderPooling(doReaderPooling).SetMergePolicy(NewLogMergePolicy()), new YieldTestPoint(this)); LogMergePolicy lmp = (LogMergePolicy)w.Config.MergePolicy; lmp.NoCFSRatio = 0.0; lmp.MergeFactor = mergeFactor; diff --git a/src/Lucene.Net/Index/DocumentsWriter.cs b/src/Lucene.Net/Index/DocumentsWriter.cs index abe7274..77a9750 100644 --- a/src/Lucene.Net/Index/DocumentsWriter.cs +++ b/src/Lucene.Net/Index/DocumentsWriter.cs @@ -526,8 +526,8 @@ namespace Lucene.Net.Index } finally { - perThread.Unlock(); - } + perThreadPool.Release(perThread); + } return PostUpdate(flushingDWPT, hasEvents); } @@ -572,10 +572,10 @@ namespace Lucene.Net.Index } finally { - perThread.Unlock(); - } + perThreadPool.Release(perThread); + } - return PostUpdate(flushingDWPT, hasEvents); + return PostUpdate(flushingDWPT, hasEvents); } private bool DoFlush(DocumentsWriterPerThread flushingDWPT) diff --git a/src/Lucene.Net/Index/DocumentsWriterFlushControl.cs b/src/Lucene.Net/Index/DocumentsWriterFlushControl.cs index 346d834..c955aec 100644 --- a/src/Lucene.Net/Index/DocumentsWriterFlushControl.cs +++ b/src/Lucene.Net/Index/DocumentsWriterFlushControl.cs @@ -613,8 +613,8 @@ namespace Lucene.Net.Index { if (!success) // make sure we unlock if this fails { - perThread.Unlock(); - } + perThreadPool.Release(perThread); + } } } diff --git a/src/Lucene.Net/Index/DocumentsWriterPerThreadPool.cs b/src/Lucene.Net/Index/DocumentsWriterPerThreadPool.cs index 1e356d8..5f89734 100644 --- a/src/Lucene.Net/Index/DocumentsWriterPerThreadPool.cs +++ b/src/Lucene.Net/Index/DocumentsWriterPerThreadPool.cs @@ -37,7 +37,8 @@ namespace Lucene.Net.Index /// is reusing the flushing <see cref="DocumentsWriterPerThread"/>s <see cref="ThreadState"/> with a /// new <see cref="DocumentsWriterPerThread"/> instance. /// </summary> - internal abstract class DocumentsWriterPerThreadPool + + internal sealed class DocumentsWriterPerThreadPool #if FEATURE_CLONEABLE : System.ICloneable #endif @@ -155,10 +156,13 @@ namespace Lucene.Net.Index private ThreadState[] threadStates; private volatile int numThreadStatesActive; - /// <summary> - /// Creates a new <see cref="DocumentsWriterPerThreadPool"/> with a given maximum of <see cref="ThreadState"/>s. - /// </summary> - internal DocumentsWriterPerThreadPool(int maxNumThreadStates) + private ThreadState[] freeList; + private volatile int freeCount; + + /// <summary> + /// Creates a new <see cref="DocumentsWriterPerThreadPool"/> with a given maximum of <see cref="ThreadState"/>s. + /// </summary> + internal DocumentsWriterPerThreadPool(int maxNumThreadStates) { if (maxNumThreadStates < 1) { @@ -170,26 +174,17 @@ namespace Lucene.Net.Index { threadStates[i] = new ThreadState(null); } - } + freeList = new ThreadState[maxNumThreadStates]; + } - public virtual object Clone() + public DocumentsWriterPerThreadPool Clone() { // We should only be cloned before being used: if (numThreadStatesActive != 0) { throw new InvalidOperationException("clone this object before it is used!"); } - - DocumentsWriterPerThreadPool clone; - - clone = (DocumentsWriterPerThreadPool)base.MemberwiseClone(); - - clone.threadStates = new ThreadState[threadStates.Length]; - for (int i = 0; i < threadStates.Length; i++) - { - clone.threadStates[i] = new ThreadState(null); - } - return clone; + return new DocumentsWriterPerThreadPool(threadStates.Length); } /// <summary> @@ -211,43 +206,39 @@ namespace Lucene.Net.Index /// </summary> /// <returns> a new <see cref="ThreadState"/> iff any new state is available otherwise /// <c>null</c> </returns> - public virtual ThreadState NewThreadState() + public ThreadState NewThreadState() { - lock (this) - { - if (numThreadStatesActive < threadStates.Length) - { - ThreadState threadState = threadStates[numThreadStatesActive]; - threadState.@Lock(); // lock so nobody else will get this ThreadState - bool unlock = true; - try - { - if (threadState.IsActive) - { - // unreleased thread states are deactivated during DW#close() - numThreadStatesActive++; // increment will publish the ThreadState + if (Debugging.AssertsEnabled) Debugging.Assert(numThreadStatesActive < threadStates.Length); + + ThreadState threadState = threadStates[numThreadStatesActive]; + threadState.Lock(); // lock so nobody else will get this ThreadState + bool unlock = true; + try + { + if (threadState.IsActive) + { + // unreleased thread states are deactivated during DW#close() + numThreadStatesActive++; // increment will publish the ThreadState + //System.out.println("activeCount=" + numThreadStatesActive); if (Debugging.AssertsEnabled) Debugging.Assert(threadState.dwpt == null); - unlock = false; - return threadState; - } - // unlock since the threadstate is not active anymore - we are closed! + unlock = false; + return threadState; + } + // we are closed: unlock since the threadstate is not active anymore if (Debugging.AssertsEnabled) Debugging.Assert(AssertUnreleasedThreadStatesInactive()); - return null; - } - finally - { - if (unlock) - { - // in any case make sure we unlock if we fail - threadState.Unlock(); - } - } - } - return null; - } - } - - private bool AssertUnreleasedThreadStatesInactive() + return null; + } + finally + { + if (unlock) + { + // in any case make sure we unlock if we fail + threadState.Unlock(); + } + } + } + + private bool AssertUnreleasedThreadStatesInactive() { lock (this) { @@ -270,7 +261,7 @@ namespace Lucene.Net.Index /// <summary> /// Deactivate all unreleased threadstates /// </summary> - internal virtual void DeactivateUnreleasedStates() + internal void DeactivateUnreleasedStates() { lock (this) { @@ -290,7 +281,7 @@ namespace Lucene.Net.Index } } - internal virtual DocumentsWriterPerThread Reset(ThreadState threadState, bool closed) + internal DocumentsWriterPerThread Reset(ThreadState threadState, bool closed) { if (Debugging.AssertsEnabled) Debugging.Assert(threadState.IsHeldByCurrentThread); DocumentsWriterPerThread dwpt = threadState.dwpt; @@ -305,24 +296,94 @@ namespace Lucene.Net.Index return dwpt; } - internal virtual void Recycle(DocumentsWriterPerThread dwpt) + internal void Recycle(DocumentsWriterPerThread dwpt) { // don't recycle DWPT by default } - // you cannot subclass this without being in o.a.l.index package anyway, so - // the class is already pkg-private... fix me: see LUCENE-4013 - public abstract ThreadState GetAndLock(Thread requestingThread, DocumentsWriter documentsWriter); // LUCENENET NOTE: Made public rather than internal - - /// <summary> - /// Returns the <i>i</i>th active <seealso cref="ThreadState"/> where <i>i</i> is the - /// given ord. - /// </summary> - /// <param name="ord"> - /// the ordinal of the <seealso cref="ThreadState"/> </param> - /// <returns> the <i>i</i>th active <seealso cref="ThreadState"/> where <i>i</i> is the - /// given ord. </returns> - internal virtual ThreadState GetThreadState(int ord) + // you cannot subclass this without being in o.a.l.index package anyway, so + // the class is already pkg-private... fix me: see LUCENE-4013 + public ThreadState GetAndLock(Thread requestingThread, DocumentsWriter documentsWriter) + { + ThreadState threadState = null; + lock (this) + { + for (;;) + { + if (freeCount > 0) + { + // Important that we are LIFO here! This way if number of concurrent indexing threads was once high, but has now reduced, we only use a + // limited number of thread states: + threadState = freeList[freeCount - 1]; + if (threadState.dwpt == null) + { + // This thread-state is not initialized, e.g. it + // was just flushed. See if we can instead find + // another free thread state that already has docs + // indexed. This way if incoming thread concurrency + // has decreased, we don't leave docs + // indefinitely buffered, tying up RAM. This + // will instead get those thread states flushed, + // freeing up RAM for larger segment flushes: + for (int i = 0; i < freeCount; i++) + { + if (freeList[i].dwpt != null) + { + // Use this one instead, and swap it with + // the un-initialized one: + ThreadState ts = freeList[i]; + freeList[i] = threadState; + threadState = ts; + break; + } + } + } + + freeCount--; + break; + } + else if (NumThreadStatesActive < threadStates.Length) + { + // ThreadState is already locked before return by this method: + return NewThreadState(); + } + else + { + // Wait until a thread state frees up: + Monitor.Wait(this); + } + } + } + + // This could take time, e.g. if the threadState is [briefly] checked for flushing: + threadState.Lock(); + + return threadState; + + } + + public void Release(ThreadState state) + { + state.Unlock(); + lock (this) + { + Debug.Assert(freeCount < freeList.Length); + freeList[freeCount++] = state; + // In case any thread is waiting, wake one of them up since we just released a thread state; notify() should be sufficient but we do + // notifyAll defensively: + Monitor.PulseAll(this); + } + } + + /// <summary> + /// Returns the <i>i</i>th active <seealso cref="ThreadState"/> where <i>i</i> is the + /// given ord. + /// </summary> + /// <param name="ord"> + /// the ordinal of the <seealso cref="ThreadState"/> </param> + /// <returns> the <i>i</i>th active <seealso cref="ThreadState"/> where <i>i</i> is the + /// given ord. </returns> + internal ThreadState GetThreadState(int ord) { return threadStates[ord]; } @@ -332,7 +393,7 @@ namespace Lucene.Net.Index /// waiting to acquire its lock or <c>null</c> if no <see cref="ThreadState"/> /// is yet visible to the calling thread. /// </summary> - internal virtual ThreadState MinContendedThreadState() + internal ThreadState MinContendedThreadState() { ThreadState minThreadState = null; int limit = numThreadStatesActive; @@ -352,7 +413,7 @@ namespace Lucene.Net.Index /// A deactivated <see cref="ThreadState"/> should not be used for indexing anymore. /// </summary> /// <returns> the number of currently deactivated <see cref="ThreadState"/> instances. </returns> - internal virtual int NumDeactivatedThreadStates() + internal int NumDeactivatedThreadStates() { int count = 0; for (int i = 0; i < threadStates.Length; i++) @@ -380,7 +441,7 @@ namespace Lucene.Net.Index /// if the parent <see cref="DocumentsWriter"/> is closed or aborted. /// </summary> /// <param name="threadState"> the state to deactivate </param> - internal virtual void DeactivateThreadState(ThreadState threadState) + internal void DeactivateThreadState(ThreadState threadState) { if (Debugging.AssertsEnabled) Debugging.Assert(threadState.IsActive); threadState.Deactivate(); diff --git a/src/Lucene.Net/Index/IndexWriterConfig.cs b/src/Lucene.Net/Index/IndexWriterConfig.cs index 79ffc7c..debc343 100644 --- a/src/Lucene.Net/Index/IndexWriterConfig.cs +++ b/src/Lucene.Net/Index/IndexWriterConfig.cs @@ -383,24 +383,24 @@ namespace Lucene.Net.Index } } - /// <summary> - /// Expert: Gets or sets the <see cref="DocumentsWriterPerThreadPool"/> instance used by the - /// <see cref="IndexWriter"/> to assign thread-states to incoming indexing threads. If no - /// <see cref="DocumentsWriterPerThreadPool"/> is set <see cref="IndexWriter"/> will use - /// <see cref="ThreadAffinityDocumentsWriterThreadPool"/> with max number of - /// thread-states set to <see cref="DEFAULT_MAX_THREAD_STATES"/> (see - /// <see cref="DEFAULT_MAX_THREAD_STATES"/>). - /// <para> - /// NOTE: The given <see cref="DocumentsWriterPerThreadPool"/> instance must not be used with - /// other <see cref="IndexWriter"/> instances once it has been initialized / associated with an - /// <see cref="IndexWriter"/>. - /// </para> - /// <para> - /// NOTE: this only takes effect when <see cref="IndexWriter"/> is first created.</para> - /// </summary> - // LUCENENET NOTE: We cannot override a getter and add a setter, - // so must declare it new. See: http://stackoverflow.com/q/82437 - new internal DocumentsWriterPerThreadPool IndexerThreadPool + /// <summary> + /// Expert: Gets or sets the <see cref="DocumentsWriterPerThreadPool"/> instance used by the + /// <see cref="IndexWriter"/> to assign thread-states to incoming indexing threads. If no + /// <see cref="DocumentsWriterPerThreadPool"/> is set <see cref="IndexWriter"/> will use + /// <see cref="DocumentsWriterPerThreadPool"/> with max number of + /// thread-states set to <see cref="DEFAULT_MAX_THREAD_STATES"/> (see + /// <see cref="DEFAULT_MAX_THREAD_STATES"/>). + /// <para> + /// NOTE: The given <see cref="DocumentsWriterPerThreadPool"/> instance must not be used with + /// other <see cref="IndexWriter"/> instances once it has been initialized / associated with an + /// <see cref="IndexWriter"/>. + /// </para> + /// <para> + /// NOTE: this only takes effect when <see cref="IndexWriter"/> is first created.</para> + /// </summary> + // LUCENENET NOTE: We cannot override a getter and add a setter, + // so must declare it new. See: http://stackoverflow.com/q/82437 + new internal DocumentsWriterPerThreadPool IndexerThreadPool { get => indexerThreadPool; set @@ -429,14 +429,17 @@ namespace Lucene.Net.Index { try { - return ((ThreadAffinityDocumentsWriterThreadPool)indexerThreadPool).MaxThreadStates; + return indexerThreadPool.MaxThreadStates; } catch (InvalidCastException cce) { throw new InvalidOperationException(cce.Message, cce); } } - set => this.indexerThreadPool = new ThreadAffinityDocumentsWriterThreadPool(value); + set + { + this.indexerThreadPool = new DocumentsWriterPerThreadPool(value); + } } /// <summary> diff --git a/src/Lucene.Net/Index/LiveIndexWriterConfig.cs b/src/Lucene.Net/Index/LiveIndexWriterConfig.cs index f031115..b564d45 100644 --- a/src/Lucene.Net/Index/LiveIndexWriterConfig.cs +++ b/src/Lucene.Net/Index/LiveIndexWriterConfig.cs @@ -169,7 +169,7 @@ namespace Lucene.Net.Index mergePolicy = new TieredMergePolicy(); flushPolicy = new FlushByRamOrCountsPolicy(); readerPooling = IndexWriterConfig.DEFAULT_READER_POOLING; - indexerThreadPool = new ThreadAffinityDocumentsWriterThreadPool(IndexWriterConfig.DEFAULT_MAX_THREAD_STATES); + indexerThreadPool = new DocumentsWriterPerThreadPool(IndexWriterConfig.DEFAULT_MAX_THREAD_STATES); perThreadHardLimitMB = IndexWriterConfig.DEFAULT_RAM_PER_THREAD_HARD_LIMIT_MB; } @@ -504,7 +504,7 @@ namespace Lucene.Net.Index { try { - return ((ThreadAffinityDocumentsWriterThreadPool)indexerThreadPool).MaxThreadStates; + return indexerThreadPool.MaxThreadStates; } catch (InvalidCastException cce) { diff --git a/src/Lucene.Net/Index/ThreadAffinityDocumentsWriterThreadPool.cs b/src/Lucene.Net/Index/ThreadAffinityDocumentsWriterThreadPool.cs deleted file mode 100644 index 58d4fb7..0000000 --- a/src/Lucene.Net/Index/ThreadAffinityDocumentsWriterThreadPool.cs +++ /dev/null @@ -1,95 +0,0 @@ -using Lucene.Net.Diagnostics; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Diagnostics; -using System.Threading; - -namespace Lucene.Net.Index -{ - /* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - - using ThreadState = Lucene.Net.Index.DocumentsWriterPerThreadPool.ThreadState; //javadoc - - /// <summary> - /// A <see cref="DocumentsWriterPerThreadPool"/> implementation that tries to assign an - /// indexing thread to the same <see cref="ThreadState"/> each time the thread tries to - /// obtain a <see cref="ThreadState"/>. Once a new <see cref="ThreadState"/> is created it is - /// associated with the creating thread. Subsequently, if the threads associated - /// <see cref="ThreadState"/> is not in use it will be associated with the requesting - /// thread. Otherwise, if the <see cref="ThreadState"/> is used by another thread - /// <see cref="ThreadAffinityDocumentsWriterThreadPool"/> tries to find the currently - /// minimal contended <seea cref="ThreadState"/>. - /// </summary> - internal class ThreadAffinityDocumentsWriterThreadPool : DocumentsWriterPerThreadPool - { - private IDictionary<Thread, ThreadState> threadBindings = new ConcurrentDictionary<Thread, ThreadState>(); - - /// <summary> - /// Creates a new <see cref="ThreadAffinityDocumentsWriterThreadPool"/> with a given maximum of <see cref="ThreadState"/>s. - /// </summary> - public ThreadAffinityDocumentsWriterThreadPool(int maxNumPerThreads) - : base(maxNumPerThreads) - { - if (Debugging.AssertsEnabled) Debugging.Assert(MaxThreadStates >= 1); - } - - public override ThreadState GetAndLock(Thread requestingThread, DocumentsWriter documentsWriter) - { - if (threadBindings.TryGetValue(requestingThread, out ThreadState threadState) && threadState.TryLock()) - { - return threadState; - } - ThreadState minThreadState = null; - - /* TODO -- another thread could lock the minThreadState we just got while - we should somehow prevent this. */ - // Find the state that has minimum number of threads waiting - minThreadState = MinContendedThreadState(); - if (minThreadState == null || minThreadState.HasQueuedThreads) - { - ThreadState newState = NewThreadState(); // state is already locked if non-null - if (newState != null) - { - if (Debugging.AssertsEnabled) Debugging.Assert(newState.IsHeldByCurrentThread); - threadBindings[requestingThread] = newState; - return newState; - } - else if (minThreadState == null) - { - /* - * no new threadState available we just take the minContented one - * this must return a valid thread state since we accessed the - * synced context in newThreadState() above. - */ - minThreadState = MinContendedThreadState(); - } - } - if (Debugging.AssertsEnabled) Debugging.Assert(minThreadState != null, () => "ThreadState is null"); - - minThreadState.@Lock(); - return minThreadState; - } - - public override object Clone() - { - ThreadAffinityDocumentsWriterThreadPool clone = (ThreadAffinityDocumentsWriterThreadPool)base.Clone(); - clone.threadBindings = new ConcurrentDictionary<Thread, ThreadState>(); - return clone; - } - } -} \ No newline at end of file diff --git a/src/Lucene.Net/Lucene.Net.csproj b/src/Lucene.Net/Lucene.Net.csproj index e218980..6d27802 100644 --- a/src/Lucene.Net/Lucene.Net.csproj +++ b/src/Lucene.Net/Lucene.Net.csproj @@ -117,6 +117,851 @@ <InternalsVisibleTo Include="Lucene.Net.Tests.Spatial" /> <InternalsVisibleTo Include="Lucene.Net.Tests.Suggest" /> <InternalsVisibleTo Include="Lucene.Net.Tests.TestFramework" /> + <Compile Include="Analysis\Analyzer.cs" /> + <Compile Include="Analysis\AnalyzerWrapper.cs" /> + <Compile Include="Analysis\CachingTokenFilter.cs" /> + <Compile Include="Analysis\CharFilter.cs" /> + <Compile Include="Analysis\NumericTokenStream.cs" /> + <Compile Include="Analysis\ReusableStringReader.cs" /> + <Compile Include="Analysis\Token.cs" /> + <Compile Include="Analysis\TokenAttributes\ICharTermAttribute.cs" /> + <Compile Include="Analysis\TokenAttributes\CharTermAttribute.cs" /> + <Compile Include="Analysis\TokenAttributes\FlagsAttribute.cs" /> + <Compile Include="Analysis\TokenAttributes\IFlagsAttribute.cs" /> + <Compile Include="Analysis\TokenAttributes\IKeywordAttribute.cs" /> + <Compile Include="Analysis\TokenAttributes\KeywordAttribute.cs" /> + <Compile Include="Analysis\TokenAttributes\IOffsetAttribute.cs" /> + <Compile Include="Analysis\TokenAttributes\OffsetAttribute.cs" /> + <Compile Include="Analysis\TokenAttributes\IPayloadAttribute.cs" /> + <Compile Include="Analysis\TokenAttributes\PayloadAttribute.cs" /> + <Compile Include="Analysis\TokenAttributes\IPositionIncrementAttribute.cs" /> + <Compile Include="Analysis\TokenAttributes\PositionIncrementAttribute.cs" /> + <Compile Include="Analysis\TokenAttributes\IPositionLengthAttribute.cs" /> + <Compile Include="Analysis\TokenAttributes\PositionLengthAttribute.cs" /> + <Compile Include="Analysis\TokenAttributes\ITermToBytesRefAttribute.cs" /> + <Compile Include="Analysis\TokenAttributes\ITypeAttribute.cs" /> + <Compile Include="Analysis\TokenAttributes\TypeAttribute.cs" /> + <Compile Include="Analysis\TokenFilter.cs" /> + <Compile Include="Analysis\Tokenizer.cs" /> + <Compile Include="Analysis\TokenStream.cs" /> + <Compile Include="Analysis\TokenStreamToAutomaton.cs" /> + <Compile Include="Codecs\BlockTermState.cs" /> + <Compile Include="Codecs\BlockTreeTermsReader.cs" /> + <Compile Include="Codecs\BlockTreeTermsWriter.cs" /> + <Compile Include="Codecs\Codec.cs" /> + <Compile Include="Codecs\CodecUtil.cs" /> + <Compile Include="Codecs\Compressing\CompressingStoredFieldsFormat.cs" /> + <Compile Include="Codecs\Compressing\CompressingStoredFieldsIndexReader.cs" /> + <Compile Include="Codecs\Compressing\CompressingStoredFieldsIndexWriter.cs" /> + <Compile Include="Codecs\Compressing\CompressingStoredFieldsReader.cs" /> + <Compile Include="Codecs\Compressing\CompressingStoredFieldsWriter.cs" /> + <Compile Include="Codecs\Compressing\CompressingTermVectorsFormat.cs" /> + <Compile Include="Codecs\Compressing\CompressingTermVectorsReader.cs" /> + <Compile Include="Codecs\Compressing\CompressingTermVectorsWriter.cs" /> + <Compile Include="Codecs\Compressing\CompressionMode.cs" /> + <Compile Include="Codecs\Compressing\Compressor.cs" /> + <Compile Include="Codecs\Compressing\Decompressor.cs" /> + <Compile Include="Codecs\Compressing\LZ4.cs" /> + <Compile Include="Codecs\DocValuesConsumer.cs" /> + <Compile Include="Codecs\DocValuesFormat.cs" /> + <Compile Include="Codecs\DocValuesProducer.cs" /> + <Compile Include="Codecs\FieldInfosFormat.cs" /> + <Compile Include="Codecs\FieldInfosReader.cs" /> + <Compile Include="Codecs\FieldInfosWriter.cs" /> + <Compile Include="Codecs\FieldsConsumer.cs" /> + <Compile Include="Codecs\FieldsProducer.cs" /> + <Compile Include="Codecs\FilterCodec.cs" /> + <Compile Include="Codecs\LiveDocsFormat.cs" /> + <Compile Include="Codecs\Lucene3x\Lucene3xCodec.cs" /> + <Compile Include="Codecs\Lucene3x\Lucene3xFieldInfosFormat.cs" /> + <Compile Include="Codecs\Lucene3x\Lucene3xFieldInfosReader.cs" /> + <Compile Include="Codecs\Lucene3x\Lucene3xFields.cs" /> + <Compile Include="Codecs\Lucene3x\Lucene3xNormsFormat.cs" /> + <Compile Include="Codecs\Lucene3x\Lucene3xNormsProducer.cs" /> + <Compile Include="Codecs\Lucene3x\Lucene3xPostingsFormat.cs" /> + <Compile Include="Codecs\Lucene3x\Lucene3xSegmentInfoFormat.cs" /> + <Compile Include="Codecs\Lucene3x\Lucene3xSegmentInfoReader.cs" /> + <Compile Include="Codecs\Lucene3x\Lucene3xSkipListReader.cs" /> + <Compile Include="Codecs\Lucene3x\Lucene3xStoredFieldsFormat.cs" /> + <Compile Include="Codecs\Lucene3x\Lucene3xStoredFieldsReader.cs" /> + <Compile Include="Codecs\Lucene3x\Lucene3xTermVectorsFormat.cs" /> + <Compile Include="Codecs\Lucene3x\Lucene3xTermVectorsReader.cs" /> + <Compile Include="Codecs\Lucene3x\SegmentTermDocs.cs" /> + <Compile Include="Codecs\Lucene3x\SegmentTermEnum.cs" /> + <Compile Include="Codecs\Lucene3x\SegmentTermPositions.cs" /> + <Compile Include="Codecs\Lucene3x\TermBuffer.cs" /> + <Compile Include="Codecs\Lucene3x\TermInfo.cs" /> + <Compile Include="Codecs\Lucene3x\TermInfosReader.cs" /> + <Compile Include="Codecs\Lucene3x\TermInfosReaderIndex.cs" /> + <Compile Include="Codecs\Lucene40\BitVector.cs" /> + <Compile Include="Codecs\Lucene40\Lucene40Codec.cs" /> + <Compile Include="Codecs\Lucene40\Lucene40DocValuesFormat.cs" /> + <Compile Include="Codecs\Lucene40\Lucene40DocValuesReader.cs" /> + <Compile Include="Codecs\Lucene40\Lucene40FieldInfosFormat.cs" /> + <Compile Include="Codecs\Lucene40\Lucene40FieldInfosReader.cs" /> + <Compile Include="Codecs\Lucene40\Lucene40LiveDocsFormat.cs" /> + <Compile Include="Codecs\Lucene40\Lucene40NormsFormat.cs" /> + <Compile Include="Codecs\Lucene40\Lucene40PostingsBaseFormat.cs" /> + <Compile Include="Codecs\Lucene40\Lucene40PostingsFormat.cs" /> + <Compile Include="Codecs\Lucene40\Lucene40PostingsReader.cs" /> + <Compile Include="Codecs\Lucene40\Lucene40SegmentInfoFormat.cs" /> + <Compile Include="Codecs\Lucene40\Lucene40SegmentInfoReader.cs" /> + <Compile Include="Codecs\Lucene40\Lucene40SegmentInfoWriter.cs" /> + <Compile Include="Codecs\Lucene40\Lucene40SkipListReader.cs" /> + <Compile Include="Codecs\Lucene40\Lucene40StoredFieldsFormat.cs" /> + <Compile Include="Codecs\Lucene40\Lucene40StoredFieldsReader.cs" /> + <Compile Include="Codecs\Lucene40\Lucene40StoredFieldsWriter.cs" /> + <Compile Include="Codecs\Lucene40\Lucene40TermVectorsFormat.cs" /> + <Compile Include="Codecs\Lucene40\Lucene40TermVectorsReader.cs" /> + <Compile Include="Codecs\Lucene40\Lucene40TermVectorsWriter.cs" /> + <Compile Include="Codecs\Lucene41\ForUtil.cs" /> + <Compile Include="Codecs\Lucene41\Lucene41Codec.cs" /> + <Compile Include="Codecs\Lucene41\Lucene41PostingsBaseFormat.cs" /> + <Compile Include="Codecs\Lucene41\Lucene41PostingsFormat.cs" /> + <Compile Include="Codecs\Lucene41\Lucene41PostingsReader.cs" /> + <Compile Include="Codecs\Lucene41\Lucene41PostingsWriter.cs" /> + <Compile Include="Codecs\Lucene41\Lucene41SkipReader.cs" /> + <Compile Include="Codecs\Lucene41\Lucene41SkipWriter.cs" /> + <Compile Include="Codecs\Lucene41\Lucene41StoredFieldsFormat.cs" /> + <Compile Include="Codecs\Lucene42\Lucene42Codec.cs" /> + <Compile Include="Codecs\Lucene42\Lucene42DocValuesFormat.cs" /> + <Compile Include="Codecs\Lucene42\Lucene42DocValuesProducer.cs" /> + <Compile Include="Codecs\Lucene42\Lucene42FieldInfosFormat.cs" /> + <Compile Include="Codecs\Lucene42\Lucene42FieldInfosReader.cs" /> + <Compile Include="Codecs\Lucene42\Lucene42NormsConsumer.cs" /> + <Compile Include="Codecs\Lucene42\Lucene42NormsFormat.cs" /> + <Compile Include="Codecs\Lucene42\Lucene42TermVectorsFormat.cs" /> + <Compile Include="Codecs\Lucene45\Lucene45Codec.cs" /> + <Compile Include="Codecs\Lucene45\Lucene45DocValuesConsumer.cs" /> + <Compile Include="Codecs\Lucene45\Lucene45DocValuesFormat.cs" /> + <Compile Include="Codecs\Lucene45\Lucene45DocValuesProducer.cs" /> + <Compile Include="Codecs\Lucene46\Lucene46Codec.cs" /> + <Compile Include="Codecs\Lucene46\Lucene46FieldInfosFormat.cs" /> + <Compile Include="Codecs\Lucene46\Lucene46FieldInfosReader.cs" /> + <Compile Include="Codecs\Lucene46\Lucene46FieldInfosWriter.cs" /> + <Compile Include="Codecs\Lucene46\Lucene46SegmentInfoFormat.cs" /> + <Compile Include="Codecs\Lucene46\Lucene46SegmentInfoReader.cs" /> + <Compile Include="Codecs\Lucene46\Lucene46SegmentInfoWriter.cs" /> + <Compile Include="Codecs\MappingMultiDocsAndPositionsEnum.cs" /> + <Compile Include="Codecs\MappingMultiDocsEnum.cs" /> + <Compile Include="Codecs\MultiLevelSkipListReader.cs" /> + <Compile Include="Codecs\MultiLevelSkipListWriter.cs" /> + <Compile Include="Codecs\NormsFormat.cs" /> + <Compile Include="Codecs\PerField\PerFieldDocValuesFormat.cs" /> + <Compile Include="Codecs\PerField\PerFieldPostingsFormat.cs" /> + <Compile Include="Codecs\PostingsBaseFormat.cs" /> + <Compile Include="Codecs\PostingsConsumer.cs" /> + <Compile Include="Codecs\PostingsFormat.cs" /> + <Compile Include="Codecs\PostingsReaderBase.cs" /> + <Compile Include="Codecs\PostingsWriterBase.cs" /> + <Compile Include="Codecs\SegmentInfoFormat.cs" /> + <Compile Include="Codecs\SegmentInfoReader.cs" /> + <Compile Include="Codecs\SegmentInfoWriter.cs" /> + <Compile Include="Codecs\StoredFieldsFormat.cs" /> + <Compile Include="Codecs\StoredFieldsReader.cs" /> + <Compile Include="Codecs\StoredFieldsWriter.cs" /> + <Compile Include="Codecs\TermsConsumer.cs" /> + <Compile Include="Codecs\TermStats.cs" /> + <Compile Include="Codecs\TermVectorsFormat.cs" /> + <Compile Include="Codecs\TermVectorsReader.cs" /> + <Compile Include="Codecs\TermVectorsWriter.cs" /> + <Compile Include="Document\BinaryDocValuesField.cs" /> + <Compile Include="Document\ByteDocValuesField.cs" /> + <Compile Include="Document\CompressionTools.cs" /> + <Compile Include="Document\DateTools.cs" /> + <Compile Include="Document\DerefBytesDocValuesField.cs" /> + <Compile Include="Document\Document.cs" /> + <Compile Include="Document\DocumentStoredFieldVisitor.cs" /> + <Compile Include="Document\DoubleDocValuesField.cs" /> + <Compile Include="Document\DoubleField.cs" /> + <Compile Include="Document\Field.cs" /> + <Compile Include="Document\FieldType.cs" /> + <Compile Include="Document\FloatDocValuesField.cs" /> + <Compile Include="Document\FloatField.cs" /> + <Compile Include="Document\IntDocValuesField.cs" /> + <Compile Include="Document\IntField.cs" /> + <Compile Include="Document\LongDocValuesField.cs" /> + <Compile Include="Document\LongField.cs" /> + <Compile Include="Document\NumericDocValuesField.cs" /> + <Compile Include="Document\PackedLongDocValuesField.cs" /> + <Compile Include="Document\ShortDocValuesField.cs" /> + <Compile Include="Document\SortedBytesDocValuesField.cs" /> + <Compile Include="Document\SortedDocValuesField.cs" /> + <Compile Include="Document\SortedSetDocValuesField.cs" /> + <Compile Include="Document\StoredField.cs" /> + <Compile Include="Document\StraightBytesDocValuesField.cs" /> + <Compile Include="Document\StringField.cs" /> + <Compile Include="Document\TextField.cs" /> + <Compile Include="Index\AtomicReader.cs" /> + <Compile Include="Index\AtomicReaderContext.cs" /> + <Compile Include="Index\AutomatonTermsEnum.cs" /> + <Compile Include="Index\BaseCompositeReader.cs" /> + <Compile Include="Index\BinaryDocValues.cs" /> + <Compile Include="Index\BinaryDocValuesFieldUpdates.cs" /> + <Compile Include="Index\BinaryDocValuesWriter.cs" /> + <Compile Include="Index\BitsSlice.cs" /> + <Compile Include="Index\BufferedUpdates.cs" /> + <Compile Include="Index\BufferedUpdatesStream.cs" /> + <Compile Include="Index\ByteSliceReader.cs" /> + <Compile Include="Index\ByteSliceWriter.cs" /> + <Compile Include="Index\CheckIndex.cs" /> + <Compile Include="Index\CoalescedUpdates.cs" /> + <Compile Include="Index\CompositeReader.cs" /> + <Compile Include="Index\CompositeReaderContext.cs" /> + <Compile Include="Index\ConcurrentMergeScheduler.cs" /> + <Compile Include="Index\CorruptIndexException.cs" /> + <Compile Include="Index\DirectoryReader.cs" /> + <Compile Include="Index\DocConsumer.cs" /> + <Compile Include="Index\DocFieldConsumer.cs" /> + <Compile Include="Index\DocFieldConsumerPerField.cs" /> + <Compile Include="Index\DocFieldProcessor.cs" /> + <Compile Include="Index\DocFieldProcessorPerField.cs" /> + <Compile Include="Index\DocInverter.cs" /> + <Compile Include="Index\DocInverterPerField.cs" /> + <Compile Include="Index\DocsAndPositionsEnum.cs" /> + <Compile Include="Index\DocsEnum.cs" /> + <Compile Include="Index\DocTermOrds.cs" /> + <Compile Include="Index\DocumentsWriter.cs" /> + <Compile Include="Index\DocumentsWriterDeleteQueue.cs" /> + <Compile Include="Index\DocumentsWriterFlushControl.cs" /> + <Compile Include="Index\DocumentsWriterFlushQueue.cs" /> + <Compile Include="Index\DocumentsWriterPerThread.cs" /> + <Compile Include="Index\DocumentsWriterPerThreadPool.cs" /> + <Compile Include="Index\DocumentsWriterStallControl.cs" /> + <Compile Include="Index\DocValues.cs" /> + <Compile Include="Index\DocValuesFieldUpdates.cs" /> + <Compile Include="Index\DocValuesProcessor.cs" /> + <Compile Include="Index\DocValuesUpdate.cs" /> + <Compile Include="Index\DocValuesWriter.cs" /> + <Compile Include="Index\FieldInfo.cs" /> + <Compile Include="Index\FieldInfos.cs" /> + <Compile Include="Index\FieldInvertState.cs" /> + <Compile Include="Index\Fields.cs" /> + <Compile Include="Index\FilterAtomicReader.cs" /> + <Compile Include="Index\FilterDirectoryReader.cs" /> + <Compile Include="Index\FilteredTermsEnum.cs" /> + <Compile Include="Index\FlushByRamOrCountsPolicy.cs" /> + <Compile Include="Index\FlushPolicy.cs" /> + <Compile Include="Index\FreqProxTermsWriter.cs" /> + <Compile Include="Index\FreqProxTermsWriterPerField.cs" /> + <Compile Include="Index\FrozenBufferedUpdates.cs" /> + <Compile Include="Index\IConcurrentMergeScheduler.cs" /> + <Compile Include="Index\IMergeScheduler.cs" /> + <Compile Include="Index\IndexableField.cs" /> + <Compile Include="Index\IndexableFieldType.cs" /> + <Compile Include="Index\IndexCommit.cs" /> + <Compile Include="Index\IndexDeletionPolicy.cs" /> + <Compile Include="Index\IndexFileDeleter.cs" /> + <Compile Include="Index\IndexFileNames.cs" /> + <Compile Include="Index\IndexFormatTooNewException.cs" /> + <Compile Include="Index\IndexFormatTooOldException.cs" /> + <Compile Include="Index\IndexNotFoundException.cs" /> + <Compile Include="Index\IndexReader.cs" /> + <Compile Include="Index\IndexReaderContext.cs" /> + <Compile Include="Index\IndexUpgrader.cs" /> + <Compile Include="Index\IndexWriter.cs" /> + <Compile Include="Index\IndexWriterConfig.cs" /> + <Compile Include="Index\InvertedDocConsumer.cs" /> + <Compile Include="Index\InvertedDocConsumerPerField.cs" /> + <Compile Include="Index\InvertedDocEndConsumer.cs" /> + <Compile Include="Index\InvertedDocEndConsumerPerField.cs" /> + <Compile Include="Index\KeepOnlyLastCommitDeletionPolicy.cs" /> + <Compile Include="Index\LiveIndexWriterConfig.cs" /> + <Compile Include="Index\LogByteSizeMergePolicy.cs" /> + <Compile Include="Index\LogDocMergePolicy.cs" /> + <Compile Include="Index\LogMergePolicy.cs" /> + <Compile Include="Index\MergePolicy.cs" /> + <Compile Include="Index\MergeScheduler.cs" /> + <Compile Include="Index\MergeState.cs" /> + <Compile Include="Index\MergeTrigger.cs" /> + <Compile Include="Index\MultiBits.cs" /> + <Compile Include="Index\MultiDocsAndPositionsEnum.cs" /> + <Compile Include="Index\MultiDocsEnum.cs" /> + <Compile Include="Index\MultiDocValues.cs" /> + <Compile Include="Index\MultiFields.cs" /> + <Compile Include="Index\MultiReader.cs" /> + <Compile Include="Index\MultiTerms.cs" /> + <Compile Include="Index\MultiTermsEnum.cs" /> + <Compile Include="Index\NoDeletionPolicy.cs" /> + <Compile Include="Index\NoMergePolicy.cs" /> + <Compile Include="Index\NoMergeScheduler.cs" /> + <Compile Include="Index\NormsConsumer.cs" /> + <Compile Include="Index\NormsConsumerPerField.cs" /> + <Compile Include="Index\NumericDocValues.cs" /> + <Compile Include="Index\NumericDocValuesFieldUpdates.cs" /> + <Compile Include="Index\NumericDocValuesWriter.cs" /> + <Compile Include="Index\OrdTermState.cs" /> + <Compile Include="Index\ParallelAtomicReader.cs" /> + <Compile Include="Index\ParallelCompositeReader.cs" /> + <Compile Include="Index\ParallelPostingsArray.cs" /> + <Compile Include="Index\PersistentSnapshotDeletionPolicy.cs" /> + <Compile Include="Index\PrefixCodedTerms.cs" /> + <Compile Include="Index\RandomAccessOrds.cs" /> + <Compile Include="Index\ReaderManager.cs" /> + <Compile Include="Index\ReadersAndUpdates.cs" /> + <Compile Include="Index\ReaderSlice.cs" /> + <Compile Include="Index\ReaderUtil.cs" /> + <Compile Include="Index\SegmentCommitInfo.cs" /> + <Compile Include="Index\SegmentCoreReaders.cs" /> + <Compile Include="Index\SegmentDocValues.cs" /> + <Compile Include="Index\SegmentInfo.cs" /> + <Compile Include="Index\SegmentInfos.cs" /> + <Compile Include="Index\SegmentMerger.cs" /> + <Compile Include="Index\SegmentReader.cs" /> + <Compile Include="Index\SegmentReadState.cs" /> + <Compile Include="Index\SegmentWriteState.cs" /> + <Compile Include="Index\SerialMergeScheduler.cs" /> + <Compile Include="Index\SimpleMergedSegmentWarmer.cs" /> + <Compile Include="Index\SingleTermsEnum.cs" /> + <Compile Include="Index\SingletonSortedSetDocValues.cs" /> + <Compile Include="Index\SlowCompositeReaderWrapper.cs" /> + <Compile Include="Index\SnapshotDeletionPolicy.cs" /> + <Compile Include="Index\SortedDocValues.cs" /> + <Compile Include="Index\SortedDocValuesTermsEnum.cs" /> + <Compile Include="Index\SortedDocValuesWriter.cs" /> + <Compile Include="Index\SortedSetDocValues.cs" /> + <Compile Include="Index\SortedSetDocValuesTermsEnum.cs" /> + <Compile Include="Index\SortedSetDocValuesWriter.cs" /> + <Compile Include="Index\StandardDirectoryReader.cs" /> + <Compile Include="Index\StoredFieldsConsumer.cs" /> + <Compile Include="Index\StoredFieldsProcessor.cs" /> + <Compile Include="Index\StoredFieldVisitor.cs" /> + <Compile Include="Index\TaskMergeScheduler.cs" /> + <Compile Include="Index\Term.cs" /> + <Compile Include="Index\TermContext.cs" /> + <Compile Include="Index\Terms.cs" /> + <Compile Include="Index\TermsEnum.cs" /> + <Compile Include="Index\TermsHash.cs" /> + <Compile Include="Index\TermsHashConsumer.cs" /> + <Compile Include="Index\TermsHashConsumerPerField.cs" /> + <Compile Include="Index\TermsHashPerField.cs" /> + <Compile Include="Index\TermState.cs" /> + <Compile Include="Index\TermVectorsConsumer.cs" /> + <Compile Include="Index\TermVectorsConsumerPerField.cs" /> + <Compile Include="Index\TieredMergePolicy.cs" /> + <Compile Include="Index\TrackingIndexWriter.cs" /> + <Compile Include="Index\TwoPhaseCommit.cs" /> + <Compile Include="Index\TwoPhaseCommitTool.cs" /> + <Compile Include="Index\TwoStoredFieldsConsumers.cs" /> + <Compile Include="Index\UpgradeIndexMergePolicy.cs" /> + <Compile Include="LucenePackage.cs" /> + <Compile Include="Support\IO\Compression\LZOCompressor.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="Search\AutomatonQuery.cs" /> + <Compile Include="Search\BitsFilteredDocIdSet.cs" /> + <Compile Include="Search\BooleanClause.cs" /> + <Compile Include="Search\BooleanQuery.cs" /> + <Compile Include="Search\BooleanScorer.cs" /> + <Compile Include="Search\BooleanScorer2.cs" /> + <Compile Include="Search\BoostAttribute.cs" /> + <Compile Include="Search\BoostAttributeImpl.cs" /> + <Compile Include="Search\BulkScorer.cs" /> + <Compile Include="Search\CachingCollector.cs" /> + <Compile Include="Search\CachingWrapperFilter.cs" /> + <Compile Include="Search\CollectionStatistics.cs" /> + <Compile Include="Search\CollectionTerminatedException.cs" /> + <Compile Include="Search\Collector.cs" /> + <Compile Include="Search\ComplexExplanation.cs" /> + <Compile Include="Search\ConjunctionScorer.cs" /> + <Compile Include="Search\ConstantScoreAutoRewrite.cs" /> + <Compile Include="Search\ConstantScoreQuery.cs" /> + <Compile Include="Search\ControlledRealTimeReopenThread.cs" /> + <Compile Include="Search\DisjunctionMaxQuery.cs" /> + <Compile Include="Search\DisjunctionMaxScorer.cs" /> + <Compile Include="Search\DisjunctionScorer.cs" /> + <Compile Include="Search\DisjunctionSumScorer.cs" /> + <Compile Include="Search\DocIdSet.cs" /> + <Compile Include="Search\DocIdSetIterator.cs" /> + <Compile Include="Search\DocTermOrdsRangeFilter.cs" /> + <Compile Include="Search\DocTermOrdsRewriteMethod.cs" /> + <Compile Include="Search\ExactPhraseScorer.cs" /> + <Compile Include="Search\Explanation.cs" /> + <Compile Include="Search\FakeScorer.cs" /> + <Compile Include="Search\FieldCache.cs" /> + <Compile Include="Search\FieldCacheDocIdSet.cs" /> + <Compile Include="Search\FieldCacheImpl.cs" /> + <Compile Include="Search\FieldCacheRangeFilter.cs" /> + <Compile Include="Search\FieldCacheRewriteMethod.cs" /> + <Compile Include="Search\FieldCacheTermsFilter.cs" /> + <Compile Include="Search\FieldComparator.cs" /> + <Compile Include="Search\FieldComparatorSource.cs" /> + <Compile Include="Search\FieldDoc.cs" /> + <Compile Include="Search\FieldValueFilter.cs" /> + <Compile Include="Search\FieldValueHitQueue.cs" /> + <Compile Include="Search\Filter.cs" /> + <Compile Include="Search\FilteredDocIdSet.cs" /> + <Compile Include="Search\FilteredDocIdSetIterator.cs" /> + <Compile Include="Search\FilteredQuery.cs" /> + <Compile Include="Search\FuzzyQuery.cs" /> + <Compile Include="Search\FuzzyTermsEnum.cs" /> + <Compile Include="Search\HitQueue.cs" /> + <Compile Include="Search\IndexSearcher.cs" /> + <Compile Include="Search\LiveFieldValues.cs" /> + <Compile Include="Search\MatchAllDocsQuery.cs" /> + <Compile Include="Search\MaxNonCompetitiveBoostAttribute.cs" /> + <Compile Include="Search\MaxNonCompetitiveBoostAttributeImpl.cs" /> + <Compile Include="Search\MinShouldMatchSumScorer.cs" /> + <Compile Include="Search\MultiCollector.cs" /> + <Compile Include="Search\MultiPhraseQuery.cs" /> + <Compile Include="Search\MultiTermQuery.cs" /> + <Compile Include="Search\MultiTermQueryWrapperFilter.cs" /> + <Compile Include="Search\NGramPhraseQuery.cs" /> + <Compile Include="Search\NumericRangeFilter.cs" /> + <Compile Include="Search\NumericRangeQuery.cs" /> + <Compile Include="Search\Payloads\AveragePayloadFunction.cs" /> + <Compile Include="Search\Payloads\MaxPayloadFunction.cs" /> + <Compile Include="Search\Payloads\MinPayloadFunction.cs" /> + <Compile Include="Search\Payloads\PayloadFunction.cs" /> + <Compile Include="Search\Payloads\PayloadNearQuery.cs" /> + <Compile Include="Search\Payloads\PayloadSpanUtil.cs" /> + <Compile Include="Search\Payloads\PayloadTermQuery.cs" /> + <Compile Include="Search\PhrasePositions.cs" /> + <Compile Include="Search\PhraseQuery.cs" /> + <Compile Include="Search\PhraseQueue.cs" /> + <Compile Include="Search\PositiveScoresOnlyCollector.cs" /> + <Compile Include="Search\PrefixFilter.cs" /> + <Compile Include="Search\PrefixQuery.cs" /> + <Compile Include="Search\PrefixTermsEnum.cs" /> + <Compile Include="Search\Query.cs" /> + <Compile Include="Search\QueryRescorer.cs" /> + <Compile Include="Search\QueryWrapperFilter.cs" /> + <Compile Include="Search\ReferenceManager.cs" /> + <Compile Include="Search\RegexpQuery.cs" /> + <Compile Include="Search\ReqExclScorer.cs" /> + <Compile Include="Search\ReqOptSumScorer.cs" /> + <Compile Include="Search\Rescorer.cs" /> + <Compile Include="Search\ScoreCachingWrappingScorer.cs" /> + <Compile Include="Search\ScoreDoc.cs" /> + <Compile Include="Search\Scorer.cs" /> + <Compile Include="Search\ScoringRewrite.cs" /> + <Compile Include="Search\SearcherFactory.cs" /> + <Compile Include="Search\SearcherLifetimeManager.cs" /> + <Compile Include="Search\SearcherManager.cs" /> + <Compile Include="Search\Similarities\AfterEffect.cs" /> + <Compile Include="Search\Similarities\AfterEffectB.cs" /> + <Compile Include="Search\Similarities\AfterEffectL.cs" /> + <Compile Include="Search\Similarities\BasicModel.cs" /> + <Compile Include="Search\Similarities\BasicModelBE.cs" /> + <Compile Include="Search\Similarities\BasicModelD.cs" /> + <Compile Include="Search\Similarities\BasicModelG.cs" /> + <Compile Include="Search\Similarities\BasicModelIF.cs" /> + <Compile Include="Search\Similarities\BasicModelIn.cs" /> + <Compile Include="Search\Similarities\BasicModelIne.cs" /> + <Compile Include="Search\Similarities\BasicModelP.cs" /> + <Compile Include="Search\Similarities\BasicStats.cs" /> + <Compile Include="Search\Similarities\BM25Similarity.cs" /> + <Compile Include="Search\Similarities\DefaultSimilarity.cs" /> + <Compile Include="Search\Similarities\DFRSimilarity.cs" /> + <Compile Include="Search\Similarities\Distribution.cs" /> + <Compile Include="Search\Similarities\DistributionLL.cs" /> + <Compile Include="Search\Similarities\DistributionSPL.cs" /> + <Compile Include="Search\Similarities\IBSimilarity.cs" /> + <Compile Include="Search\Similarities\Lambda.cs" /> + <Compile Include="Search\Similarities\LambdaDF.cs" /> + <Compile Include="Search\Similarities\LambdaTTF.cs" /> + <Compile Include="Search\Similarities\LMDirichletSimilarity.cs" /> + <Compile Include="Search\Similarities\LMJelinekMercerSimilarity.cs" /> + <Compile Include="Search\Similarities\LMSimilarity.cs" /> + <Compile Include="Search\Similarities\MultiSimilarity.cs" /> + <Compile Include="Search\Similarities\Normalization.cs" /> + <Compile Include="Search\Similarities\NormalizationH1.cs" /> + <Compile Include="Search\Similarities\NormalizationH2.cs" /> + <Compile Include="Search\Similarities\NormalizationH3.cs" /> + <Compile Include="Search\Similarities\NormalizationZ.cs" /> + <Compile Include="Search\Similarities\PerFieldSimilarityWrapper.cs" /> + <Compile Include="Search\Similarities\Similarity.cs" /> + <Compile Include="Search\Similarities\SimilarityBase.cs" /> + <Compile Include="Search\Similarities\TFIDFSimilarity.cs" /> + <Compile Include="Search\SloppyPhraseScorer.cs" /> + <Compile Include="Search\Sort.cs" /> + <Compile Include="Search\SortField.cs" /> + <Compile Include="Search\SortRescorer.cs" /> + <Compile Include="Search\Spans\FieldMaskingSpanQuery.cs" /> + <Compile Include="Search\Spans\NearSpansOrdered.cs" /> + <Compile Include="Search\Spans\NearSpansUnordered.cs" /> + <Compile Include="Search\Spans\SpanFirstQuery.cs" /> + <Compile Include="Search\Spans\SpanMultiTermQueryWrapper.cs" /> + <Compile Include="Search\Spans\SpanNearPayloadCheckQuery.cs" /> + <Compile Include="Search\Spans\SpanNearQuery.cs" /> + <Compile Include="Search\Spans\SpanNotQuery.cs" /> + <Compile Include="Search\Spans\SpanOrQuery.cs" /> + <Compile Include="Search\Spans\SpanPayloadCheckQuery.cs" /> + <Compile Include="Search\Spans\SpanPositionCheckQuery.cs" /> + <Compile Include="Search\Spans\SpanPositionRangeQuery.cs" /> + <Compile Include="Search\Spans\SpanQuery.cs" /> + <Compile Include="Search\Spans\Spans.cs" /> + <Compile Include="Search\Spans\SpanScorer.cs" /> + <Compile Include="Search\Spans\SpanTermQuery.cs" /> + <Compile Include="Search\Spans\SpanWeight.cs" /> + <Compile Include="Search\Spans\TermSpans.cs" /> + <Compile Include="Search\TermCollectingRewrite.cs" /> + <Compile Include="Search\TermQuery.cs" /> + <Compile Include="Search\TermRangeFilter.cs" /> + <Compile Include="Search\TermRangeQuery.cs" /> + <Compile Include="Search\TermRangeTermsEnum.cs" /> + <Compile Include="Search\TermScorer.cs" /> + <Compile Include="Search\TermStatistics.cs" /> + <Compile Include="Search\TimeLimitingCollector.cs" /> + <Compile Include="Search\TopDocs.cs" /> + <Compile Include="Search\TopDocsCollector.cs" /> + <Compile Include="Search\TopFieldCollector.cs" /> + <Compile Include="Search\TopFieldDocs.cs" /> + <Compile Include="Search\TopScoreDocCollector.cs" /> + <Compile Include="Search\TopTermsRewrite.cs" /> + <Compile Include="Search\TotalHitCountCollector.cs" /> + <Compile Include="Search\Weight.cs" /> + <Compile Include="Search\WildcardQuery.cs" /> + <Compile Include="Store\AlreadyClosedException.cs" /> + <Compile Include="Store\BaseDirectory.cs" /> + <Compile Include="Store\BufferedChecksum.cs" /> + <Compile Include="Store\BufferedChecksumIndexInput.cs" /> + <Compile Include="Store\BufferedIndexInput.cs" /> + <Compile Include="Store\BufferedIndexOutput.cs" /> + <Compile Include="Store\ByteArrayDataInput.cs" /> + <Compile Include="Store\ByteArrayDataOutput.cs" /> + <Compile Include="Store\ByteBufferIndexInput.cs" /> + <Compile Include="Store\ChecksumIndexInput.cs" /> + <Compile Include="Store\CompoundFileDirectory.cs" /> + <Compile Include="Store\CompoundFileWriter.cs" /> + <Compile Include="Store\DataInput.cs" /> + <Compile Include="Store\DataOutput.cs" /> + <Compile Include="Store\Directory.cs" /> + <Compile Include="Store\FileSwitchDirectory.cs" /> + <Compile Include="Store\FilterDirectory.cs" /> + <Compile Include="Store\FlushInfo.cs" /> + <Compile Include="Store\FSDirectory.cs" /> + <Compile Include="Store\FSLockFactory.cs" /> + <Compile Include="Store\IndexInput.cs" /> + <Compile Include="Store\IndexOutput.cs" /> + <Compile Include="Store\InputStreamDataInput.cs" /> + <Compile Include="Store\IOContext.cs" /> + <Compile Include="Store\Lock.cs" /> + <Compile Include="Store\LockFactory.cs" /> + <Compile Include="Store\LockObtainFailedException.cs" /> + <Compile Include="Store\LockReleaseFailedException.cs" /> + <Compile Include="Store\LockStressTest.cs" /> + <Compile Include="Store\LockVerifyServer.cs" /> + <Compile Include="Store\MergeInfo.cs" /> + <Compile Include="Store\MMapDirectory.cs" /> + <Compile Include="Store\NativeFSLockFactory.cs" /> + <Compile Include="Store\NIOFSDirectory.cs" /> + <Compile Include="Store\NoLockFactory.cs" /> + <Compile Include="Store\NoSuchDirectoryException.cs" /> + <Compile Include="Store\NRTCachingDirectory.cs" /> + <Compile Include="Store\OutputStreamDataOutput.cs" /> + <Compile Include="Store\RAMDirectory.cs" /> + <Compile Include="Store\RAMFile.cs" /> + <Compile Include="Store\RAMInputStream.cs" /> + <Compile Include="Store\RAMOutputStream.cs" /> + <Compile Include="Store\RateLimitedDirectoryWrapper.cs" /> + <Compile Include="Store\RateLimitedIndexOutput.cs" /> + <Compile Include="Store\RateLimiter.cs" /> + <Compile Include="Store\SimpleFSDirectory.cs" /> + <Compile Include="Store\SimpleFSLockFactory.cs" /> + <Compile Include="Store\SingleInstanceLockFactory.cs" /> + <Compile Include="Store\TrackingDirectoryWrapper.cs" /> + <Compile Include="Store\VerifyingLockFactory.cs" /> + <Compile Include="Support\AssemblyExtensions.cs" /> + <Compile Include="Support\AtomicBoolean.cs" /> + <Compile Include="Support\AtomicInteger.cs" /> + <Compile Include="Support\AtomicLong.cs" /> + <Compile Include="Support\AtomicObject.cs" /> + <Compile Include="Support\AtomicReferenceArray.cs" /> + <Compile Include="Support\AttributeItem.cs" /> + <Compile Include="Support\BitArrayExtensions.cs" /> + <Compile Include="Support\BundleResourceManagerFactory.cs" /> + <Compile Include="Support\IO\ByteArrayOutputStream.cs" /> + <Compile Include="Support\C5.Support.cs" /> + <Compile Include="Support\Character.cs" /> + <Compile Include="Support\Arrays.cs" /> + <Compile Include="Support\Codecs\CodecNameAttribute.cs" /> + <Compile Include="Support\Codecs\DefaultDocValuesFormatFactory.cs" /> + <Compile Include="Support\Codecs\DefaultPostingsFormatFactory.cs" /> + <Compile Include="Support\Codecs\DocValuesFormatNameAttribute.cs" /> + <Compile Include="Support\Codecs\ICodecFactory.cs" /> + <Compile Include="Support\Codecs\IDocValuesFormatFactory.cs" /> + <Compile Include="Support\Codecs\ExcludeCodecFromScanAttribute.cs" /> + <Compile Include="Support\Codecs\ExcludeDocValuesFormatFromScanAttribute.cs" /> + <Compile Include="Support\Codecs\ExcludePostingsFormatFromScanAttribute.cs" /> + <Compile Include="Support\Codecs\IPostingsFormatFactory.cs" /> + <Compile Include="Support\Codecs\PostingsFormatNameAttribute.cs" /> + <Compile Include="Support\IO\BinaryReaderDataInput.cs" /> + <Compile Include="Support\IO\BinaryWriterDataOutput.cs" /> + <Compile Include="Support\Collections.cs" /> + <Compile Include="Support\ConcurrentHashMapWrapper.cs" /> + <Compile Include="Support\ConcurrentHashSet.cs" /> + <Compile Include="Support\CultureContext.cs" /> + <Compile Include="Support\IO\DataInputStream.cs" /> + <Compile Include="Support\IO\DataOutputStream.cs" /> + <Compile Include="Support\Codecs\DefaultCodecFactory.cs" /> + <Compile Include="Support\Equatable.cs" /> + <Compile Include="Support\EquatableSet.cs" /> + <Compile Include="Support\ExceptionExtensions.cs" /> + <Compile Include="Support\ExceptionToClassNameConventionAttribute.cs" /> + <Compile Include="Support\ExceptionToNullableEnumConvention.cs" /> + <Compile Include="Support\IO\FileStreamExtensions.cs" /> + <Compile Include="Support\ICallable.cs" /> + <Compile Include="Support\ICharSequence.cs" /> + <Compile Include="Support\RectangularArrays.cs" /> + <Compile Include="Support\Threading\ICompletionService.cs" /> + <Compile Include="Support\IO\IDataInput.cs" /> + <Compile Include="Support\IO\IDataOutput.cs" /> + <Compile Include="Support\IdentityComparer.cs" /> + <Compile Include="Support\IdentityHashMap.cs" /> + <Compile Include="Support\IdentityHashSet.cs" /> + <Compile Include="Support\IdentityWeakReference.cs" /> + <Compile Include="Support\IO\Buffer.cs" /> + <Compile Include="Support\IO\BufferExceptions.cs" /> + <Compile Include="Support\IO\ByteBuffer.cs" /> + <Compile Include="Support\DictionaryExtensions.cs" /> + <Compile Include="Support\ExceptionToNetNumericConventionAttribute.cs" /> + <Compile Include="Support\IndexWriterConfigExtensions.cs" /> + <Compile Include="Support\IO\ByteOrder.cs" /> + <Compile Include="Support\IO\Endianness.cs" /> + <Compile Include="Support\IO\HeapByteBuffer.cs" /> + <Compile Include="Support\IO\LongArrayBuffer.cs" /> + <Compile Include="Support\IO\LongBuffer.cs" /> + <Compile Include="Support\IO\LongToByteBufferAdapter.cs" /> + <Compile Include="Support\IO\ReadOnlyHeapByteBuffer.cs" /> + <Compile Include="Support\IO\ReadWriteHeapByteBuffer.cs" /> + <Compile Include="Support\IO\ReadWriteLongArrayBuffer.cs" /> + <Compile Include="Support\IResourceManagerFactory.cs" /> + <Compile Include="Support\Threading\LimitedConcurrencyLevelTaskScheduler.cs" /> + <Compile Include="Support\LinkedHashMap.cs" /> + <Compile Include="Support\ListExtensions.cs" /> + <Compile Include="Support\LurchTable.cs" /> + <Compile Include="Support\MathExtension.cs" /> + <Compile Include="Support\IO\MemoryMappedFileByteBuffer.cs" /> + <Compile Include="Support\NumberFormat.cs" /> + <Compile Include="Support\PriorityQueue.cs" /> + <Compile Include="Support\Threading\ReaderWriterLockSlimExtensions.cs" /> + <Compile Include="Support\Threading\ReentrantLock.cs" /> + <Compile Include="Support\IO\SafeTextWriterWrapper.cs" /> + <Compile Include="Support\SetExtensions.cs" /> + <Compile Include="Support\SignedZeroComparer.cs" /> + <Compile Include="Support\IO\StreamUtils.cs" /> + <Compile Include="Support\StringBuilderExtensions.cs" /> + <Compile Include="Support\StringCharSequenceWrapper.cs" /> + <Compile Include="Support\StringExtensions.cs" /> + <Compile Include="Support\StringTokenizer.cs" /> + <Compile Include="Support\Threading\TaskSchedulerCompletionService.cs" /> + <Compile Include="Support\Threading\ThreadFactory.cs" /> + <Compile Include="Support\Time.cs" /> + <Compile Include="Support\TreeDictionary.cs" /> + <Compile Include="Support\TreeSet.cs" /> + <Compile Include="Support\Threading\CloseableThreadLocalProfiler.cs" /> + <Compile Include="Support\Compatibility\ConcurrentDictionary.cs" /> + <Compile Include="Support\Compatibility\Func.cs" /> + <Compile Include="Support\Compatibility\ISet.cs" /> + <Compile Include="Support\Compatibility\SetFactory.cs" /> + <Compile Include="Support\Compatibility\SortedSet.cs" /> + <Compile Include="Support\Threading\ThreadLocal.cs" /> + <Compile Include="Support\Compatibility\WrappedHashSet.cs" /> + <Compile Include="Support\CRC32.cs" /> + <Compile Include="Support\IO\Compression\Deflater.cs" /> + <Compile Include="Support\EquatableList.cs" /> + <Compile Include="Support\IO\FileSupport.cs" /> + <Compile Include="Support\GeneralKeyedCollection.cs" /> + <Compile Include="Support\HashMap.cs" /> + <Compile Include="Support\IChecksum.cs" /> + <Compile Include="Support\IO\Compression\Inflater.cs" /> + <Compile Include="Support\Threading\IThreadRunnable.cs" /> + <Compile Include="Support\Number.cs" /> + <Compile Include="Support\OS.cs" /> + <Compile Include="Support\IO\Compression\SharpZipLib.cs" /> + <Compile Include="Support\Threading\ThreadClass.cs" /> + <Compile Include="Support\Threading\ThreadLock.cs" /> + <Compile Include="Support\Util\ExcludeServiceAttribute.cs" /> + <Compile Include="Support\Util\IServiceListable.cs" /> + <Compile Include="Support\Util\NamedServiceFactory.cs" /> + <Compile Include="Support\Util\ServiceNameAttribute.cs" /> + <Compile Include="Support\WeakDictionary.cs" /> + <Compile Include="Support\WritableArrayAttribute.cs" /> + <Compile Include="Util\Accountable.cs" /> + <Compile Include="Util\ArrayInPlaceMergeSorter.cs" /> + <Compile Include="Util\ArrayIntroSorter.cs" /> + <Compile Include="Util\ArrayTimSorter.cs" /> + <Compile Include="Util\ArrayUtil.cs" /> + <Compile Include="Util\Attribute.cs" /> + <Compile Include="Util\AttributeImpl.cs" /> + <Compile Include="Util\AttributeReflector.cs" /> + <Compile Include="Util\AttributeSource.cs" /> + <Compile Include="Util\Automaton\Automaton.cs" /> + <Compile Include="Util\Automaton\AutomatonProvider.cs" /> + <Compile Include="Util\Automaton\BasicAutomata.cs" /> + <Compile Include="Util\Automaton\BasicOperations.cs" /> + <Compile Include="Util\Automaton\ByteRunAutomaton.cs" /> + <Compile Include="Util\Automaton\CharacterRunAutomaton.cs" /> + <Compile Include="Util\Automaton\CompiledAutomaton.cs" /> + <Compile Include="Util\Automaton\DaciukMihovAutomatonBuilder.cs" /> + <Compile Include="Util\Automaton\Lev1ParametricDescription.cs" /> + <Compile Include="Util\Automaton\Lev1TParametricDescription.cs" /> + <Compile Include="Util\Automaton\Lev2ParametricDescription.cs" /> + <Compile Include="Util\Automaton\Lev2TParametricDescription.cs" /> + <Compile Include="Util\Automaton\LevenshteinAutomata.cs" /> + <Compile Include="Util\Automaton\MinimizationOperations.cs" /> + <Compile Include="Util\Automaton\RegExp.cs" /> + <Compile Include="Util\Automaton\RunAutomaton.cs" /> + <Compile Include="Util\Automaton\SortedIntSet.cs" /> + <Compile Include="Util\Automaton\SpecialOperations.cs" /> + <Compile Include="Util\Automaton\State.cs" /> + <Compile Include="Util\Automaton\StatePair.cs" /> + <Compile Include="Util\Automaton\Transition.cs" /> + <Compile Include="Util\Automaton\UTF32ToUTF8.cs" /> + <Compile Include="Util\Bits.cs" /> + <Compile Include="Util\BitUtil.cs" /> + <Compile Include="Util\BroadWord.cs" /> + <Compile Include="Util\ByteBlockPool.cs" /> + <Compile Include="Util\BytesRef.cs" /> + <Compile Include="Util\BytesRefArray.cs" /> + <Compile Include="Util\BytesRefHash.cs" /> + <Compile Include="Util\BytesRefIterator.cs" /> + <Compile Include="Util\CharsRef.cs" /> + <Compile Include="Util\CloseableThreadLocal.cs" /> + <Compile Include="Util\CollectionUtil.cs" /> + <Compile Include="Util\CommandLineUtil.cs" /> + <Compile Include="Util\Constants.cs" /> + <Compile Include="Util\Counter.cs" /> + <Compile Include="Util\DocIdBitSet.cs" /> + <Compile Include="Util\DoubleBarrelLRUCache.cs" /> + <Compile Include="Util\FieldCacheSanityChecker.cs" /> + <Compile Include="Util\FilterIterator.cs" /> + <Compile Include="Util\FixedBitSet.cs" /> + <Compile Include="Util\Fst\Builder.cs" /> + <Compile Include="Util\Fst\ByteSequenceOutputs.cs" /> + <Compile Include="Util\Fst\BytesRefFSTEnum.cs" /> + <Compile Include="Util\Fst\BytesStore.cs" /> + <Compile Include="Util\Fst\CharSequenceOutputs.cs" /> + <Compile Include="Util\Fst\ForwardBytesReader.cs" /> + <Compile Include="Util\Fst\FST.cs" /> + <Compile Include="Util\Fst\FSTEnum.cs" /> + <Compile Include="Util\Fst\IntSequenceOutputs.cs" /> + <Compile Include="Util\Fst\IntsRefFSTEnum.cs" /> + <Compile Include="Util\Fst\NodeHash.cs" /> + <Compile Include="Util\Fst\NoOutputs.cs" /> + <Compile Include="Util\Fst\Outputs.cs" /> + <Compile Include="Util\Fst\PairOutputs.cs" /> + <Compile Include="Util\Fst\PositiveIntOutputs.cs" /> + <Compile Include="Util\Fst\ReverseBytesReader.cs" /> + <Compile Include="Util\Fst\Util.cs" /> + <Compile Include="Util\GrowableByteArrayDataOutput.cs" /> + <Compile Include="Util\IndexableBinaryStringTools.cs" /> + <Compile Include="Util\InfoStream.cs" /> + <Compile Include="Util\InPlaceMergeSorter.cs" /> + <Compile Include="Util\IntBlockPool.cs" /> + <Compile Include="Util\IntroSorter.cs" /> + <Compile Include="Util\IntsRef.cs" /> + <Compile Include="Util\IOUtils.cs" /> + <Compile Include="Util\LongBitSet.cs" /> + <Compile Include="Util\LongsRef.cs" /> + <Compile Include="Util\LongValues.cs" /> + <Compile Include="Util\MapOfSets.cs" /> + <Compile Include="Util\MathUtil.cs" /> + <Compile Include="Util\MergedIterator.cs" /> + <Compile Include="Util\MutableBits.cs" /> + <Compile Include="Util\Mutable\MutableValue.cs" /> + <Compile Include="Util\Mutable\MutableValueBool.cs" /> + <Compile Include="Util\Mutable\MutableValueDate.cs" /> + <Compile Include="Util\Mutable\MutableValueDouble.cs" /> + <Compile Include="Util\Mutable\MutableValueFloat.cs" /> + <Compile Include="Util\Mutable\MutableValueInt.cs" /> + <Compile Include="Util\Mutable\MutableValueLong.cs" /> + <Compile Include="Util\Mutable\MutableValueStr.cs" /> + <Compile Include="Util\NamedSPILoader.cs" /> + <Compile Include="Util\NamedThreadFactory.cs" /> + <Compile Include="Util\NumericUtils.cs" /> + <Compile Include="Util\OfflineSorter.cs" /> + <Compile Include="Util\OpenBitSet.cs" /> + <Compile Include="Util\OpenBitSetDISI.cs" /> + <Compile Include="Util\OpenBitSetIterator.cs" /> + <Compile Include="Util\Packed\AbstractAppendingLongBuffer.cs" /> + <Compile Include="Util\Packed\AbstractBlockPackedWriter.cs" /> + <Compile Include="Util\Packed\AbstractPagedMutable.cs" /> + <Compile Include="Util\Packed\AppendingDeltaPackedLongBuffer.cs" /> + <Compile Include="Util\Packed\AppendingPackedLongBuffer.cs" /> + <Compile Include="Util\Packed\BlockPackedReader.cs" /> + <Compile Include="Util\Packed\BlockPackedReaderIterator.cs" /> + <Compile Include="Util\Packed\BlockPackedWriter.cs" /> + <Compile Include="Util\Packed\BulkOperation.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked1.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked10.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked11.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked12.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked13.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked14.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked15.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked16.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked17.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked18.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked19.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked2.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked20.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked21.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked22.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked23.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked24.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked3.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked4.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked5.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked6.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked7.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked8.cs" /> + <Compile Include="Util\Packed\BulkOperationPacked9.cs" /> + <Compile Include="Util\Packed\BulkOperationPackedSingleBlock.cs" /> + <Compile Include="Util\Packed\Direct16.cs" /> + <Compile Include="Util\Packed\Direct32.cs" /> + <Compile Include="Util\Packed\Direct64.cs" /> + <Compile Include="Util\Packed\Direct8.cs" /> + <Compile Include="Util\Packed\DirectPacked64SingleBlockReader.cs" /> + <Compile Include="Util\Packed\DirectPackedReader.cs" /> + <Compile Include="Util\Packed\EliasFanoDecoder.cs" /> + <Compile Include="Util\Packed\EliasFanoDocIdSet.cs" /> + <Compile Include="Util\Packed\EliasFanoEncoder.cs" /> + <Compile Include="Util\Packed\GrowableWriter.cs" /> + <Compile Include="Util\Packed\MonotonicAppendingLongBuffer.cs" /> + <Compile Include="Util\Packed\MonotonicBlockPackedReader.cs" /> + <Compile Include="Util\Packed\MonotonicBlockPackedWriter.cs" /> + <Compile Include="Util\Packed\Packed16ThreeBlocks.cs" /> + <Compile Include="Util\Packed\Packed64.cs" /> + <Compile Include="Util\Packed\Packed64SingleBlock.cs" /> + <Compile Include="Util\Packed\Packed8ThreeBlocks.cs" /> + <Compile Include="Util\Packed\PackedDataInput.cs" /> + <Compile Include="Util\Packed\PackedDataOutput.cs" /> + <Compile Include="Util\Packed\PackedInts.cs" /> + <Compile Include="Util\Packed\PackedReaderIterator.cs" /> + <Compile Include="Util\Packed\PackedWriter.cs" /> + <Compile Include="Util\Packed\PagedGrowableWriter.cs" /> + <Compile Include="Util\Packed\PagedMutable.cs" /> + <Compile Include="Util\PagedBytes.cs" /> + <Compile Include="Util\PForDeltaDocIdSet.cs" /> + <Compile Include="Util\PrintStreamInfoStream.cs" /> + <Compile Include="Util\PriorityQueue.cs" /> + <Compile Include="Util\QueryBuilder.cs" /> + <Compile Include="Util\RamUsageEstimator.cs" /> + <Compile Include="Util\RecyclingByteBlockAllocator.cs" /> + <Compile Include="Util\RecyclingIntBlockAllocator.cs" /> + <Compile Include="Util\RefCount.cs" /> + <Compile Include="Util\RollingBuffer.cs" /> + <Compile Include="Util\SentinelIntSet.cs" /> + <Compile Include="Util\SetOnce.cs" /> + <Compile Include="Support\SimpleStringInterner.cs" /> + <Compile Include="Util\SloppyMath.cs" /> + <Compile Include="Util\SmallFloat.cs" /> + <Compile Include="Util\Sorter.cs" /> + <Compile Include="Util\SPIClassIterator.cs" /> + <Compile Include="Util\StringHelper.cs" /> + <Compile Include="Support\StringInterner.cs" /> + <Compile Include="Util\TimSorter.cs" /> + <Compile Include="Util\ToStringUtils.cs" /> + <Compile Include="Util\UnicodeUtil.cs" /> + <Compile Include="Util\Version.cs" /> + <Compile Include="Util\VirtualMethod.cs" /> + <Compile Include="Util\WAH8DocIdSet.cs" /> + <Compile Include="Util\WeakIdentityMap.cs" /> + <Compile Include="..\CommonAssemblyInfo.cs"> + <Link>Properties\CommonAssemblyInfo.cs</Link> + </Compile> </ItemGroup> </Project>
