Lucene.Net.Index.DocumentsWriterDeleteQueue.FreezeGlobalBuffer C# (CSharp) Method

FreezeGlobalBuffer() public method

public FreezeGlobalBuffer ( DeleteSlice callerSlice ) : FrozenBufferedUpdates
callerSlice DeleteSlice
return FrozenBufferedUpdates
        public FrozenBufferedUpdates FreezeGlobalBuffer(DeleteSlice callerSlice)
        {
            GlobalBufferLock.@Lock();
            /*
             * Here we freeze the global buffer so we need to lock it, apply all
             * deletes in the queue and reset the global slice to let the GC prune the
             * queue.
             */
            Node currentTail = Tail; // take the current tail make this local any
            // Changes after this call are applied later
            // and not relevant here
            if (callerSlice != null)
            {
                // Update the callers slices so we are on the same page
                callerSlice.SliceTail = currentTail;
            }
            try
            {
                if (GlobalSlice.SliceTail != currentTail)
                {
                    GlobalSlice.SliceTail = currentTail;
                    GlobalSlice.Apply(GlobalBufferedUpdates, BufferedUpdates.MAX_INT);
                }

                FrozenBufferedUpdates packet = new FrozenBufferedUpdates(GlobalBufferedUpdates, false);
                GlobalBufferedUpdates.Clear();
                return packet;
            }
            finally
            {
                GlobalBufferLock.Unlock();
            }
        }

Usage Example

 public virtual void TestAnyChanges()
 {
     DocumentsWriterDeleteQueue queue = new DocumentsWriterDeleteQueue();
     int size = 200 + Random().Next(500) * RANDOM_MULTIPLIER;
     int termsSinceFreeze = 0;
     int queriesSinceFreeze = 0;
     for (int i = 0; i < size; i++)
     {
         Term term = new Term("id", "" + i);
         if (Random().Next(10) == 0)
         {
             queue.AddDelete(new TermQuery(term));
             queriesSinceFreeze++;
         }
         else
         {
             queue.AddDelete(term);
             termsSinceFreeze++;
         }
         Assert.IsTrue(queue.AnyChanges());
         if (Random().Next(5) == 0)
         {
             FrozenBufferedUpdates freezeGlobalBuffer = queue.FreezeGlobalBuffer(null);
             Assert.AreEqual(termsSinceFreeze, freezeGlobalBuffer.TermCount);
             Assert.AreEqual(queriesSinceFreeze, ((Query[])freezeGlobalBuffer.Queries_Nunit()).Length);
             queriesSinceFreeze = 0;
             termsSinceFreeze = 0;
             Assert.IsFalse(queue.AnyChanges());
         }
     }
 }
All Usage Examples Of Lucene.Net.Index.DocumentsWriterDeleteQueue::FreezeGlobalBuffer