Class MergeRateLimiter

java.lang.Object
org.apache.lucene.store.RateLimiter
org.apache.lucene.index.MergeRateLimiter

public class MergeRateLimiter extends RateLimiter
This is the RateLimiter that IndexWriter assigns to each running merge, to give MergeSchedulers ionice like control.
  • Field Details

    • MIN_PAUSE_CHECK_MSEC

      private static final int MIN_PAUSE_CHECK_MSEC
      See Also:
    • MIN_PAUSE_NS

      private static final long MIN_PAUSE_NS
    • MAX_PAUSE_NS

      private static final long MAX_PAUSE_NS
    • mbPerSec

      private volatile double mbPerSec
    • minPauseCheckBytes

      private volatile long minPauseCheckBytes
    • lastNS

      private long lastNS
    • totalBytesWritten

      private AtomicLong totalBytesWritten
    • mergeProgress

      private final MergePolicy.OneMergeProgress mergeProgress
  • Constructor Details

  • Method Details

    • setMBPerSec

      public void setMBPerSec(double mbPerSec)
      Description copied from class: RateLimiter
      Sets an updated MB per second rate limit. A subclass is allowed to perform dynamic updates of the rate limit during use.
      Specified by:
      setMBPerSec in class RateLimiter
    • getMBPerSec

      public double getMBPerSec()
      Description copied from class: RateLimiter
      The current MB per second rate limit.
      Specified by:
      getMBPerSec in class RateLimiter
    • getTotalBytesWritten

      public long getTotalBytesWritten()
      Returns total bytes written by this merge.
    • pause

      public long pause(long bytes) throws MergePolicy.MergeAbortedException
      Description copied from class: RateLimiter
      Pauses, if necessary, to keep the instantaneous IO rate at or below the target.

      Note: the implementation is thread-safe

      Specified by:
      pause in class RateLimiter
      Returns:
      the pause time in nano seconds
      Throws:
      MergePolicy.MergeAbortedException
    • getTotalStoppedNS

      public long getTotalStoppedNS()
      Total NS merge was stopped.
    • getTotalPausedNS

      public long getTotalPausedNS()
      Total NS merge was paused to rate limit IO.
    • maybePause

      private long maybePause(long bytes, long curNS) throws MergePolicy.MergeAbortedException
      Returns the number of nanoseconds spent in a paused state or -1 if no pause was applied. If the thread needs pausing, this method delegates to the linked MergePolicy.OneMergeProgress.
      Throws:
      MergePolicy.MergeAbortedException
    • getMinPauseCheckBytes

      public long getMinPauseCheckBytes()
      Description copied from class: RateLimiter
      How many bytes caller should add up itself before invoking RateLimiter.pause(long). NOTE: The value returned by this method may change over time and is not guaranteed to be constant throughout the lifetime of the RateLimiter. Users are advised to refresh their local values with calls to this method to ensure consistency.
      Specified by:
      getMinPauseCheckBytes in class RateLimiter