You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@curator.apache.org by ra...@apache.org on 2015/08/22 18:06:39 UTC

curator git commit: Fixed testRetry() for new LOST behavior

Repository: curator
Updated Branches:
  refs/heads/CURATOR-247 847cc0d24 -> ec2f9bd55


Fixed testRetry() for new LOST behavior


Project: http://git-wip-us.apache.org/repos/asf/curator/repo
Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/ec2f9bd5
Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/ec2f9bd5
Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/ec2f9bd5

Branch: refs/heads/CURATOR-247
Commit: ec2f9bd555d01b324bd5ef690b1036d98e1f3702
Parents: 847cc0d
Author: randgalt <ra...@apache.org>
Authored: Sat Aug 22 11:06:33 2015 -0500
Committer: randgalt <ra...@apache.org>
Committed: Sat Aug 22 11:06:33 2015 -0500

----------------------------------------------------------------------
 .../org/apache/curator/CuratorZookeeperClient.java | 17 +++++++++++++++--
 .../main/java/org/apache/curator/RetryLoop.java    | 12 +++++++++++-
 .../java/org/apache/curator/utils/DebugUtils.java  | 12 +++++++-----
 .../curator/framework/imps/TestFrameworkEdges.java |  4 +++-
 .../org/apache/curator/test/BaseClassForTests.java |  5 +++++
 5 files changed, 41 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/ec2f9bd5/curator-client/src/main/java/org/apache/curator/CuratorZookeeperClient.java
----------------------------------------------------------------------
diff --git a/curator-client/src/main/java/org/apache/curator/CuratorZookeeperClient.java b/curator-client/src/main/java/org/apache/curator/CuratorZookeeperClient.java
index ce6e9d3..a065d78 100644
--- a/curator-client/src/main/java/org/apache/curator/CuratorZookeeperClient.java
+++ b/curator-client/src/main/java/org/apache/curator/CuratorZookeeperClient.java
@@ -19,6 +19,7 @@
 
 package org.apache.curator;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 import org.apache.curator.drivers.TracerDriver;
 import org.apache.curator.ensemble.EnsembleProvider;
@@ -51,6 +52,7 @@ public class CuratorZookeeperClient implements Closeable
     private final AtomicBoolean started = new AtomicBoolean(false);
     private final AtomicReference<TracerDriver> tracer = new AtomicReference<TracerDriver>(new DefaultTracerDriver());
     private final boolean manageTimeouts;
