Repository: curator Updated Branches: refs/heads/CURATOR-421 909ed9aed -> f7e728b99
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/CURATOR-421 Commit: f7e728b99b8bf8cf1e0b2d68da1c3bf10e75d52a Parents: 909ed9a Author: randgalt <[email protected]> Authored: Fri Jul 14 17:06:42 2017 -0500 Committer: randgalt <[email protected]> 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); + } + } }
