SWEEP: Changed ConcurrentMergeSchedulers class to ConcurrentMergeSchedulerFactories (Value an array of Func<IConcurrentMergeScheduler>). In TestTransactions, the merge schedulers are supposed to be created on another thread and creating them too early was causing the test to fail.
Project: http://git-wip-us.apache.org/repos/asf/lucenenet/repo Commit: http://git-wip-us.apache.org/repos/asf/lucenenet/commit/99a4b35d Tree: http://git-wip-us.apache.org/repos/asf/lucenenet/tree/99a4b35d Diff: http://git-wip-us.apache.org/repos/asf/lucenenet/diff/99a4b35d Branch: refs/heads/api-work Commit: 99a4b35d2e2ad7ba67af44e179770845d1460cf4 Parents: 9ada11a Author: Shad Storhaug <[email protected]> Authored: Sat Mar 4 13:56:30 2017 +0700 Committer: Shad Storhaug <[email protected]> Committed: Sun Mar 5 17:08:43 2017 +0700 ---------------------------------------------------------------------- .../Util/LuceneTestCase.cs | 12 +-- .../Index/Test2BBinaryDocValues.cs | 8 +- .../Index/Test2BNumericDocValues.cs | 4 +- src/Lucene.Net.Tests/Index/Test2BPositions.cs | 4 +- src/Lucene.Net.Tests/Index/Test2BPostings.cs | 4 +- .../Index/Test2BPostingsBytes.cs | 7 +- .../Index/Test2BSortedDocValues.cs | 8 +- src/Lucene.Net.Tests/Index/Test2BTerms.cs | 4 +- .../Index/Test4GBStoredFields.cs | 4 +- src/Lucene.Net.Tests/Index/TestCrash.cs | 42 +++++----- src/Lucene.Net.Tests/Index/TestIndexWriter.cs | 4 +- .../Index/TestIndexWriterDelete.cs | 28 ++++--- .../Index/TestIndexWriterExceptions.cs | 53 ++++++++----- .../Index/TestIndexWriterForceMerge.cs | 4 +- .../Index/TestIndexWriterMergePolicy.cs | 7 +- .../Index/TestIndexWriterOnDiskFull.cs | 4 +- .../Index/TestIndexWriterReader.cs | 8 +- .../Index/TestIndexWriterWithThreads.cs | 83 ++++++++++++-------- .../Index/TestStressIndexing.cs | 4 +- src/Lucene.Net.Tests/Index/TestTransactions.cs | 63 +++++++-------- .../Search/TestSearcherManager.cs | 4 +- 21 files changed, 205 insertions(+), 154 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/lucenenet/blob/99a4b35d/src/Lucene.Net.TestFramework/Util/LuceneTestCase.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.TestFramework/Util/LuceneTestCase.cs b/src/Lucene.Net.TestFramework/Util/LuceneTestCase.cs index bb93c12..ea824aa 100644 --- a/src/Lucene.Net.TestFramework/Util/LuceneTestCase.cs +++ b/src/Lucene.Net.TestFramework/Util/LuceneTestCase.cs @@ -2846,17 +2846,19 @@ namespace Lucene.Net.Util } /// <summary> - /// Contains a list of all the IConcurrentMergeSchedulers to be tested. + /// Contains a list of all the Func<IConcurrentMergeSchedulers> to be tested. + /// Delegate method allows them to be created on their target thread instead of the test thread + /// and also ensures a separate instance is created in each case (which can affect the result of the test). /// /// LUCENENET specific /// </summary> - public static class ConcurrentMergeSchedulers + public static class ConcurrentMergeSchedulerFactories { - public static readonly IConcurrentMergeScheduler[] Values = new IConcurrentMergeScheduler[] { + public static readonly Func<IConcurrentMergeScheduler>[] Values = new Func<IConcurrentMergeScheduler>[] { #if !NETSTANDARD - new ConcurrentMergeScheduler(), + () => new ConcurrentMergeScheduler(), #endif - new TaskMergeScheduler() + () => new TaskMergeScheduler() }; } } http://git-wip-us.apache.org/repos/asf/lucenenet/blob/99a4b35d/src/Lucene.Net.Tests/Index/Test2BBinaryDocValues.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Tests/Index/Test2BBinaryDocValues.cs b/src/Lucene.Net.Tests/Index/Test2BBinaryDocValues.cs index e7bc021..5281e27 100644 --- a/src/Lucene.Net.Tests/Index/Test2BBinaryDocValues.cs +++ b/src/Lucene.Net.Tests/Index/Test2BBinaryDocValues.cs @@ -38,7 +38,7 @@ namespace Lucene.Net.Index { // indexes Integer.MAX_VALUE docs with a fixed binary field [Test] - public virtual void TestFixedBinary([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestFixedBinary([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { BaseDirectoryWrapper dir = NewFSDirectory(CreateTempDir("2BFixedBinary")); if (dir is MockDirectoryWrapper) @@ -48,7 +48,7 @@ namespace Lucene.Net.Index var config = new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())) .SetMaxBufferedDocs(IndexWriterConfig.DISABLE_AUTO_FLUSH) .SetRAMBufferSizeMB(256.0) - .SetMergeScheduler(scheduler) + .SetMergeScheduler(newScheduler()) .SetMergePolicy(NewLogMergePolicy(false, 10)) .SetOpenMode(OpenMode.CREATE); IndexWriter w = new IndexWriter(dir, config); @@ -104,7 +104,7 @@ namespace Lucene.Net.Index // indexes Integer.MAX_VALUE docs with a variable binary field [Test] - public virtual void TestVariableBinary([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestVariableBinary([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { BaseDirectoryWrapper dir = NewFSDirectory(CreateTempDir("2BVariableBinary")); if (dir is MockDirectoryWrapper) @@ -115,7 +115,7 @@ namespace Lucene.Net.Index var config = new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())) .SetMaxBufferedDocs(IndexWriterConfig.DISABLE_AUTO_FLUSH) .SetRAMBufferSizeMB(256.0) - .SetMergeScheduler(scheduler) + .SetMergeScheduler(newScheduler()) .SetMergePolicy(NewLogMergePolicy(false, 10)) .SetOpenMode(OpenMode.CREATE); IndexWriter w = new IndexWriter(dir, config); http://git-wip-us.apache.org/repos/asf/lucenenet/blob/99a4b35d/src/Lucene.Net.Tests/Index/Test2BNumericDocValues.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Tests/Index/Test2BNumericDocValues.cs b/src/Lucene.Net.Tests/Index/Test2BNumericDocValues.cs index 7c37423..ce0ec72 100644 --- a/src/Lucene.Net.Tests/Index/Test2BNumericDocValues.cs +++ b/src/Lucene.Net.Tests/Index/Test2BNumericDocValues.cs @@ -37,7 +37,7 @@ namespace Lucene.Net.Index { // indexes Integer.MAX_VALUE docs with an increasing dv field [Test, LongRunningTest] - public virtual void TestNumerics([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestNumerics([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { BaseDirectoryWrapper dir = NewFSDirectory(CreateTempDir("2BNumerics")); if (dir is MockDirectoryWrapper) @@ -46,7 +46,7 @@ namespace Lucene.Net.Index } IndexWriter w = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())) - .SetMaxBufferedDocs(IndexWriterConfig.DISABLE_AUTO_FLUSH).SetRAMBufferSizeMB(256.0).SetMergeScheduler(scheduler).SetMergePolicy(NewLogMergePolicy(false, 10)).SetOpenMode(OpenMode.CREATE)); + .SetMaxBufferedDocs(IndexWriterConfig.DISABLE_AUTO_FLUSH).SetRAMBufferSizeMB(256.0).SetMergeScheduler(newScheduler()).SetMergePolicy(NewLogMergePolicy(false, 10)).SetOpenMode(OpenMode.CREATE)); Document doc = new Document(); NumericDocValuesField dvField = new NumericDocValuesField("dv", 0); http://git-wip-us.apache.org/repos/asf/lucenenet/blob/99a4b35d/src/Lucene.Net.Tests/Index/Test2BPositions.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Tests/Index/Test2BPositions.cs b/src/Lucene.Net.Tests/Index/Test2BPositions.cs index d004779..d8a5e45 100644 --- a/src/Lucene.Net.Tests/Index/Test2BPositions.cs +++ b/src/Lucene.Net.Tests/Index/Test2BPositions.cs @@ -50,7 +50,7 @@ namespace Lucene.Net.Index { [Ignore("Very slow. Enable manually by removing Ignore.")] [Test] - public virtual void Test([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void Test([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { BaseDirectoryWrapper dir = NewFSDirectory(CreateTempDir("2BPositions")); if (dir is MockDirectoryWrapper) @@ -59,7 +59,7 @@ namespace Lucene.Net.Index } IndexWriter w = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())) - .SetMaxBufferedDocs(IndexWriterConfig.DISABLE_AUTO_FLUSH).SetRAMBufferSizeMB(256.0).SetMergeScheduler(scheduler).SetMergePolicy(NewLogMergePolicy(false, 10)).SetOpenMode(OpenMode.CREATE)); + .SetMaxBufferedDocs(IndexWriterConfig.DISABLE_AUTO_FLUSH).SetRAMBufferSizeMB(256.0).SetMergeScheduler(newScheduler()).SetMergePolicy(NewLogMergePolicy(false, 10)).SetOpenMode(OpenMode.CREATE)); MergePolicy mp = w.Config.MergePolicy; if (mp is LogByteSizeMergePolicy) http://git-wip-us.apache.org/repos/asf/lucenenet/blob/99a4b35d/src/Lucene.Net.Tests/Index/Test2BPostings.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Tests/Index/Test2BPostings.cs b/src/Lucene.Net.Tests/Index/Test2BPostings.cs index 2b79afd..57b6dec 100644 --- a/src/Lucene.Net.Tests/Index/Test2BPostings.cs +++ b/src/Lucene.Net.Tests/Index/Test2BPostings.cs @@ -49,7 +49,7 @@ namespace Lucene.Net.Index [Timeout(int.MaxValue)] #endif [Test, LongRunningTest, HasTimeout] - public virtual void Test([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void Test([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { BaseDirectoryWrapper dir = NewFSDirectory(CreateTempDir("2BPostings")); if (dir is MockDirectoryWrapper) @@ -60,7 +60,7 @@ namespace Lucene.Net.Index var config = new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())) .SetMaxBufferedDocs(IndexWriterConfig.DISABLE_AUTO_FLUSH) .SetRAMBufferSizeMB(256.0) - .SetMergeScheduler(scheduler) + .SetMergeScheduler(newScheduler()) .SetMergePolicy(NewLogMergePolicy(false, 10)) .SetOpenMode(OpenMode.CREATE); http://git-wip-us.apache.org/repos/asf/lucenenet/blob/99a4b35d/src/Lucene.Net.Tests/Index/Test2BPostingsBytes.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Tests/Index/Test2BPostingsBytes.cs b/src/Lucene.Net.Tests/Index/Test2BPostingsBytes.cs index 42f9329..4278261 100644 --- a/src/Lucene.Net.Tests/Index/Test2BPostingsBytes.cs +++ b/src/Lucene.Net.Tests/Index/Test2BPostingsBytes.cs @@ -1,10 +1,11 @@ using Lucene.Net.Analysis.TokenAttributes; using Lucene.Net.Documents; +using Lucene.Net.Support; using NUnit.Framework; +using System; namespace Lucene.Net.Index { - using Lucene.Net.Support; using BaseDirectoryWrapper = Lucene.Net.Store.BaseDirectoryWrapper; using CharTermAttribute = Lucene.Net.Analysis.TokenAttributes.CharTermAttribute; using Document = Documents.Document; @@ -52,7 +53,7 @@ namespace Lucene.Net.Index { [Ignore("Very slow. Enable manually by removing Ignore.")] [Test] - public virtual void Test([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void Test([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { BaseDirectoryWrapper dir = NewFSDirectory(CreateTempDir("2BPostingsBytes1")); if (dir is MockDirectoryWrapper) @@ -63,7 +64,7 @@ namespace Lucene.Net.Index var config = new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())) .SetMaxBufferedDocs(IndexWriterConfig.DISABLE_AUTO_FLUSH) .SetRAMBufferSizeMB(256.0) - .SetMergeScheduler(scheduler) + .SetMergeScheduler(newScheduler()) .SetMergePolicy(NewLogMergePolicy(false, 10)) .SetOpenMode(OpenMode.CREATE); IndexWriter w = new IndexWriter(dir, config); http://git-wip-us.apache.org/repos/asf/lucenenet/blob/99a4b35d/src/Lucene.Net.Tests/Index/Test2BSortedDocValues.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Tests/Index/Test2BSortedDocValues.cs b/src/Lucene.Net.Tests/Index/Test2BSortedDocValues.cs index 8ad5aa9..ad77b75 100644 --- a/src/Lucene.Net.Tests/Index/Test2BSortedDocValues.cs +++ b/src/Lucene.Net.Tests/Index/Test2BSortedDocValues.cs @@ -36,7 +36,7 @@ namespace Lucene.Net.Index { // indexes Integer.MAX_VALUE docs with a fixed binary field [Test] - public virtual void TestFixedSorted([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestFixedSorted([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { BaseDirectoryWrapper dir = NewFSDirectory(CreateTempDir("2BFixedSorted")); if (dir is MockDirectoryWrapper) @@ -47,7 +47,7 @@ namespace Lucene.Net.Index IndexWriter w = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())) .SetMaxBufferedDocs(IndexWriterConfig.DISABLE_AUTO_FLUSH) .SetRAMBufferSizeMB(256.0) - .SetMergeScheduler(scheduler) + .SetMergeScheduler(newScheduler()) .SetMergePolicy(NewLogMergePolicy(false, 10)) .SetOpenMode(OpenMode.CREATE)); @@ -98,7 +98,7 @@ namespace Lucene.Net.Index // indexes Integer.MAX_VALUE docs with a fixed binary field [Test] - public virtual void Test2BOrds([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void Test2BOrds([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { BaseDirectoryWrapper dir = NewFSDirectory(CreateTempDir("2BOrds")); if (dir is MockDirectoryWrapper) @@ -109,7 +109,7 @@ namespace Lucene.Net.Index var config = new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())) .SetMaxBufferedDocs(IndexWriterConfig.DISABLE_AUTO_FLUSH) .SetRAMBufferSizeMB(256.0) - .SetMergeScheduler(scheduler) + .SetMergeScheduler(newScheduler()) .SetMergePolicy(NewLogMergePolicy(false, 10)) .SetOpenMode(OpenMode.CREATE); IndexWriter w = new IndexWriter(dir, config); http://git-wip-us.apache.org/repos/asf/lucenenet/blob/99a4b35d/src/Lucene.Net.Tests/Index/Test2BTerms.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Tests/Index/Test2BTerms.cs b/src/Lucene.Net.Tests/Index/Test2BTerms.cs index 97da141..09cdefc 100644 --- a/src/Lucene.Net.Tests/Index/Test2BTerms.cs +++ b/src/Lucene.Net.Tests/Index/Test2BTerms.cs @@ -169,7 +169,7 @@ namespace Lucene.Net.Index [Ignore("Very slow. Enable manually by removing Ignore.")] [Test] - public virtual void Test2BTerms_Mem([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void Test2BTerms_Mem([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { if ("Lucene3x".Equals(Codec.Default.Name)) { @@ -195,7 +195,7 @@ namespace Lucene.Net.Index IndexWriter w = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())) .SetMaxBufferedDocs(IndexWriterConfig.DISABLE_AUTO_FLUSH) .SetRAMBufferSizeMB(256.0) - .SetMergeScheduler(scheduler) + .SetMergeScheduler(newScheduler()) .SetMergePolicy(NewLogMergePolicy(false, 10)) .SetOpenMode(OpenMode.CREATE)); http://git-wip-us.apache.org/repos/asf/lucenenet/blob/99a4b35d/src/Lucene.Net.Tests/Index/Test4GBStoredFields.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Tests/Index/Test4GBStoredFields.cs b/src/Lucene.Net.Tests/Index/Test4GBStoredFields.cs index 212eca2..e2dd3c8 100644 --- a/src/Lucene.Net.Tests/Index/Test4GBStoredFields.cs +++ b/src/Lucene.Net.Tests/Index/Test4GBStoredFields.cs @@ -41,7 +41,7 @@ namespace Lucene.Net.Index { [Ignore("//LUCENENET NOTE: This was marked Nightly in Java")] [Test] - public virtual void Test([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void Test([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { MockDirectoryWrapper dir = new MockDirectoryWrapper(Random(), new MMapDirectory(CreateTempDir("4GBStoredFields"))); dir.Throttling = MockDirectoryWrapper.Throttling_e.NEVER; @@ -49,7 +49,7 @@ namespace Lucene.Net.Index var config = new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())) .SetMaxBufferedDocs(IndexWriterConfig.DISABLE_AUTO_FLUSH) .SetRAMBufferSizeMB(256.0) - .SetMergeScheduler(scheduler) + .SetMergeScheduler(newScheduler()) .SetMergePolicy(NewLogMergePolicy(false, 10)) .SetOpenMode(OpenMode.CREATE); IndexWriter w = new IndexWriter(dir, config); http://git-wip-us.apache.org/repos/asf/lucenenet/blob/99a4b35d/src/Lucene.Net.Tests/Index/TestCrash.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Tests/Index/TestCrash.cs b/src/Lucene.Net.Tests/Index/TestCrash.cs index ee1db50..c8720d9 100644 --- a/src/Lucene.Net.Tests/Index/TestCrash.cs +++ b/src/Lucene.Net.Tests/Index/TestCrash.cs @@ -33,21 +33,25 @@ namespace Lucene.Net.Index [TestFixture] public class TestCrash : LuceneTestCase { - private IndexWriter InitIndex(IConcurrentMergeScheduler scheduler, Random random, bool initialCommit) + private IndexWriter InitIndex(Func<IConcurrentMergeScheduler> newScheduler, Random random, bool initialCommit) { - return InitIndex(scheduler, random, NewMockDirectory(random), initialCommit); + return InitIndex(newScheduler, random, NewMockDirectory(random), initialCommit); } - private IndexWriter InitIndex(IConcurrentMergeScheduler scheduler, Random random, MockDirectoryWrapper dir, bool initialCommit) + private IndexWriter InitIndex(Func<IConcurrentMergeScheduler> newScheduler, Random random, MockDirectoryWrapper dir, bool initialCommit) { dir.SetLockFactory(NoLockFactory.GetNoLockFactory()); - scheduler.SetSuppressExceptions(); - IndexWriter writer = new IndexWriter(dir, NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)) .SetMaxBufferedDocs(10) - .SetMergeScheduler(scheduler)); + .SetMergeScheduler(newScheduler())); + + IConcurrentMergeScheduler scheduler = writer.Config.MergeScheduler as IConcurrentMergeScheduler; + if (scheduler != null) + { + scheduler.SetSuppressExceptions(); + } if (initialCommit) { @@ -77,12 +81,12 @@ namespace Lucene.Net.Index [Test] public virtual void TestCrashWhileIndexing( - [ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + [ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { // this test relies on being able to open a reader before any commit // happened, so we must create an initial commit just to allow that, but // before any documents were added. - IndexWriter writer = InitIndex(scheduler, Random(), true); + IndexWriter writer = InitIndex(newScheduler, Random(), true); MockDirectoryWrapper dir = (MockDirectoryWrapper)writer.Directory; // We create leftover files because merging could be @@ -107,13 +111,14 @@ namespace Lucene.Net.Index [Test] public virtual void TestWriterAfterCrash( - [ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + [ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler1, + [ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler2) { // this test relies on being able to open a reader before any commit // happened, so we must create an initial commit just to allow that, but // before any documents were added. Console.WriteLine("TEST: initIndex"); - IndexWriter writer = InitIndex(scheduler, Random(), true); + IndexWriter writer = InitIndex(newScheduler1, Random(), true); Console.WriteLine("TEST: done initIndex"); MockDirectoryWrapper dir = (MockDirectoryWrapper)writer.Directory; @@ -124,7 +129,7 @@ namespace Lucene.Net.Index dir.PreventDoubleWrite = false; Console.WriteLine("TEST: now crash"); Crash(writer); - writer = InitIndex(scheduler, Random(), dir, false); + writer = InitIndex(newScheduler2, Random(), dir, false); writer.Dispose(); IndexReader reader = DirectoryReader.Open(dir); @@ -143,9 +148,10 @@ namespace Lucene.Net.Index [Test] public virtual void TestCrashAfterReopen( - [ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + [ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler1, + [ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler2) { - IndexWriter writer = InitIndex(scheduler, Random(), false); + IndexWriter writer = InitIndex(newScheduler1, Random(), false); MockDirectoryWrapper dir = (MockDirectoryWrapper)writer.Directory; // We create leftover files because merging could be @@ -153,7 +159,7 @@ namespace Lucene.Net.Index dir.AssertNoUnrefencedFilesOnClose = false; writer.Dispose(); - writer = InitIndex(scheduler, Random(), dir, false); + writer = InitIndex(newScheduler2, Random(), dir, false); Assert.AreEqual(314, writer.MaxDoc); Crash(writer); @@ -182,9 +188,9 @@ namespace Lucene.Net.Index [Test] public virtual void TestCrashAfterClose( - [ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + [ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { - IndexWriter writer = InitIndex(scheduler, Random(), false); + IndexWriter writer = InitIndex(newScheduler, Random(), false); MockDirectoryWrapper dir = (MockDirectoryWrapper)writer.Directory; writer.Dispose(); @@ -205,9 +211,9 @@ namespace Lucene.Net.Index [Test] public virtual void TestCrashAfterCloseNoWait( - [ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + [ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { - IndexWriter writer = InitIndex(scheduler, Random(), false); + IndexWriter writer = InitIndex(newScheduler, Random(), false); MockDirectoryWrapper dir = (MockDirectoryWrapper)writer.Directory; writer.Dispose(false); http://git-wip-us.apache.org/repos/asf/lucenenet/blob/99a4b35d/src/Lucene.Net.Tests/Index/TestIndexWriter.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Tests/Index/TestIndexWriter.cs b/src/Lucene.Net.Tests/Index/TestIndexWriter.cs index 1c3a56a..0669953 100644 --- a/src/Lucene.Net.Tests/Index/TestIndexWriter.cs +++ b/src/Lucene.Net.Tests/Index/TestIndexWriter.cs @@ -233,13 +233,13 @@ namespace Lucene.Net.Index } [Test] - public virtual void TestChangesAfterClose([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestChangesAfterClose([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { Directory dir = NewDirectory(); IndexWriter writer = null; - var config = NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())).SetMergeScheduler(scheduler); + var config = NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())).SetMergeScheduler(newScheduler()); writer = new IndexWriter(dir, config); AddDoc(writer); http://git-wip-us.apache.org/repos/asf/lucenenet/blob/99a4b35d/src/Lucene.Net.Tests/Index/TestIndexWriterDelete.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Tests/Index/TestIndexWriterDelete.cs b/src/Lucene.Net.Tests/Index/TestIndexWriterDelete.cs index 3ad1330..8f4083e 100644 --- a/src/Lucene.Net.Tests/Index/TestIndexWriterDelete.cs +++ b/src/Lucene.Net.Tests/Index/TestIndexWriterDelete.cs @@ -6,14 +6,14 @@ using System.Threading; using Lucene.Net.Analysis; using Lucene.Net.Attributes; using Lucene.Net.Documents; +using Lucene.Net.Randomized.Generators; +using Lucene.Net.Support; +using NUnit.Framework; +using System.IO; +using Lucene.Net.Util; namespace Lucene.Net.Index { - using Lucene.Net.Randomized.Generators; - using Lucene.Net.Support; - using NUnit.Framework; - using System.IO; - using Util; /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with @@ -544,23 +544,23 @@ namespace Lucene.Net.Index [Test] public virtual void TestDeletesOnDiskFull( - [ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + [ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { - DoTestOperationsOnDiskFull(scheduler, false); + DoTestOperationsOnDiskFull(newScheduler, false); } [Test] public virtual void TestUpdatesOnDiskFull( - [ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + [ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { - DoTestOperationsOnDiskFull(scheduler, true); + DoTestOperationsOnDiskFull(newScheduler, true); } /// <summary> /// Make sure if modifier tries to commit but hits disk full that modifier /// remains consistent and usable. Similar to TestIndexReader.testDiskFull(). /// </summary> - private void DoTestOperationsOnDiskFull(IConcurrentMergeScheduler scheduler, bool updates) + private void DoTestOperationsOnDiskFull(Func<IConcurrentMergeScheduler> newScheduler, bool updates) { Term searchTerm = new Term("content", "aaa"); int START_COUNT = 157; @@ -605,9 +605,13 @@ namespace Lucene.Net.Index var config = NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random(), MockTokenizer.WHITESPACE, false)) .SetMaxBufferedDocs(1000) .SetMaxBufferedDeleteTerms(1000) - .SetMergeScheduler(scheduler); + .SetMergeScheduler(newScheduler()); - scheduler.SetSuppressExceptions(); + IConcurrentMergeScheduler scheduler = config.MergeScheduler as IConcurrentMergeScheduler; + if (scheduler != null) + { + scheduler.SetSuppressExceptions(); + } IndexWriter modifier = new IndexWriter(dir, config); http://git-wip-us.apache.org/repos/asf/lucenenet/blob/99a4b35d/src/Lucene.Net.Tests/Index/TestIndexWriterExceptions.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Tests/Index/TestIndexWriterExceptions.cs b/src/Lucene.Net.Tests/Index/TestIndexWriterExceptions.cs index 7408cfe..72822f1 100644 --- a/src/Lucene.Net.Tests/Index/TestIndexWriterExceptions.cs +++ b/src/Lucene.Net.Tests/Index/TestIndexWriterExceptions.cs @@ -4,14 +4,14 @@ using System.Collections.Generic; using System.Diagnostics; using System.Threading; using Lucene.Net.Documents; +using Lucene.Net.Randomized.Generators; +using Lucene.Net.Support; +using NUnit.Framework; +using System.IO; +using Lucene.Net.Util; namespace Lucene.Net.Index { - using Lucene.Net.Randomized.Generators; - using Lucene.Net.Support; - using NUnit.Framework; - using System.IO; - using Util; /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with @@ -310,7 +310,7 @@ namespace Lucene.Net.Index } [Test] - public virtual void TestRandomExceptions([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestRandomExceptions([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { if (VERBOSE) { @@ -324,9 +324,14 @@ namespace Lucene.Net.Index var config = NewIndexWriterConfig(TEST_VERSION_CURRENT, analyzer) .SetRAMBufferSizeMB(0.1) - .SetMergeScheduler(scheduler); + .SetMergeScheduler(newScheduler()); - scheduler.SetSuppressExceptions(); + var scheduler = config.MergeScheduler as IConcurrentMergeScheduler; + if (scheduler != null) + { + scheduler.SetSuppressExceptions(); + } + IndexWriter writer = RandomIndexWriter.MockIndexWriter(dir, config , new TestPoint1(this)); //writer.SetMaxBufferedDocs(10); @@ -372,7 +377,7 @@ namespace Lucene.Net.Index } [Test] - public virtual void TestRandomExceptionsThreads([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestRandomExceptionsThreads([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { Directory dir = NewDirectory(); MockAnalyzer analyzer = new MockAnalyzer(Random()); @@ -380,10 +385,15 @@ namespace Lucene.Net.Index var config = NewIndexWriterConfig(TEST_VERSION_CURRENT, analyzer) .SetRAMBufferSizeMB(0.2) - .SetMergeScheduler(scheduler); + .SetMergeScheduler(newScheduler()); IndexWriter writer = RandomIndexWriter.MockIndexWriter(dir, config, new TestPoint1(this)); - scheduler.SetSuppressExceptions(); + + var scheduler = config.MergeScheduler as IConcurrentMergeScheduler; + if (scheduler != null) + { + scheduler.SetSuppressExceptions(); + } //writer.SetMaxBufferedDocs(10); writer.Commit(); @@ -569,13 +579,14 @@ namespace Lucene.Net.Index // LUCENE-1210 [Test] - public virtual void TestExceptionOnMergeInit([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestExceptionOnMergeInit([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { Directory dir = NewDirectory(); IndexWriterConfig conf = NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())).SetMaxBufferedDocs(2).SetMergePolicy(NewLogMergePolicy()); - scheduler.SetSuppressExceptions(); - conf.SetMergeScheduler(scheduler); + var cms = newScheduler(); + cms.SetSuppressExceptions(); + conf.SetMergeScheduler(cms); ((LogMergePolicy)conf.MergePolicy).MergeFactor = 2; TestPoint3 testPoint = new TestPoint3(); IndexWriter w = RandomIndexWriter.MockIndexWriter(dir, conf, testPoint); @@ -1091,7 +1102,7 @@ namespace Lucene.Net.Index // LUCENE-1044: test exception during sync [Test] - public virtual void TestExceptionDuringSync([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestExceptionDuringSync([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { MockDirectoryWrapper dir = NewMockDirectory(); FailOnlyInSync failure = new FailOnlyInSync(); @@ -1099,7 +1110,7 @@ namespace Lucene.Net.Index var config = NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())) .SetMaxBufferedDocs(2) - .SetMergeScheduler(scheduler) + .SetMergeScheduler(newScheduler()) .SetMergePolicy(NewLogMergePolicy(5)); IndexWriter writer = new IndexWriter(dir, config); @@ -1213,7 +1224,7 @@ namespace Lucene.Net.Index } [Test] - public virtual void TestForceMergeExceptions([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestForceMergeExceptions([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { Directory startDir = NewDirectory(); IndexWriterConfig conf = NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())).SetMaxBufferedDocs(2).SetMergePolicy(NewLogMergePolicy()); @@ -1233,8 +1244,12 @@ namespace Lucene.Net.Index Console.WriteLine("TEST: iter " + i); } MockDirectoryWrapper dir = new MockDirectoryWrapper(Random(), new RAMDirectory(startDir, NewIOContext(Random()))); - conf = NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())).SetMergeScheduler(scheduler); - scheduler.SetSuppressExceptions(); + conf = NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())).SetMergeScheduler(newScheduler()); + var scheduler = conf.MergeScheduler as IConcurrentMergeScheduler; + if (scheduler != null) + { + scheduler.SetSuppressExceptions(); + } w = new IndexWriter(dir, conf); dir.RandomIOExceptionRate = 0.5; try http://git-wip-us.apache.org/repos/asf/lucenenet/blob/99a4b35d/src/Lucene.Net.Tests/Index/TestIndexWriterForceMerge.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Tests/Index/TestIndexWriterForceMerge.cs b/src/Lucene.Net.Tests/Index/TestIndexWriterForceMerge.cs index 62de270..de61d1a 100644 --- a/src/Lucene.Net.Tests/Index/TestIndexWriterForceMerge.cs +++ b/src/Lucene.Net.Tests/Index/TestIndexWriterForceMerge.cs @@ -82,7 +82,7 @@ namespace Lucene.Net.Index } [Test] - public virtual void TestMaxNumSegments2([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestMaxNumSegments2([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { Directory dir = NewDirectory(); @@ -95,7 +95,7 @@ namespace Lucene.Net.Index var config = NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())) .SetMaxBufferedDocs(2) .SetMergePolicy(ldmp) - .SetMergeScheduler(scheduler); + .SetMergeScheduler(newScheduler()); IndexWriter writer = new IndexWriter(dir, config); for (int iter = 0; iter < 10; iter++) http://git-wip-us.apache.org/repos/asf/lucenenet/blob/99a4b35d/src/Lucene.Net.Tests/Index/TestIndexWriterMergePolicy.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Tests/Index/TestIndexWriterMergePolicy.cs b/src/Lucene.Net.Tests/Index/TestIndexWriterMergePolicy.cs index a6b95d7..15db222 100644 --- a/src/Lucene.Net.Tests/Index/TestIndexWriterMergePolicy.cs +++ b/src/Lucene.Net.Tests/Index/TestIndexWriterMergePolicy.cs @@ -1,8 +1,9 @@ using Lucene.Net.Documents; +using NUnit.Framework; +using System; namespace Lucene.Net.Index { - using NUnit.Framework; using Directory = Lucene.Net.Store.Directory; using Document = Documents.Document; using Field = Field; @@ -177,7 +178,7 @@ namespace Lucene.Net.Index // Test the case where a merge results in no doc at all [Test] - public virtual void TestMergeDocCount0([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestMergeDocCount0([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { Directory dir = NewDirectory(); @@ -203,7 +204,7 @@ namespace Lucene.Net.Index .SetOpenMode(OpenMode.APPEND) .SetMaxBufferedDocs(10) .SetMergePolicy(ldmp) - .SetMergeScheduler(scheduler); + .SetMergeScheduler(newScheduler()); writer = new IndexWriter(dir, config); // merge factor is changed, so check invariants after all adds http://git-wip-us.apache.org/repos/asf/lucenenet/blob/99a4b35d/src/Lucene.Net.Tests/Index/TestIndexWriterOnDiskFull.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Tests/Index/TestIndexWriterOnDiskFull.cs b/src/Lucene.Net.Tests/Index/TestIndexWriterOnDiskFull.cs index eae0626..425e09d 100644 --- a/src/Lucene.Net.Tests/Index/TestIndexWriterOnDiskFull.cs +++ b/src/Lucene.Net.Tests/Index/TestIndexWriterOnDiskFull.cs @@ -631,12 +631,12 @@ namespace Lucene.Net.Index // an IndexWriter (hit during DW.ThreadState.Init()) is // OK: [Test] - public virtual void TestImmediateDiskFull([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestImmediateDiskFull([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { MockDirectoryWrapper dir = NewMockDirectory(); var config = NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())) .SetMaxBufferedDocs(2) - .SetMergeScheduler(scheduler); + .SetMergeScheduler(newScheduler()); IndexWriter writer = new IndexWriter(dir, config); dir.MaxSizeInBytes = Math.Max(1, dir.RecomputedActualSizeInBytes); Document doc = new Document(); http://git-wip-us.apache.org/repos/asf/lucenenet/blob/99a4b35d/src/Lucene.Net.Tests/Index/TestIndexWriterReader.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Tests/Index/TestIndexWriterReader.cs b/src/Lucene.Net.Tests/Index/TestIndexWriterReader.cs index 9207b98..86f4fde 100644 --- a/src/Lucene.Net.Tests/Index/TestIndexWriterReader.cs +++ b/src/Lucene.Net.Tests/Index/TestIndexWriterReader.cs @@ -741,7 +741,7 @@ namespace Lucene.Net.Index } [Test] - public virtual void TestMergeWarmer([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestMergeWarmer([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { Directory dir1 = GetAssertNoDeletesDirectory(NewDirectory()); // Enroll warmer @@ -749,7 +749,7 @@ namespace Lucene.Net.Index var config = NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())) .SetMaxBufferedDocs(2) .SetMergedSegmentWarmer(warmer) - .SetMergeScheduler(scheduler) + .SetMergeScheduler(newScheduler()) .SetMergePolicy(NewLogMergePolicy()); IndexWriter writer = new IndexWriter(dir1, config); @@ -784,10 +784,10 @@ namespace Lucene.Net.Index } [Test] - public virtual void TestAfterCommit([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestAfterCommit([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { Directory dir1 = GetAssertNoDeletesDirectory(NewDirectory()); - var config = NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())).SetMergeScheduler(scheduler); + var config = NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())).SetMergeScheduler(newScheduler()); IndexWriter writer = new IndexWriter(dir1, config); writer.Commit(); http://git-wip-us.apache.org/repos/asf/lucenenet/blob/99a4b35d/src/Lucene.Net.Tests/Index/TestIndexWriterWithThreads.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Tests/Index/TestIndexWriterWithThreads.cs b/src/Lucene.Net.Tests/Index/TestIndexWriterWithThreads.cs index ee541be..ef67d93 100644 --- a/src/Lucene.Net.Tests/Index/TestIndexWriterWithThreads.cs +++ b/src/Lucene.Net.Tests/Index/TestIndexWriterWithThreads.cs @@ -64,6 +64,7 @@ namespace Lucene.Net.Index internal IndexWriter Writer; internal bool NoErrors; internal volatile int AddCount; + internal int TimeToRunInMilliseconds = 200; /// <param name="newField"> /// LUCENENET specific @@ -90,7 +91,7 @@ namespace Lucene.Net.Index int idUpto = 0; int fullCount = 0; - long stopTime = Environment.TickCount + 200; + long stopTime = Environment.TickCount + TimeToRunInMilliseconds; // LUCENENET specific: added the ability to change how much time to alot do { @@ -115,12 +116,12 @@ namespace Lucene.Net.Index try { #endif - Thread.Sleep(1); + Thread.Sleep(1); #if !NETSTANDARD } catch (ThreadInterruptedException ie) { - throw new ThreadInterruptedException("Thread Interrupted Exception", ie); + throw new ThreadInterruptedException(ie.toString(), ie); } #endif if (fullCount++ >= 5) @@ -158,7 +159,7 @@ namespace Lucene.Net.Index // an IndexWriter (hit during DW.ThreadState.Init()), with // multiple threads, is OK: [Test] - public virtual void TestImmediateDiskFullWithThreads([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestImmediateDiskFullWithThreads([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { int NUM_THREADS = 3; int numIterations = TEST_NIGHTLY ? 10 : 3; @@ -171,10 +172,14 @@ namespace Lucene.Net.Index MockDirectoryWrapper dir = NewMockDirectory(); var config = NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())) .SetMaxBufferedDocs(2) - .SetMergeScheduler(scheduler) + .SetMergeScheduler(newScheduler()) .SetMergePolicy(NewLogMergePolicy(4)); IndexWriter writer = new IndexWriter(dir, config); - scheduler.SetSuppressExceptions(); + var scheduler = config.mergeScheduler as IConcurrentMergeScheduler; + if (scheduler != null) + { + scheduler.SetSuppressExceptions(); + } dir.MaxSizeInBytes = 4 * 1024 + 20 * iter; IndexerThread[] threads = new IndexerThread[NUM_THREADS]; @@ -210,7 +215,7 @@ namespace Lucene.Net.Index // speaking, this isn't valid us of Lucene's APIs, but we // still want to be robust to this case: [Test] - public virtual void TestCloseWithThreads([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestCloseWithThreads([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { int NUM_THREADS = 3; int numIterations = TEST_NIGHTLY ? 7 : 3; @@ -223,16 +228,28 @@ namespace Lucene.Net.Index Directory dir = NewDirectory(); var config = NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())) .SetMaxBufferedDocs(10) - .SetMergeScheduler(scheduler) + .SetMergeScheduler(newScheduler()) .SetMergePolicy(NewLogMergePolicy(4)); IndexWriter writer = new IndexWriter(dir, config); - scheduler.SetSuppressExceptions(); + var scheduler = config.mergeScheduler as IConcurrentMergeScheduler; + if (scheduler != null) + { + scheduler.SetSuppressExceptions(); + } IndexerThread[] threads = new IndexerThread[NUM_THREADS]; for (int i = 0; i < NUM_THREADS; i++) { - threads[i] = new IndexerThread(writer, false, NewField); + threads[i] = new IndexerThread(writer, false, NewField) + + // LUCENENET specific - ConcurrentMergeScheduler + // seems to take too long for this test to index a single document + // so, increasing the time from 200 to 300 ms + + // LUCENENET TODO: Find out what is taking so friggin long here - + // probably boils down to using LINQ for something that needs to be fast + { TimeToRunInMilliseconds = 300 }; } for (int i = 0; i < NUM_THREADS; i++) @@ -294,7 +311,7 @@ namespace Lucene.Net.Index // Runs test, with multiple threads, using the specific // failure to trigger an IOException - public virtual void TestMultipleThreadsFailure(IConcurrentMergeScheduler scheduler, MockDirectoryWrapper.Failure failure) + public virtual void TestMultipleThreadsFailure(Func<IConcurrentMergeScheduler> newScheduler, MockDirectoryWrapper.Failure failure) { int NUM_THREADS = 3; @@ -307,10 +324,14 @@ namespace Lucene.Net.Index MockDirectoryWrapper dir = NewMockDirectory(); var config = NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())) .SetMaxBufferedDocs(2) - .SetMergeScheduler(scheduler) + .SetMergeScheduler(newScheduler()) .SetMergePolicy(NewLogMergePolicy(4)); IndexWriter writer = new IndexWriter(dir, config); - scheduler.SetSuppressExceptions(); + var scheduler = config.mergeScheduler as IConcurrentMergeScheduler; + if (scheduler != null) + { + scheduler.SetSuppressExceptions(); + } IndexerThread[] threads = new IndexerThread[NUM_THREADS]; @@ -372,11 +393,11 @@ namespace Lucene.Net.Index // Runs test, with one thread, using the specific failure // to trigger an IOException - public virtual void TestSingleThreadFailure(IConcurrentMergeScheduler scheduler, MockDirectoryWrapper.Failure failure) + public virtual void TestSingleThreadFailure(Func<IConcurrentMergeScheduler> newScheduler, MockDirectoryWrapper.Failure failure) { MockDirectoryWrapper dir = NewMockDirectory(); - IndexWriter writer = new IndexWriter(dir, NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())).SetMaxBufferedDocs(2).SetMergeScheduler(scheduler)); + IndexWriter writer = new IndexWriter(dir, NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())).SetMaxBufferedDocs(2).SetMergeScheduler(newScheduler())); Document doc = new Document(); FieldType customType = new FieldType(TextField.TYPE_STORED); customType.StoreTermVectors = true; @@ -449,33 +470,33 @@ namespace Lucene.Net.Index // LUCENE-1130: make sure initial IOException, and then 2nd // IOException during rollback(), is OK: [Test] - public virtual void TestIOExceptionDuringAbort([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestIOExceptionDuringAbort([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { - TestSingleThreadFailure(scheduler, new FailOnlyOnAbortOrFlush(false)); + TestSingleThreadFailure(newScheduler, new FailOnlyOnAbortOrFlush(false)); } // LUCENE-1130: make sure initial IOException, and then 2nd // IOException during rollback(), is OK: [Test] - public virtual void TestIOExceptionDuringAbortOnlyOnce([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestIOExceptionDuringAbortOnlyOnce([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { - TestSingleThreadFailure(scheduler, new FailOnlyOnAbortOrFlush(true)); + TestSingleThreadFailure(newScheduler, new FailOnlyOnAbortOrFlush(true)); } // LUCENE-1130: make sure initial IOException, and then 2nd // IOException during rollback(), with multiple threads, is OK: [Test] - public virtual void TestIOExceptionDuringAbortWithThreads([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestIOExceptionDuringAbortWithThreads([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { - TestMultipleThreadsFailure(scheduler, new FailOnlyOnAbortOrFlush(false)); + TestMultipleThreadsFailure(newScheduler, new FailOnlyOnAbortOrFlush(false)); } // LUCENE-1130: make sure initial IOException, and then 2nd // IOException during rollback(), with multiple threads, is OK: [Test] - public virtual void TestIOExceptionDuringAbortWithThreadsOnlyOnce([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestIOExceptionDuringAbortWithThreadsOnlyOnce([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { - TestMultipleThreadsFailure(scheduler, new FailOnlyOnAbortOrFlush(true)); + TestMultipleThreadsFailure(newScheduler, new FailOnlyOnAbortOrFlush(true)); } // Throws IOException during DocumentsWriter.writeSegment @@ -508,30 +529,30 @@ namespace Lucene.Net.Index // LUCENE-1130: test IOException in writeSegment [Test] - public virtual void TestIOExceptionDuringWriteSegment([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestIOExceptionDuringWriteSegment([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { - TestSingleThreadFailure(scheduler, new FailOnlyInWriteSegment(false)); + TestSingleThreadFailure(newScheduler, new FailOnlyInWriteSegment(false)); } // LUCENE-1130: test IOException in writeSegment [Test] - public virtual void TestIOExceptionDuringWriteSegmentOnlyOnce([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestIOExceptionDuringWriteSegmentOnlyOnce([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { - TestSingleThreadFailure(scheduler, new FailOnlyInWriteSegment(true)); + TestSingleThreadFailure(newScheduler, new FailOnlyInWriteSegment(true)); } // LUCENE-1130: test IOException in writeSegment, with threads [Test] - public virtual void TestIOExceptionDuringWriteSegmentWithThreads([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestIOExceptionDuringWriteSegmentWithThreads([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { - TestMultipleThreadsFailure(scheduler, new FailOnlyInWriteSegment(false)); + TestMultipleThreadsFailure(newScheduler, new FailOnlyInWriteSegment(false)); } // LUCENE-1130: test IOException in writeSegment, with threads [Test] - public virtual void TestIOExceptionDuringWriteSegmentWithThreadsOnlyOnce([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestIOExceptionDuringWriteSegmentWithThreadsOnlyOnce([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { - TestMultipleThreadsFailure(scheduler, new FailOnlyInWriteSegment(true)); + TestMultipleThreadsFailure(newScheduler, new FailOnlyInWriteSegment(true)); } // LUCENE-3365: Test adding two documents with the same field from two different IndexWriters http://git-wip-us.apache.org/repos/asf/lucenenet/blob/99a4b35d/src/Lucene.Net.Tests/Index/TestStressIndexing.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Tests/Index/TestStressIndexing.cs b/src/Lucene.Net.Tests/Index/TestStressIndexing.cs index 428a2d0..610a81b 100644 --- a/src/Lucene.Net.Tests/Index/TestStressIndexing.cs +++ b/src/Lucene.Net.Tests/Index/TestStressIndexing.cs @@ -221,7 +221,7 @@ namespace Lucene.Net.Index */ [Test] - public virtual void TestStressIndexAndSearching([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestStressIndexAndSearching([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { Directory directory = NewDirectory(); MockDirectoryWrapper wrapper = directory as MockDirectoryWrapper; @@ -230,7 +230,7 @@ namespace Lucene.Net.Index wrapper.AssertNoUnrefencedFilesOnClose = true; } - RunStressTest(directory, scheduler); + RunStressTest(directory, newScheduler()); directory.Dispose(); } } http://git-wip-us.apache.org/repos/asf/lucenenet/blob/99a4b35d/src/Lucene.Net.Tests/Index/TestTransactions.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Tests/Index/TestTransactions.cs b/src/Lucene.Net.Tests/Index/TestTransactions.cs index 627b21c..0f1c82b 100644 --- a/src/Lucene.Net.Tests/Index/TestTransactions.cs +++ b/src/Lucene.Net.Tests/Index/TestTransactions.cs @@ -110,44 +110,44 @@ namespace Lucene.Net.Index private class IndexerThread : TimedThread { - private readonly TestTransactions OuterInstance; - private IConcurrentMergeScheduler _scheduler1; - private IConcurrentMergeScheduler _scheduler2; - internal Directory Dir1; - internal Directory Dir2; + private readonly TestTransactions outerInstance; + private Func<IConcurrentMergeScheduler> newScheduler1; + private Func<IConcurrentMergeScheduler> newScheduler2; + internal Directory dir1; + internal Directory dir2; internal object @lock; - internal int NextID; + internal int nextID; public IndexerThread(TestTransactions outerInstance, object @lock, Directory dir1, Directory dir2, - IConcurrentMergeScheduler scheduler1, IConcurrentMergeScheduler scheduler2, + Func<IConcurrentMergeScheduler> newScheduler1, Func<IConcurrentMergeScheduler> newScheduler2, TimedThread[] threads) : base(threads) { - _scheduler1 = scheduler1; - _scheduler2 = scheduler2; - this.OuterInstance = outerInstance; + this.newScheduler1 = newScheduler1; + this.newScheduler2 = newScheduler2; + this.outerInstance = outerInstance; this.@lock = @lock; - this.Dir1 = dir1; - this.Dir2 = dir2; + this.dir1 = dir1; + this.dir2 = dir2; } public override void DoWork() { - var config = OuterInstance.NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())) + var config = outerInstance.NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())) .SetMaxBufferedDocs(3) - .SetMergeScheduler(_scheduler1) + .SetMergeScheduler(newScheduler1()) .SetMergePolicy(NewLogMergePolicy(2)); - IndexWriter writer1 = new IndexWriter(Dir1, config); + IndexWriter writer1 = new IndexWriter(dir1, config); ((IConcurrentMergeScheduler)writer1.Config.MergeScheduler).SetSuppressExceptions(); // Intentionally use different params so flush/merge // happen @ different times - var config2 = OuterInstance.NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())) + var config2 = outerInstance.NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())) .SetMaxBufferedDocs(2) - .SetMergeScheduler(_scheduler2) + .SetMergeScheduler(newScheduler2()) .SetMergePolicy(NewLogMergePolicy(3)); - IndexWriter writer2 = new IndexWriter(Dir2, config2); + IndexWriter writer2 = new IndexWriter(dir2, config2); ((IConcurrentMergeScheduler)writer2.Config.MergeScheduler).SetSuppressExceptions(); Update(writer1); @@ -201,13 +201,13 @@ namespace Lucene.Net.Index { Document d = new Document(); int n = Random().Next(); - d.Add(OuterInstance.NewField("id", Convert.ToString(NextID++), customType)); - d.Add(OuterInstance.NewTextField("contents", English.IntToEnglish(n), Field.Store.NO)); + d.Add(outerInstance.NewField("id", Convert.ToString(nextID++), customType)); + d.Add(outerInstance.NewTextField("contents", English.IntToEnglish(n), Field.Store.NO)); writer.AddDocument(d); } // Delete 5 docs: - int deleteID = NextID - 1; + int deleteID = nextID - 1; for (int j = 0; j < 5; j++) { writer.DeleteDocuments(new Term("id", "" + deleteID)); @@ -218,16 +218,16 @@ namespace Lucene.Net.Index private class SearcherThread : TimedThread { - internal Directory Dir1; - internal Directory Dir2; + internal Directory dir1; + internal Directory dir2; internal object @lock; public SearcherThread(object @lock, Directory dir1, Directory dir2, TimedThread[] threads) : base(threads) { this.@lock = @lock; - this.Dir1 = dir1; - this.Dir2 = dir2; + this.dir1 = dir1; + this.dir2 = dir2; } public override void DoWork() @@ -237,8 +237,8 @@ namespace Lucene.Net.Index { try { - r1 = DirectoryReader.Open(Dir1); - r2 = DirectoryReader.Open(Dir2); + r1 = DirectoryReader.Open(dir1); + r2 = DirectoryReader.Open(dir2); } catch (IOException e) { @@ -279,10 +279,10 @@ namespace Lucene.Net.Index writer.Dispose(); } - [Test, Sequential] + [Test] public virtual void TestTransactions_Mem( - [ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler1, - [ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler2) + [ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler1, + [ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler2) { Console.WriteLine("Start test"); // we cant use non-ramdir on windows, because this test needs to double-write. @@ -306,7 +306,8 @@ namespace Lucene.Net.Index TimedThread[] threads = new TimedThread[3]; int numThread = 0; - IndexerThread indexerThread = new IndexerThread(this, this, dir1, dir2, scheduler1, scheduler2, threads); + IndexerThread indexerThread = new IndexerThread(this, this, dir1, dir2, newScheduler1, newScheduler2, threads); + threads[numThread++] = indexerThread; indexerThread.Start(); http://git-wip-us.apache.org/repos/asf/lucenenet/blob/99a4b35d/src/Lucene.Net.Tests/Search/TestSearcherManager.cs ---------------------------------------------------------------------- diff --git a/src/Lucene.Net.Tests/Search/TestSearcherManager.cs b/src/Lucene.Net.Tests/Search/TestSearcherManager.cs index 1460f52..cd03219 100644 --- a/src/Lucene.Net.Tests/Search/TestSearcherManager.cs +++ b/src/Lucene.Net.Tests/Search/TestSearcherManager.cs @@ -434,11 +434,11 @@ namespace Lucene.Net.Search } [Test] - public virtual void TestReferenceDecrementIllegally([ValueSource(typeof(ConcurrentMergeSchedulers), "Values")]IConcurrentMergeScheduler scheduler) + public virtual void TestReferenceDecrementIllegally([ValueSource(typeof(ConcurrentMergeSchedulerFactories), "Values")]Func<IConcurrentMergeScheduler> newScheduler) { Directory dir = NewDirectory(); var config = NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())) - .SetMergeScheduler(scheduler); + .SetMergeScheduler(newScheduler()); IndexWriter writer = new IndexWriter(dir, config); SearcherManager sm = new SearcherManager(writer, false, new SearcherFactory()); writer.AddDocument(new Document());
