public class WaitStrategyProgressive extends Object implements IWaitStrategy
A Progressive Wait Strategy.
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, wait
createBackPressureWaitStrategy
public void prepare(Map<String,Object> conf, IWaitStrategy.WaitSituation waitSituation)
prepare
in interface IWaitStrategy
public int idle(int idleCounter) throws InterruptedException
IWaitStrategy
Implementations of this method should be thread-safe (preferably no side-effects and lock-free).
Supports 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 IWaitStrategy
idleCounter
- managed by the idle method until resetInterruptedException
Copyright © 2022 The Apache Software Foundation. All rights reserved.