public static class MergePolicy.OneMergeProgress
extends java.lang.Object
Modifier and Type | Class and Description |
---|---|
static class |
MergePolicy.OneMergeProgress.PauseReason
Reason for pausing the merge thread.
|
Modifier and Type | Field and Description |
---|---|
private boolean |
aborted |
private java.lang.Thread |
owner
This field is for sanity-check purposes only.
|
private java.util.concurrent.locks.ReentrantLock |
pauseLock |
private java.util.EnumMap<MergePolicy.OneMergeProgress.PauseReason,java.util.concurrent.atomic.AtomicLong> |
pauseTimesNS
Pause times (in nanoseconds) for each
MergePolicy.OneMergeProgress.PauseReason . |
private java.util.concurrent.locks.Condition |
pausing |
Constructor and Description |
---|
OneMergeProgress()
Creates a new merge progress info.
|
Modifier and Type | Method and Description |
---|---|
void |
abort()
Abort the merge this progress tracks at the next
possible moment.
|
java.util.Map<MergePolicy.OneMergeProgress.PauseReason,java.lang.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,
java.util.function.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. |
(package private) void |
setMergeThread(java.lang.Thread owner) |
void |
wakeup()
Request a wakeup for any threads stalled in
pauseNanos(long, org.apache.lucene.index.MergePolicy.OneMergeProgress.PauseReason, java.util.function.BooleanSupplier) . |
private final java.util.concurrent.locks.ReentrantLock pauseLock
private final java.util.concurrent.locks.Condition pausing
private final java.util.EnumMap<MergePolicy.OneMergeProgress.PauseReason,java.util.concurrent.atomic.AtomicLong> pauseTimesNS
MergePolicy.OneMergeProgress.PauseReason
.private volatile boolean aborted
private java.lang.Thread owner
MergePolicy.OneMerge.mergeInit()
is permitted to be calling
pauseNanos(long, org.apache.lucene.index.MergePolicy.OneMergeProgress.PauseReason, java.util.function.BooleanSupplier)
. This is always verified at runtime.public void abort()
public boolean isAborted()
public void pauseNanos(long pauseNanos, MergePolicy.OneMergeProgress.PauseReason reason, java.util.function.BooleanSupplier condition) throws java.lang.InterruptedException
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.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
conditionjava.lang.InterruptedException
public void wakeup()
pauseNanos(long, org.apache.lucene.index.MergePolicy.OneMergeProgress.PauseReason, java.util.function.BooleanSupplier)
.public java.util.Map<MergePolicy.OneMergeProgress.PauseReason,java.lang.Long> getPauseTimes()
final void setMergeThread(java.lang.Thread owner)