Class DocumentsWriterStallControl


  • final class DocumentsWriterStallControl
    extends java.lang.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 Detail

      • stalled

        private volatile boolean stalled
      • numWaiting

        private int numWaiting
      • wasStalled

        private boolean wasStalled
      • waiting

        private final java.util.Map<java.lang.Thread,​java.lang.Boolean> waiting
    • Constructor Detail

      • DocumentsWriterStallControl

        DocumentsWriterStallControl()
    • Method Detail

      • 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​(java.lang.Thread t)
      • wasStalled

        boolean wasStalled()