public abstract class RetryLoop extends Object
Mechanism to perform an operation on Zookeeper that is safe against disconnections and "recoverable" errors.
If an exception occurs during the operation, the RetryLoop will process it, check with the current retry policy and either attempt to reconnect or re-throw the exception
Canonical usage:RetryLoop retryLoop = client.newRetryLoop(); while ( retryLoop.shouldContinue() ) { try { // do your work ZooKeeper zk = client.getZooKeeper(); // it's important to re-get the ZK instance in case there was an error and the instance was re-created retryLoop.markComplete(); } catch ( Exception e ) { retryLoop.takeException(e); } }
Note: this an abstract class
instead of an interface
for historical reasons. It was originally a class
and if it becomes an interface we risk IncompatibleClassChangeError
s with clients.
Constructor and Description |
---|
RetryLoop() |
Modifier and Type | Method and Description |
---|---|
static <T> T |
callWithRetry(CuratorZookeeperClient client,
Callable<T> proc)
Convenience utility: creates a retry loop calling the given proc and retrying if needed
|
static RetrySleeper |
getDefaultRetrySleeper()
Returns the default retry sleeper
|
abstract void |
markComplete()
Call this when your operation has successfully completed
|
abstract boolean |
shouldContinue()
If true is returned, make an attempt at the operation
|
abstract void |
takeException(Exception exception)
Pass any caught exceptions here
|
public static RetrySleeper getDefaultRetrySleeper()
public static <T> T callWithRetry(CuratorZookeeperClient client, Callable<T> proc) throws Exception
T
- return typeclient
- Zookeeperproc
- procedure to call with retryException
- any non-retriable errorspublic abstract boolean shouldContinue()
public abstract void markComplete()
Copyright © 2011–2023 The Apache Software Foundation. All rights reserved.