Class WaitStrategyProgressive
- All Implemented Interfaces:
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.
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.apache.storm.policy.IWaitStrategy
IWaitStrategy.WaitSituation
-
Constructor Summary
-
Method Summary
-
Constructor Details
-
WaitStrategyProgressive
public WaitStrategyProgressive()
-
-
Method Details
-
prepare
- Specified by:
prepare
in interfaceIWaitStrategy
-
idle
Description copied from interface: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(); }
- Specified by:
idle
in interfaceIWaitStrategy
- Parameters:
idleCounter
- managed by the idle method until reset- Returns:
- new counter value to be used on subsequent idle cycle
- Throws:
InterruptedException
-