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.