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 2017/07/18 13:16:37 UTC

[15/23] curator git commit: more testing, bug fixes

more testing, bug fixes


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

Branch: refs/heads/master
Commit: f7e728b99b8bf8cf1e0b2d68da1c3bf10e75d52a
Parents: 909ed9a
Author: randgalt <ra...@apache.org>
Authored: Fri Jul 14 17:06:42 2017 -0500
Committer: randgalt <ra...@apache.org>
Committed: Fri Jul 14 17:06:42 2017 -0500

----------------------------------------------------------------------
 .../framework/imps/ExtractingCuratorOp.java     |  2 +-
 .../x/async/migrations/MigrationManager.java    |  7 +++
 .../async/migrations/TestMigrationManager.java  | 53 ++++++++++++++++++++
 3 files changed, 61 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/f7e728b9/curator-framework/src/main/java/org/apache/curator/framework/imps/ExtractingCuratorOp.java
----------------------------------------------------------------------
diff --git a/curator-framework/src/main/java/org/apache/curator/framework/imps/ExtractingCuratorOp.java b/curator-framework/src/main/java/org/apache/curator/framework/imps/ExtractingCuratorOp.java
index 58a1572..5b179e7 100644
--- a/curator-framework/src/main/java/org/apache/curator/framework/imps/ExtractingCuratorOp.java
+++ b/curator-framework/src/main/java/org/apache/curator/framework/imps/ExtractingCuratorOp.java
@@ -49,7 +49,7 @@ public class ExtractingCuratorOp implements CuratorOp
 
     public void addToDigest(MessageDigest digest)
     {
-
+        record.addToDigest(digest);
     }
 
     private void validate()

http://git-wip-us.apache.org/repos/asf/curator/blob/f7e728b9/curator-x-async/src/main/java/org/apache/curator/x/async/migrations/MigrationManager.java
----------------------------------------------------------------------
diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/migrations/MigrationManager.java b/curator-x-async/src/main/java/org/apache/curator/x/async/migrations/MigrationManager.java
index 676eef6..56e7f04 100644
--- a/curator-x-async/src/main/java/org/apache/curator/x/async/migrations/MigrationManager.java
+++ b/curator-x-async/src/main/java/org/apache/curator/x/async/migrations/MigrationManager.java
@@ -18,6 +18,7 @@
  */
 package org.apache.curator.x.async.migrations;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Throwables;
 import org.apache.curator.framework.api.transaction.CuratorOp;
 import org.apache.curator.framework.imps.ExtractingCuratorOp;
@@ -39,6 +40,7 @@ import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.CompletionStage;
 import java.util.concurrent.Executor;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 import static org.apache.curator.x.async.AsyncWrappers.*;
@@ -185,8 +187,13 @@ public class MigrationManager
             .thenCompose(__ -> applyMetaDataAfterEnsure(set, toBeApplied, thisMetaDataPath));
     }
 
+    @VisibleForTesting
+    volatile AtomicInteger debugCount = null;
+
     private CompletionStage<Void> applyMetaDataAfterEnsure(MigrationSet set, List<Migration> toBeApplied, String thisMetaDataPath)
     {
+        debugCount.incrementAndGet();
+
         String metaDataBasePath = ZKPaths.makePath(thisMetaDataPath, META_DATA_NODE_NAME);
         List<CompletableFuture<Object>> stages = toBeApplied.stream().map(migration -> {
             List<CuratorOp> operations = new ArrayList<>();

http://git-wip-us.apache.org/repos/asf/curator/blob/f7e728b9/curator-x-async/src/test/java/org/apache/curator/x/async/migrations/TestMigrationManager.java
----------------------------------------------------------------------
diff --git a/curator-x-async/src/test/java/org/apache/curator/x/async/migrations/TestMigrationManager.java b/curator-x-async/src/test/java/org/apache/curator/x/async/migrations/TestMigrationManager.java
index 19740d6..3522911 100644
--- a/curator-x-async/src/test/java/org/apache/curator/x/async/migrations/TestMigrationManager.java
+++ b/curator-x-async/src/test/java/org/apache/curator/x/async/migrations/TestMigrationManager.java
@@ -18,6 +18,7 @@
  */
 package org.apache.curator.x.async.migrations;
 
+import com.google.common.base.Throwables;
 import org.apache.curator.framework.CuratorFramework;
 import org.apache.curator.framework.CuratorFrameworkFactory;
 import org.apache.curator.framework.api.transaction.CuratorOp;
@@ -41,6 +42,7 @@ import java.util.Arrays;
 import java.util.Collections;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
+import java.util.concurrent.atomic.AtomicInteger;
 
 public class TestMigrationManager extends CompletableBaseClassForTests
 {
@@ -79,6 +81,7 @@ public class TestMigrationManager extends CompletableBaseClassForTests
 
         executor = Executors.newCachedThreadPool();
         manager = new MigrationManager(client, "/migrations/locks", "/migrations/metadata", executor, Duration.ofMinutes(10));
+        manager.debugCount = new AtomicInteger();
     }
 
     @AfterMethod
@@ -106,6 +109,10 @@ public class TestMigrationManager extends CompletableBaseClassForTests
             Assert.assertEquals(m.getFirstName(), "One");
             Assert.assertEquals(m.getLastName(), "Two");
         });
+
+        int count = manager.debugCount.get();
+        complete(manager.migrate(migrationSet));
+        Assert.assertEquals(manager.debugCount.get(), count);   // second call should do nothing
     }
 
     @Test
@@ -165,4 +172,50 @@ public class TestMigrationManager extends CompletableBaseClassForTests
 
         Assert.assertNull(client.unwrap().checkExists().forPath("/main"));
     }
+
+    @Test
+    public void testChecksumDataError() throws Exception
+    {
+        CuratorOp op1 = client.transactionOp().create().forPath("/test");
+        CuratorOp op2 = client.transactionOp().create().forPath("/test/bar", "first".getBytes());
+        Migration migration = () -> Arrays.asList(op1, op2);
+        MigrationSet migrationSet = MigrationSet.build("1", Collections.singletonList(migration));
+        complete(manager.migrate(migrationSet));
+
+        CuratorOp op2Changed = client.transactionOp().create().forPath("/test/bar", "second".getBytes());
+        migration = () -> Arrays.asList(op1, op2Changed);
+        migrationSet = MigrationSet.build("1", Collections.singletonList(migration));
+        try
+        {
+            complete(manager.migrate(migrationSet));
+            Assert.fail("Should throw");
+        }
+        catch ( Throwable e )
+        {
+            Assert.assertTrue(Throwables.getRootCause(e) instanceof MigrationException);
+        }
+    }
+
+    @Test
+    public void testChecksumPathError() throws Exception
+    {
+        CuratorOp op1 = client.transactionOp().create().forPath("/test2");
+        CuratorOp op2 = client.transactionOp().create().forPath("/test2/bar");
+        Migration migration = () -> Arrays.asList(op1, op2);
+        MigrationSet migrationSet = MigrationSet.build("1", Collections.singletonList(migration));
+        complete(manager.migrate(migrationSet));
+
+        CuratorOp op2Changed = client.transactionOp().create().forPath("/test/bar");
+        migration = () -> Arrays.asList(op1, op2Changed);
+        migrationSet = MigrationSet.build("1", Collections.singletonList(migration));
+        try
+        {
+            complete(manager.migrate(migrationSet));
+            Assert.fail("Should throw");
+        }
+        catch ( Throwable e )
+        {
+            Assert.assertTrue(Throwables.getRootCause(e) instanceof MigrationException);
+        }
+    }
 }