public class SessionFailRetryLoop extends Object implements Closeable
See RetryLoop
for the main details on retry loops. All Curator/ZooKeeper operations
should be done in a retry loop.
The standard retry loop treats session failure as a type of connection failure. i.e. the fact that it is a session failure isn't considered. This can be problematic if you are performing a series of operations that rely on ephemeral nodes. If the session fails after the ephemeral node has been created, future Curator/ZooKeeper operations may succeed even though the ephemeral node has been removed by ZooKeeper.
Here's an example:
The SessionFailRetryLoop prevents this type of scenario. When a session failure is detected,
the thread is marked as failed which will cause all future Curator operations to fail. The
SessionFailRetryLoop will then either retry the entire
set of operations or fail (depending on SessionFailRetryLoop.Mode
)
SessionFailRetryLoop retryLoop = client.newSessionFailRetryLoop(mode); retryLoop.start(); try { while ( retryLoop.shouldContinue() ) { try { // do work } catch ( Exception e ) { retryLoop.takeException(e); } } } finally { retryLoop.close(); }
Modifier and Type | Class and Description |
---|---|
static class |
SessionFailRetryLoop.Mode |
static class |
SessionFailRetryLoop.SessionFailedException |
Modifier and Type | Method and Description |
---|---|
static <T> T |
callWithRetry(CuratorZookeeperClient client,
SessionFailRetryLoop.Mode mode,
Callable<T> proc)
Convenience utility: creates a "session fail" retry loop calling the given proc
|
void |
close()
Must be called in a finally handler when done with the loop
|
boolean |
shouldContinue()
If true is returned, make an attempt at the set of operations
|
void |
start()
SessionFailRetryLoop must be started
|
void |
takeException(Exception exception)
Pass any caught exceptions here
|
public static <T> T callWithRetry(CuratorZookeeperClient client, SessionFailRetryLoop.Mode mode, Callable<T> proc) throws Exception
T
- return typeclient
- Zookeepermode
- how to handle session failuresproc
- procedure to call with retryException
- any non-retriable errorspublic void start()
public boolean shouldContinue()
public void close()
close
in interface Closeable
close
in interface AutoCloseable
Copyright © 2011–2023 The Apache Software Foundation. All rights reserved.