public override void OnInsert(DocumentsWriterFlushControl control, ThreadState state)
{
List<ThreadState> pending = new List<ThreadState>();
List<ThreadState> notPending = new List<ThreadState>();
FindPending(control, pending, notPending);
bool flushCurrent = state.FlushPending;
long activeBytes = control.ActiveBytes();
ThreadState toFlush;
if (state.FlushPending)
{
toFlush = state;
}
else if (FlushOnDocCount() && state.DocumentsWriterPerThread.NumDocsInRAM >= IWConfig.MaxBufferedDocs)
{
toFlush = state;
}
else if (FlushOnRAM() && activeBytes >= (long)(IWConfig.RAMBufferSizeMB * 1024.0 * 1024.0))
{
toFlush = FindLargestNonPendingWriter(control, state);
Assert.IsFalse(toFlush.FlushPending);
}
else
{
toFlush = null;
}
base.OnInsert(control, state);
if (toFlush != null)
{
if (flushCurrent)
{
Assert.IsTrue(pending.Remove(toFlush));
}
else
{
Assert.IsTrue(notPending.Remove(toFlush));
}
Assert.IsTrue(toFlush.FlushPending);
HasMarkedPending = true;
}
else
{
PeakBytesWithoutFlush = Math.Max(activeBytes, PeakBytesWithoutFlush);
PeakDocCountWithoutFlush = Math.Max(state.DocumentsWriterPerThread.NumDocsInRAM, PeakDocCountWithoutFlush);
}
foreach (ThreadState threadState in notPending)
{
Assert.IsFalse(threadState.FlushPending);
}
}
}