public virtual void TestPartialMerge() { int num = AtLeast(10); for (int iter = 0; iter < num; iter++) { if (VERBOSE) { Console.WriteLine("TEST: iter=" + iter); } Directory dir = NewDirectory(); IndexWriterConfig conf = NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())); conf.SetMergeScheduler(new SerialMergeScheduler()); TieredMergePolicy tmp = NewTieredMergePolicy(); conf.SetMergePolicy(tmp); conf.SetMaxBufferedDocs(2); tmp.MaxMergeAtOnce = 3; tmp.SegmentsPerTier = 6; IndexWriter w = new IndexWriter(dir, conf); int maxCount = 0; int numDocs = TestUtil.NextInt(Random(), 20, 100); for (int i = 0; i < numDocs; i++) { Document doc = new Document(); doc.Add(NewTextField("content", "aaa " + (i % 4), Field.Store.NO)); w.AddDocument(doc); int count = w.SegmentCount; maxCount = Math.Max(count, maxCount); Assert.IsTrue(count >= maxCount - 3, "count=" + count + " maxCount=" + maxCount); } w.Flush(true, true); int segmentCount = w.SegmentCount; int targetCount = TestUtil.NextInt(Random(), 1, segmentCount); if (VERBOSE) { Console.WriteLine("TEST: merge to " + targetCount + " segs (current count=" + segmentCount + ")"); } w.ForceMerge(targetCount); Assert.AreEqual(targetCount, w.SegmentCount); w.Dispose(); dir.Dispose(); } }
public virtual void TestForceMergeDeletes() { Directory dir = NewDirectory(); IndexWriterConfig conf = NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random)); TieredMergePolicy tmp = NewTieredMergePolicy(); conf.SetMergePolicy(tmp); conf.SetMaxBufferedDocs(4); tmp.MaxMergeAtOnce = 100; tmp.SegmentsPerTier = 100; tmp.ForceMergeDeletesPctAllowed = 30.0; IndexWriter w = new IndexWriter(dir, conf); for (int i = 0; i < 80; i++) { Document doc = new Document(); doc.Add(NewTextField("content", "aaa " + (i % 4), Field.Store.NO)); w.AddDocument(doc); } Assert.AreEqual(80, w.MaxDoc); Assert.AreEqual(80, w.NumDocs); if (VERBOSE) { Console.WriteLine("\nTEST: delete docs"); } w.DeleteDocuments(new Term("content", "0")); w.ForceMergeDeletes(); Assert.AreEqual(80, w.MaxDoc); Assert.AreEqual(60, w.NumDocs); if (VERBOSE) { Console.WriteLine("\nTEST: forceMergeDeletes2"); } ((TieredMergePolicy)w.Config.MergePolicy).ForceMergeDeletesPctAllowed = 10.0; w.ForceMergeDeletes(); Assert.AreEqual(60, w.NumDocs); Assert.AreEqual(60, w.MaxDoc); w.Dispose(); dir.Dispose(); }
public virtual void TestMaxMergeCount() { Directory dir = NewDirectory(); IndexWriterConfig iwc = new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())); int maxMergeCount = TestUtil.NextInt(Random(), 1, 5); int maxMergeThreads = TestUtil.NextInt(Random(), 1, maxMergeCount); CountdownEvent enoughMergesWaiting = new CountdownEvent(maxMergeCount); AtomicInteger runningMergeCount = new AtomicInteger(0); AtomicBoolean failed = new AtomicBoolean(); if (VERBOSE) { Console.WriteLine("TEST: maxMergeCount=" + maxMergeCount + " maxMergeThreads=" + maxMergeThreads); } ConcurrentMergeScheduler cms = new ConcurrentMergeSchedulerAnonymousInnerClassHelper(this, maxMergeCount, enoughMergesWaiting, runningMergeCount, failed); cms.SetMaxMergesAndThreads(maxMergeCount, maxMergeThreads); iwc.SetMergeScheduler(cms); iwc.SetMaxBufferedDocs(2); TieredMergePolicy tmp = new TieredMergePolicy(); iwc.SetMergePolicy(tmp); tmp.MaxMergeAtOnce = 2; tmp.SegmentsPerTier = 2; IndexWriter w = new IndexWriter(dir, iwc); Document doc = new Document(); doc.Add(NewField("field", "field", TextField.TYPE_NOT_STORED)); while (enoughMergesWaiting.CurrentCount != 0 && !failed.Get()) { for (int i = 0; i < 10; i++) { w.AddDocument(doc); } } w.Dispose(false); dir.Dispose(); }
public static TieredMergePolicy NewTieredMergePolicy(Random r) { TieredMergePolicy tmp = new TieredMergePolicy(); if (Rarely(r)) { tmp.MaxMergeAtOnce = TestUtil.NextInt(r, 2, 9); tmp.MaxMergeAtOnceExplicit = TestUtil.NextInt(r, 2, 9); } else { tmp.MaxMergeAtOnce = TestUtil.NextInt(r, 10, 50); tmp.MaxMergeAtOnceExplicit = TestUtil.NextInt(r, 10, 50); } if (Rarely(r)) { tmp.MaxMergedSegmentMB = 0.2 + r.NextDouble() * 2.0; } else { tmp.MaxMergedSegmentMB = r.NextDouble() * 100; } tmp.FloorSegmentMB = 0.2 + r.NextDouble() * 2.0; tmp.ForceMergeDeletesPctAllowed = 0.0 + r.NextDouble() * 30.0; if (Rarely(r)) { tmp.SegmentsPerTier = TestUtil.NextInt(r, 2, 20); } else { tmp.SegmentsPerTier = TestUtil.NextInt(r, 10, 50); } ConfigureRandom(r, tmp); tmp.ReclaimDeletesWeight = r.NextDouble() * 4; return tmp; }
public virtual void TestSetters() { TieredMergePolicy tmp = new TieredMergePolicy(); tmp.MaxMergedSegmentMB = 0.5; Assert.AreEqual(0.5, tmp.MaxMergedSegmentMB, EPSILON); tmp.MaxMergedSegmentMB = double.PositiveInfinity; Assert.AreEqual(long.MaxValue / 1024 / 1024.0, tmp.MaxMergedSegmentMB, EPSILON * long.MaxValue); tmp.MaxMergedSegmentMB = long.MaxValue / 1024 / 1024.0; Assert.AreEqual(long.MaxValue / 1024 / 1024.0, tmp.MaxMergedSegmentMB, EPSILON * long.MaxValue); try { tmp.MaxMergedSegmentMB = -2.0; Assert.Fail("Didn't throw IllegalArgumentException"); } #pragma warning disable 168 catch (System.ArgumentException iae) #pragma warning restore 168 { // pass } tmp.FloorSegmentMB = 2.0; Assert.AreEqual(2.0, tmp.FloorSegmentMB, EPSILON); tmp.FloorSegmentMB = double.PositiveInfinity; Assert.AreEqual(long.MaxValue / 1024 / 1024.0, tmp.FloorSegmentMB, EPSILON * long.MaxValue); tmp.FloorSegmentMB = long.MaxValue / 1024 / 1024.0; Assert.AreEqual(long.MaxValue / 1024 / 1024.0, tmp.FloorSegmentMB, EPSILON * long.MaxValue); try { tmp.FloorSegmentMB = -2.0; Assert.Fail("Didn't throw IllegalArgumentException"); } #pragma warning disable 168 catch (System.ArgumentException iae) #pragma warning restore 168 { // pass } tmp.MaxCFSSegmentSizeMB = 2.0; Assert.AreEqual(2.0, tmp.MaxCFSSegmentSizeMB, EPSILON); tmp.MaxCFSSegmentSizeMB = double.PositiveInfinity; Assert.AreEqual(long.MaxValue / 1024 / 1024.0, tmp.MaxCFSSegmentSizeMB, EPSILON * long.MaxValue); tmp.MaxCFSSegmentSizeMB = long.MaxValue / 1024 / 1024.0; Assert.AreEqual(long.MaxValue / 1024 / 1024.0, tmp.MaxCFSSegmentSizeMB, EPSILON * long.MaxValue); try { tmp.MaxCFSSegmentSizeMB = -2.0; Assert.Fail("Didn't throw IllegalArgumentException"); } #pragma warning disable 168 catch (System.ArgumentException iae) #pragma warning restore 168 { // pass } // TODO: Add more checks for other non-double setters! }
public SegmentByteSizeDescending(TieredMergePolicy outerInstance) { this.OuterInstance = outerInstance; }
public virtual void TestSetters() { TieredMergePolicy tmp = new TieredMergePolicy(); tmp.MaxMergedSegmentMB = 0.5; Assert.AreEqual(0.5, tmp.MaxMergedSegmentMB, EPSILON); tmp.MaxMergedSegmentMB = double.PositiveInfinity; Assert.AreEqual(long.MaxValue / 1024 / 1024.0, tmp.MaxMergedSegmentMB, EPSILON * long.MaxValue); tmp.MaxMergedSegmentMB = long.MaxValue / 1024 / 1024.0; Assert.AreEqual(long.MaxValue / 1024 / 1024.0, tmp.MaxMergedSegmentMB, EPSILON * long.MaxValue); try { tmp.MaxMergedSegmentMB = -2.0; Assert.Fail("Didn't throw IllegalArgumentException"); } catch (ArgumentOutOfRangeException) // LUCENENET specific - changed from IllegalArgumentException to ArgumentOutOfRangeException (.NET convention) { // pass } tmp.FloorSegmentMB = 2.0; Assert.AreEqual(2.0, tmp.FloorSegmentMB, EPSILON); tmp.FloorSegmentMB = double.PositiveInfinity; Assert.AreEqual(long.MaxValue / 1024 / 1024.0, tmp.FloorSegmentMB, EPSILON * long.MaxValue); tmp.FloorSegmentMB = long.MaxValue / 1024 / 1024.0; Assert.AreEqual(long.MaxValue / 1024 / 1024.0, tmp.FloorSegmentMB, EPSILON * long.MaxValue); try { tmp.FloorSegmentMB = -2.0; Assert.Fail("Didn't throw IllegalArgumentException"); } catch (ArgumentOutOfRangeException) // LUCENENET specific - changed from IllegalArgumentException to ArgumentOutOfRangeException (.NET convention) { // pass } tmp.MaxCFSSegmentSizeMB = 2.0; Assert.AreEqual(2.0, tmp.MaxCFSSegmentSizeMB, EPSILON); tmp.MaxCFSSegmentSizeMB = double.PositiveInfinity; Assert.AreEqual(long.MaxValue / 1024 / 1024.0, tmp.MaxCFSSegmentSizeMB, EPSILON * long.MaxValue); tmp.MaxCFSSegmentSizeMB = long.MaxValue / 1024 / 1024.0; Assert.AreEqual(long.MaxValue / 1024 / 1024.0, tmp.MaxCFSSegmentSizeMB, EPSILON * long.MaxValue); try { tmp.MaxCFSSegmentSizeMB = -2.0; Assert.Fail("Didn't throw IllegalArgumentException"); } catch (ArgumentOutOfRangeException) // LUCENENET specific - changed from IllegalArgumentException to ArgumentOutOfRangeException (.NET convention) { // pass } // TODO: Add more checks for other non-double setters! }