Package org.apache.lucene.index

# Class MergePolicy.OneMergeProgress

java.lang.Object
org.apache.lucene.index.MergePolicy.OneMergeProgress

Enclosing class:
  `MergePolicy`

public static class MergePolicy.OneMergeProgress extends Object
Progress and state for an executing merge. This class encapsulates the logic to pause and resume the merge thread or to abort the merge entirely.

WARNING: This API is experimental and might change in incompatible ways in the next release.

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `static enum`
  `MergePolicy.OneMergeProgress.PauseReason`
  Reason for pausing the merge thread.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `OneMergeProgress()`
  Creates a new merge progress info.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `abort()`
  Abort the merge this progress tracks at the next possible moment.
  `Map<MergePolicy.OneMergeProgress.PauseReason,Long>`
  `getPauseTimes()`
  Returns pause reasons and associated times in nanoseconds.
  `boolean`
  `isAborted()`
  Return the aborted state of this merge.
  `void`
  `pauseNanos(long pauseNanos, MergePolicy.OneMergeProgress.PauseReason reason, BooleanSupplier condition)`
  Pauses the calling thread for at least `pauseNanos` nanoseconds unless the merge is aborted or the external condition returns `false`, in which case control returns immediately.
  `void`
  `wakeup()`
  Request a wakeup for any threads stalled in `pauseNanos(long, org.apache.lucene.index.MergePolicy.OneMergeProgress.PauseReason, java.util.function.BooleanSupplier)`.

  ### Methods inherited from class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Constructor Details

  - ### OneMergeProgress

    public OneMergeProgress()
    Creates a new merge progress info.

- ## Method Details

  - ### abort

    public void abort()
    Abort the merge this progress tracks at the next possible moment.

  - ### isAborted

    public boolean isAborted()
    Return the aborted state of this merge.

  - ### pauseNanos

    public void pauseNanos(long pauseNanos, MergePolicy.OneMergeProgress.PauseReason reason, BooleanSupplier condition) throws InterruptedException
    Pauses the calling thread for at least `pauseNanos` nanoseconds unless the merge is aborted or the external condition returns `false`, in which case control returns immediately.

    The external condition is required so that other threads can terminate the pausing immediately, before `pauseNanos` expires. We can't rely on just `Condition.awaitNanos(long)` alone because it can return due to spurious wakeups too.

    Parameters:
      `condition` - The pause condition that should return false if immediate return from this method is needed. Other threads can wake up any sleeping thread by calling `wakeup()`, but it'd fall to sleep for the remainder of the requested time if this condition
    Throws:
      `InterruptedException`

  - ### wakeup

    public void wakeup()
    Request a wakeup for any threads stalled in `pauseNanos(long, org.apache.lucene.index.MergePolicy.OneMergeProgress.PauseReason, java.util.function.BooleanSupplier)`.

  - ### getPauseTimes

    public Map<MergePolicy.OneMergeProgress.PauseReason,Long> getPauseTimes()
    Returns pause reasons and associated times in nanoseconds.