public class WaitStrategyProgressive extends Object implements IWaitStrategy
Has three levels of idling. Stays in each level for a configured number of iterations before entering the next level. Level 1 - No idling. Returns immediately. Stays in this level for `level1Count` iterations. Level 2 - Calls LockSupport.parkNanos(1). Stays in this level for `level2Count` iterations Level 3 - Calls Thread.sleep(). Stays in this level until wait situation changes.
The initial spin can be useful to prevent downstream bolt from repeatedly sleeping/parking when the upstream component is a bit relatively slower. Allows downstream bolt can enter deeper wait states only if the traffic to it appears to have reduced.
IWaitStrategy.WaitSituation| Constructor and Description |
|---|
WaitStrategyProgressive() |
| Modifier and Type | Method and Description |
|---|---|
int |
idle(int idleCounter)
Implementations of this method should be thread-safe (preferably no side-effects and lock-free).
|
void |
prepare(Map<String,Object> conf,
IWaitStrategy.WaitSituation waitSituation) |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitcreateBackPressureWaitStrategypublic void prepare(Map<String,Object> conf, IWaitStrategy.WaitSituation waitSituation)
prepare in interface IWaitStrategypublic int idle(int idleCounter)
throws InterruptedException
IWaitStrategySupports static or dynamic backoff. Dynamic backoff relies on idleCounter to estimate how long caller has been idling.
int idleCounter = 0;
int consumeCount = consumeFromQ();
while (consumeCount==0) {
idleCounter = strategy.idle(idleCounter);
consumeCount = consumeFromQ();
}
idle in interface IWaitStrategyidleCounter - managed by the idle method until resetInterruptedExceptionCopyright © 2023 The Apache Software Foundation. All rights reserved.