+    private final AtomicReference<Exception> debugException = new AtomicReference<>();
 
     /**
      *
@@ -207,8 +209,7 @@ public class CuratorZookeeperClient implements Closeable
 
         if ( !started.compareAndSet(false, true) )
         {
-            IllegalStateException ise = new IllegalStateException("Already started");
-            throw ise;
+            throw new IllegalStateException("Already started");
         }
 
         state.start();
@@ -337,6 +338,18 @@ public class CuratorZookeeperClient implements Closeable
         return manageTimeouts;
     }
 
+    @VisibleForTesting
+    public void setDebugException(Exception e)
+    {
+        debugException.set(e);
+    }
+
+    @VisibleForTesting
+    Exception getDebugException()
+    {
+        return debugException.get();
+    }
+
     void addParentWatcher(Watcher watcher)
     {
         state.addParentWatcher(watcher);

http://git-wip-us.apache.org/repos/asf/curator/blob/ec2f9bd5/curator-client/src/main/java/org/apache/curator/RetryLoop.java
----------------------------------------------------------------------
diff --git a/curator-client/src/main/java/org/apache/curator/RetryLoop.java b/curator-client/src/main/java/org/apache/curator/RetryLoop.java
index 8d77cf7..f6abf21 100644
--- a/curator-client/src/main/java/org/apache/curator/RetryLoop.java
+++ b/curator-client/src/main/java/org/apache/curator/RetryLoop.java
@@ -74,6 +74,7 @@ public class RetryLoop
             unit.sleep(time);
         }
     };
+    private static final boolean checkInjectedDebugExceptions = Boolean.getBoolean(DebugUtils.PROPERTY_CHECK_INJECTED_DEBUG_EXCEPTIONS);
 
     /**
      * Returns the default retry sleeper
@@ -103,13 +104,22 @@ public class RetryLoop
         {
             try
             {
+                if ( checkInjectedDebugExceptions )
+                {
+                    Exception debugException = client.getDebugException();
+                    if ( debugException != null )
+                    {
+                        throw debugException;
+                    }
+                }
+
                 client.internalBlockUntilConnectedOrTimedOut();
                 if ( !client.isConnected() && !client.retryConnectionTimeouts() )
                 {
                     connectionFailed = true;
                     break;
                 }
-                
+
                 result = proc.call();
                 retryLoop.markComplete();
             }

http://git-wip-us.apache.org/repos/asf/curator/blob/ec2f9bd5/curator-client/src/main/java/org/apache/curator/utils/DebugUtils.java
----------------------------------------------------------------------
diff --git a/curator-client/src/main/java/org/apache/curator/utils/DebugUtils.java b/curator-client/src/main/java/org/apache/curator/utils/DebugUtils.java
index 383bc13..0e473fb 100644
--- a/curator-client/src/main/java/org/apache/curator/utils/DebugUtils.java
+++ b/curator-client/src/main/java/org/apache/curator/utils/DebugUtils.java
@@ -16,15 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
+
 package org.apache.curator.utils;
 
 public class DebugUtils
 {
-    public static final String          PROPERTY_LOG_EVENTS = "curator-log-events";
-    public static final String          PROPERTY_DONT_LOG_CONNECTION_ISSUES = "curator-dont-log-connection-problems";
-    public static final String          PROPERTY_LOG_ONLY_FIRST_CONNECTION_ISSUE_AS_ERROR_LEVEL = "curator-log-only-first-connection-issue-as-error-level";
-    public static final String          PROPERTY_REMOVE_WATCHERS_IN_FOREGROUND = "curator-remove-watchers-in-foreground";
-    public static final String          PROPERTY_RETRY_FAILED_TESTS = "curator-retry-failed-tests";
+    public static final String PROPERTY_LOG_EVENTS = "curator-log-events";
+    public static final String PROPERTY_DONT_LOG_CONNECTION_ISSUES = "curator-dont-log-connection-problems";
+    public static final String PROPERTY_LOG_ONLY_FIRST_CONNECTION_ISSUE_AS_ERROR_LEVEL = "curator-log-only-first-connection-issue-as-error-level";
+    public static final String PROPERTY_REMOVE_WATCHERS_IN_FOREGROUND = "curator-remove-watchers-in-foreground";
+    public static final String PROPERTY_RETRY_FAILED_TESTS = "curator-retry-failed-tests";
+    public static final String PROPERTY_CHECK_INJECTED_DEBUG_EXCEPTIONS = "curator-check-injected-debug-exceptions";
 
     private DebugUtils()
     {

http://git-wip-us.apache.org/repos/asf/curator/blob/ec2f9bd5/curator-framework/src/test/java/org/apache/curator/framework/imps/TestFrameworkEdges.java
----------------------------------------------------------------------
diff --git a/curator-framework/src/test/java/org/apache/curator/framework/imps/TestFrameworkEdges.java b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestFrameworkEdges.java
index cd3ae77..7407eab 100644
--- a/curator-framework/src/test/java/org/apache/curator/framework/imps/TestFrameworkEdges.java
+++ b/curator-framework/src/test/java/org/apache/curator/framework/imps/TestFrameworkEdges.java
@@ -32,7 +32,6 @@ import org.apache.curator.framework.state.ConnectionStateListener;
 import org.apache.curator.retry.RetryOneTime;
 import org.apache.curator.test.BaseClassForTests;
 import org.apache.curator.test.KillSession;
-import org.apache.curator.test.TestingServer;
 import org.apache.curator.test.Timing;
 import org.apache.curator.utils.CloseableUtils;
 import org.apache.curator.utils.ZKPaths;
@@ -425,6 +424,7 @@ public class TestFrameworkEdges extends BaseClassForTests
                         {
                             throw new Error(e);
                         }
+                        client.getZookeeperClient().setDebugException(null);
                     }
                     try
                     {
@@ -442,6 +442,7 @@ public class TestFrameworkEdges extends BaseClassForTests
             server.stop();
 
             // test foreground retry
+            client.getZookeeperClient().setDebugException(new KeeperException.ConnectionLossException());
             client.checkExists().forPath("/hey");
             Assert.assertTrue(semaphore.tryAcquire(MAX_RETRIES, timing.forWaiting().seconds(), TimeUnit.SECONDS), "Remaining leases: " + semaphore.availablePermits());
 
@@ -456,6 +457,7 @@ public class TestFrameworkEdges extends BaseClassForTests
             server.stop();
 
             // test background retry
+            client.getZookeeperClient().setDebugException(new KeeperException.ConnectionLossException());
             client.checkExists().inBackground().forPath("/hey");
             Assert.assertTrue(semaphore.tryAcquire(MAX_RETRIES, timing.forWaiting().seconds(), TimeUnit.SECONDS), "Remaining leases: " + semaphore.availablePermits());
         }

http://git-wip-us.apache.org/repos/asf/curator/blob/ec2f9bd5/curator-test/src/main/java/org/apache/curator/test/BaseClassForTests.java
----------------------------------------------------------------------
diff --git a/curator-test/src/main/java/org/apache/curator/test/BaseClassForTests.java b/curator-test/src/main/java/org/apache/curator/test/BaseClassForTests.java
index c9f3524..55dcb61 100644
--- a/curator-test/src/main/java/org/apache/curator/test/BaseClassForTests.java
+++ b/curator-test/src/main/java/org/apache/curator/test/BaseClassForTests.java
@@ -44,17 +44,20 @@ public class BaseClassForTests
     private static final String INTERNAL_PROPERTY_DONT_LOG_CONNECTION_ISSUES;
     private static final String INTERNAL_PROPERTY_REMOVE_WATCHERS_IN_FOREGROUND;
     private static final String INTERNAL_RETRY_FAILED_TESTS;
+    private static final String INTERNAL_CHECK_INJECTED_DEBUG_EXCEPTIONS;
 
     static
     {
         String logConnectionIssues = null;
         String retryFailedTests = null;
+        String checkInjectedDebugExceptions = null;
         try
         {
             // use reflection to avoid adding a circular dependency in the pom
             Class<?> debugUtilsClazz = Class.forName("org.apache.curator.utils.DebugUtils");
             logConnectionIssues = (String)debugUtilsClazz.getField("PROPERTY_DONT_LOG_CONNECTION_ISSUES").get(null);
             retryFailedTests = (String)debugUtilsClazz.getField("PROPERTY_RETRY_FAILED_TESTS").get(null);
+            checkInjectedDebugExceptions = (String)debugUtilsClazz.getField("PROPERTY_CHECK_INJECTED_DEBUG_EXCEPTIONS").get(null);
         }
         catch ( Exception e )
         {
@@ -62,6 +65,7 @@ public class BaseClassForTests
         }
         INTERNAL_PROPERTY_DONT_LOG_CONNECTION_ISSUES = logConnectionIssues;
         INTERNAL_RETRY_FAILED_TESTS = retryFailedTests;
+        INTERNAL_CHECK_INJECTED_DEBUG_EXCEPTIONS = checkInjectedDebugExceptions;
         String s = null;
         try
         {
@@ -114,6 +118,7 @@ public class BaseClassForTests
             System.setProperty(INTERNAL_PROPERTY_DONT_LOG_CONNECTION_ISSUES, "true");
         }
         System.setProperty(INTERNAL_PROPERTY_REMOVE_WATCHERS_IN_FOREGROUND, "true");
+        System.setProperty(INTERNAL_CHECK_INJECTED_DEBUG_EXCEPTIONS, "true");
 
         while ( server == null )
         {