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, wait
createBackPressureWaitStrategy
public void prepare(Map<String,Object> conf, IWaitStrategy.WaitSituation waitSituation)
prepare
in interface IWaitStrategy
public int idle(int idleCounter) throws InterruptedException
IWaitStrategy
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 © 2023 The Apache Software Foundation. All rights reserved.