public virtual void TestCorruptionAfterDiskFullDuringMerge() { MockDirectoryWrapper dir = NewMockDirectory(); //IndexWriter w = new IndexWriter(dir, NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).setReaderPooling(true)); IndexWriter w = new IndexWriter(dir, NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())).SetMergeScheduler(new SerialMergeScheduler()).SetReaderPooling(true).SetMergePolicy(NewLogMergePolicy(2))); // we can do this because we add/delete/add (and dont merge to "nothing") w.KeepFullyDeletedSegments = true; Document doc = new Document(); doc.Add(NewTextField("f", "doctor who", Field.Store.NO)); w.AddDocument(doc); w.Commit(); w.DeleteDocuments(new Term("f", "who")); w.AddDocument(doc); // disk fills up! FailTwiceDuringMerge ftdm = new FailTwiceDuringMerge(); ftdm.SetDoFail(); dir.FailOn(ftdm); try { w.Commit(); Assert.Fail("fake disk full IOExceptions not hit"); } #pragma warning disable 168 catch (IOException ioe) #pragma warning restore 168 { // expected Assert.IsTrue(ftdm.DidFail1 || ftdm.DidFail2); } TestUtil.CheckIndex(dir); ftdm.ClearDoFail(); w.AddDocument(doc); w.Dispose(); dir.Dispose(); }
public virtual void TestCorruptionAfterDiskFullDuringMerge() { MockDirectoryWrapper dir = NewMockDirectory(); //IndexWriter w = new IndexWriter(dir, NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).setReaderPooling(true)); IndexWriter w = new IndexWriter(dir, NewIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(Random())).SetMergeScheduler(new SerialMergeScheduler()).SetReaderPooling(true).SetMergePolicy(NewLogMergePolicy(2))); // we can do this because we add/delete/add (and dont merge to "nothing") w.KeepFullyDeletedSegments = true; Document doc = new Document(); doc.Add(NewTextField("f", "doctor who", Field.Store.NO)); w.AddDocument(doc); w.Commit(); w.DeleteDocuments(new Term("f", "who")); w.AddDocument(doc); // disk fills up! FailTwiceDuringMerge ftdm = new FailTwiceDuringMerge(); ftdm.SetDoFail(); dir.FailOn(ftdm); try { w.Commit(); Assert.Fail("fake disk full IOExceptions not hit"); } catch (IOException ioe) { // expected Assert.IsTrue(ftdm.DidFail1 || ftdm.DidFail2); } TestUtil.CheckIndex(dir); ftdm.ClearDoFail(); w.AddDocument(doc); w.Dispose(); dir.Dispose(); }
public void TestCorruptionAfterDiskFullDuringMerge() { MockRAMDirectory dir = new MockRAMDirectory(); dir.SetPreventDoubleWrite(false); IndexWriter w = new IndexWriter(dir, new WhitespaceAnalyzer(), IndexWriter.MaxFieldLength.UNLIMITED); w.SetMergeScheduler(new SerialMergeScheduler()); ((LogMergePolicy)w.GetMergePolicy()).SetMergeFactor(2); Document doc = new Document(); doc.Add(new Field("f", "doctor who", Field.Store.YES, Field.Index.ANALYZED)); w.AddDocument(doc); w.Commit(); w.DeleteDocuments(new Term("f", "who")); w.AddDocument(doc); // disk fills up! FailTwiceDuringMerge ftdm = new FailTwiceDuringMerge(); ftdm.SetDoFail(); dir.FailOn(ftdm); try { w.Commit(); Assert.Fail("fake disk full IOExceptions not hit"); } catch (System.IO.IOException ioe) { // expected Assert.IsTrue(ftdm.didFail1 || ftdm.didFail2); } _TestUtil.CheckIndex(dir); ftdm.ClearDoFail(); w.AddDocument(doc); w.Close(); _TestUtil.CheckIndex(dir); dir.Close(); }