Class CircuitBreakingConnectionStateListener
- java.lang.Object
-
- org.apache.curator.framework.state.CircuitBreakingConnectionStateListener
-
- All Implemented Interfaces:
ConnectionStateListener
public class CircuitBreakingConnectionStateListener extends java.lang.Object implements ConnectionStateListener
A decorator/proxy for connection state listeners that adds circuit breaking behavior. During network outages ZooKeeper can become very noisy sending connection/disconnection events in rapid succession. Curator recipes respond to these messages by resetting state, etc. E.g. LeaderLatch must delete its lock node and try to recreate it in order to try to re-obtain leadership, etc.
This noisy herding can be avoided by using the circuit breaking listener decorator. When it receives
ConnectionState.SUSPENDED, the circuit becomes "open" (based on the providedRetryPolicy) and will ignore future connection state changes until RetryPolicy timeout has elapsed. Note: however, if the connection goes fromConnectionState.SUSPENDEDtoConnectionState.LOSTthe first LOST state is sent.When the circuit decorator is closed, all connection state changes are forwarded to the managed listener. When the first disconnected state is received, the circuit becomes open. The state change that caused the circuit to open is sent to the managed listener and the RetryPolicy will be used to get a delay amount. While the delay is active, the decorator will store state changes but will not forward them to the managed listener (except, however, the first time the state changes from SUSPENDED to LOST). When the delay elapses, if the connection has been restored, the circuit closes and forwards the new state to the managed listener. If the connection has not been restored, the RetryPolicy is checked again. If the RetryPolicy indicates another retry is allowed the process repeats. If, however, the RetryPolicy indicates that retries are exhausted then the circuit closes - if the current state is different than the state that caused the circuit to open it is forwarded to the managed listener.
-
-
Constructor Summary
Constructors Constructor Description CircuitBreakingConnectionStateListener(CuratorFramework client, ConnectionStateListener listener, org.apache.curator.RetryPolicy retryPolicy)CircuitBreakingConnectionStateListener(CuratorFramework client, ConnectionStateListener listener, org.apache.curator.RetryPolicy retryPolicy, java.util.concurrent.ScheduledExecutorService service)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanisOpen()Returns true if the circuit is openvoidstateChanged(CuratorFramework client, ConnectionState newState)Called when there is a state change in the connection-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.curator.framework.state.ConnectionStateListener
doNotDecorate
-
-
-
-
Constructor Detail
-
CircuitBreakingConnectionStateListener
public CircuitBreakingConnectionStateListener(CuratorFramework client, ConnectionStateListener listener, org.apache.curator.RetryPolicy retryPolicy)
- Parameters:
client- Curator instancelistener- listener to manageretryPolicy- breaking policy to use
-
CircuitBreakingConnectionStateListener
public CircuitBreakingConnectionStateListener(CuratorFramework client, ConnectionStateListener listener, org.apache.curator.RetryPolicy retryPolicy, java.util.concurrent.ScheduledExecutorService service)
- Parameters:
client- Curator instancelistener- listener to manageretryPolicy- breaking policy to useservice- scheduler to use
-
-
Method Detail
-
stateChanged
public void stateChanged(CuratorFramework client, ConnectionState newState)
Description copied from interface:ConnectionStateListenerCalled when there is a state change in the connection- Specified by:
stateChangedin interfaceConnectionStateListener- Parameters:
client- the clientnewState- the new state
-
isOpen
public boolean isOpen()
Returns true if the circuit is open- Returns:
- true/false
-
-