Class DocumentsWriterStallControl

java.lang.Object
org.apache.lucene.index.DocumentsWriterStallControl

final class DocumentsWriterStallControl extends Object
Controls the health status of a DocumentsWriter sessions. This class used to block incoming indexing threads if flushing significantly slower than indexing to ensure the DocumentsWriters healthiness. If flushing is significantly slower than indexing the net memory used within an IndexWriter session can increase very quickly and easily exceed the JVM's available memory.

To prevent OOM Errors and ensure IndexWriter's stability this class blocks incoming threads from indexing once 2 x number of available DocumentsWriterPerThreads in DocumentsWriterPerThreadPool is exceeded. Once flushing catches up and the number of flushing DWPT is equal or lower than the number of active DocumentsWriterPerThreads threads are released and can continue indexing.

  • Field Details

    • stalled

      private volatile boolean stalled
    • numWaiting

      private int numWaiting
    • wasStalled

      private boolean wasStalled
    • waiting

      private final Map<Thread,Boolean> waiting
  • Constructor Details

    • DocumentsWriterStallControl

      DocumentsWriterStallControl()
  • Method Details

    • updateStalled

      void updateStalled(boolean stalled)
      Update the stalled flag status. This method will set the stalled flag to true iff the number of flushing DocumentsWriterPerThread is greater than the number of active DocumentsWriterPerThread. Otherwise it will reset the DocumentsWriterStallControl to healthy and release all threads waiting on waitIfStalled()
    • waitIfStalled

      void waitIfStalled()
      Blocks if documents writing is currently in a stalled state.
    • anyStalledThreads

      boolean anyStalledThreads()
    • incWaiters

      private void incWaiters()
    • decrWaiters

      private void decrWaiters()
    • hasBlocked

      boolean hasBlocked()
    • getNumWaiting

      int getNumWaiting()
    • isHealthy

      boolean isHealthy()
    • isThreadQueued

      boolean isThreadQueued(Thread t)
    • wasStalled

      boolean wasStalled()