org.apache.curator
Class SessionFailRetryLoop

java.lang.Object
  extended by org.apache.curator.SessionFailRetryLoop
All Implemented Interfaces:
Closeable

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)

Canonical usage:
 SessionFailRetryLoop    retryLoop = client.newSessionFailRetryLoop(mode);
 retryLoop.start();
 try
 {
     while ( retryLoop.shouldContinue() )
     {
         try
         {
             // do work
         }
         catch ( Exception e )
         {
             retryLoop.takeException(e);
         }
     }
 }
 finally
 {
     retryLoop.close();
 }
 


Nested Class Summary
static class SessionFailRetryLoop.Mode
           
static class SessionFailRetryLoop.SessionFailedException
           
 
Method Summary
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
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

callWithRetry

public static <T> T callWithRetry(CuratorZookeeperClient client,
                                  SessionFailRetryLoop.Mode mode,
                                  Callable<T> proc)
                       throws Exception
Convenience utility: creates a "session fail" retry loop calling the given proc

Type Parameters:
T - return type
Parameters:
client - Zookeeper
mode - how to handle session failures
proc - procedure to call with retry
Returns:
procedure result
Throws:
SessionFailRetryLoop.SessionFailedException - any non-retriable errors
Exception

start

public void start()
SessionFailRetryLoop must be started


shouldContinue

public boolean shouldContinue()
If true is returned, make an attempt at the set of operations

Returns:
true/false

close

public void close()
Must be called in a finally handler when done with the loop

Specified by:
close in interface Closeable

takeException

public void takeException(Exception exception)
                   throws Exception
Pass any caught exceptions here

Parameters:
exception - the exception
Throws:
SessionFailRetryLoop.SessionFailedException - if not retry-able or the retry policy returned negative
Exception


Copyright © 2011–2014 The Apache Software Foundation. All rights reserved.