code: public static<T> T      callWithRetry(CuratorZookeeperClient client, Callable<T> proc) throws Exception
      {
          T               result = null;
          RetryLoop       retryLoop = client.newRetryLoop();
          while ( retryLoop.shouldContinue() )
          {
              try
              {
                  client.internalBlockUntilConnectedOrTimedOut();
  
                  result = proc.call();
                  retryLoop.markComplete();
              }
              catch ( Exception e )
              {
                  ThreadUtils.checkInterrupted(e);
                  retryLoop.takeException(e);
              }
          }
          return result;
      }
docs: Convenience utility: creates a retry loop calling the given proc and retrying if needed
  
  @param client Zookeeper
  @param proc procedure to call with retry
  @param <T> return type
  @return procedure result
  @throws Exception any non-retriable errors