Flush() public method

public Flush ( ) : void
return void
        // try cloning and reopening the norms
        private void  DoTestNorms(Directory dir)
        {
            AddDocs(dir, 12, true);
            IndexReader ir = IndexReader.Open(dir);

            VerifyIndex(ir);
            ModifyNormsForF1(ir);
            IndexReader irc = (IndexReader)ir.Clone();              // IndexReader.open(dir);//ir.clone();

            VerifyIndex(irc);

            ModifyNormsForF1(irc);

            IndexReader irc3 = (IndexReader)irc.Clone();

            VerifyIndex(irc3);
            ModifyNormsForF1(irc3);
            VerifyIndex(irc3);
            irc3.Flush();
            irc3.Close();
        }
Example #2
0
        public virtual void  TestSegmentReaderDelDocsReferenceCounting()
        {
            Directory dir1 = new MockRAMDirectory();

            TestIndexReaderReopen.CreateIndex(dir1, false);

            IndexReader   origReader        = IndexReader.Open(dir1, false);
            SegmentReader origSegmentReader = SegmentReader.GetOnlySegmentReader(origReader);

            // deletedDocsRef should be null because nothing has updated yet
            Assert.IsNull(origSegmentReader.deletedDocsRef_ForNUnit);

            // we deleted a document, so there is now a deletedDocs bitvector and a
            // reference to it
            origReader.DeleteDocument(1);
            AssertDelDocsRefCountEquals(1, origSegmentReader);

            // the cloned segmentreader should have 2 references, 1 to itself, and 1 to
            // the original segmentreader
            IndexReader   clonedReader        = (IndexReader)origReader.Clone();
            SegmentReader clonedSegmentReader = SegmentReader.GetOnlySegmentReader(clonedReader);

            AssertDelDocsRefCountEquals(2, origSegmentReader);
            // deleting a document creates a new deletedDocs bitvector, the refs goes to
            // 1
            clonedReader.DeleteDocument(2);
            AssertDelDocsRefCountEquals(1, origSegmentReader);
            AssertDelDocsRefCountEquals(1, clonedSegmentReader);

            // make sure the deletedocs objects are different (copy
            // on write)
            Assert.IsTrue(origSegmentReader.deletedDocs_ForNUnit != clonedSegmentReader.deletedDocs_ForNUnit);

            AssertDocDeleted(origSegmentReader, clonedSegmentReader, 1);
            Assert.IsTrue(!origSegmentReader.IsDeleted(2));             // doc 2 should not be deleted
            // in original segmentreader
            Assert.IsTrue(clonedSegmentReader.IsDeleted(2));            // doc 2 should be deleted in
            // cloned segmentreader

            // deleting a doc from the original segmentreader should throw an exception
            Assert.Throws <LockObtainFailedException>(() => origReader.DeleteDocument(4), "expected exception");

            origReader.Close();
            // try closing the original segment reader to see if it affects the
            // clonedSegmentReader
            clonedReader.DeleteDocument(3);
            clonedReader.Flush();
            AssertDelDocsRefCountEquals(1, clonedSegmentReader);

            // test a reopened reader
            IndexReader   reopenedReader      = clonedReader.Reopen();
            IndexReader   cloneReader2        = (IndexReader)reopenedReader.Clone();
            SegmentReader cloneSegmentReader2 = SegmentReader.GetOnlySegmentReader(cloneReader2);

            AssertDelDocsRefCountEquals(2, cloneSegmentReader2);
            clonedReader.Close();
            reopenedReader.Close();
            cloneReader2.Close();

            dir1.Close();
        }