public class MergeRateLimiter extends RateLimiter
RateLimiter that IndexWriter assigns to each running merge, to
give MergeSchedulers ionice like control.RateLimiter.SimpleRateLimiter| Modifier and Type | Field and Description |
|---|---|
private long |
lastNS |
private static long |
MAX_PAUSE_NS |
private double |
mbPerSec |
private MergePolicy.OneMergeProgress |
mergeProgress |
private static int |
MIN_PAUSE_CHECK_MSEC |
private static long |
MIN_PAUSE_NS |
private long |
minPauseCheckBytes |
private java.util.concurrent.atomic.AtomicLong |
totalBytesWritten |
| Constructor and Description |
|---|
MergeRateLimiter(MergePolicy.OneMergeProgress mergeProgress)
Sole constructor.
|
| Modifier and Type | Method and Description |
|---|---|
double |
getMBPerSec()
The current MB per second rate limit.
|
long |
getMinPauseCheckBytes()
How many bytes caller should add up itself before invoking
RateLimiter.pause(long). |
long |
getTotalBytesWritten()
Returns total bytes written by this merge.
|
long |
getTotalPausedNS()
Total NS merge was paused to rate limit IO.
|
long |
getTotalStoppedNS()
Total NS merge was stopped.
|
private long |
maybePause(long bytes,
long curNS)
Returns the number of nanoseconds spent in a paused state or
-1
if no pause was applied. |
long |
pause(long bytes)
Pauses, if necessary, to keep the instantaneous IO
rate at or below the target.
|
void |
setMBPerSec(double mbPerSec)
Sets an updated MB per second rate limit.
|
private static final int MIN_PAUSE_CHECK_MSEC
private static final long MIN_PAUSE_NS
private static final long MAX_PAUSE_NS
private volatile double mbPerSec
private volatile long minPauseCheckBytes
private long lastNS
private java.util.concurrent.atomic.AtomicLong totalBytesWritten
private final MergePolicy.OneMergeProgress mergeProgress
public MergeRateLimiter(MergePolicy.OneMergeProgress mergeProgress)
public void setMBPerSec(double mbPerSec)
RateLimitersetMBPerSec in class RateLimiterpublic double getMBPerSec()
RateLimitergetMBPerSec in class RateLimiterpublic long getTotalBytesWritten()
public long pause(long bytes)
throws MergePolicy.MergeAbortedException
RateLimiterNote: the implementation is thread-safe
pause in class RateLimiterMergePolicy.MergeAbortedExceptionpublic long getTotalStoppedNS()
public long getTotalPausedNS()
private long maybePause(long bytes,
long curNS)
throws MergePolicy.MergeAbortedException
-1
if no pause was applied. If the thread needs pausing, this method delegates
to the linked MergePolicy.OneMergeProgress.public long getMinPauseCheckBytes()
RateLimiterRateLimiter.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.getMinPauseCheckBytes in class RateLimiter