lots of refactoring, eliminate checked exceptions, etc.
Project: http://git-wip-us.apache.org/repos/asf/curator/repo Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/81f0ab26 Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/81f0ab26 Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/81f0ab26 Branch: refs/heads/CURATOR-3.0 Commit: 81f0ab26ab0a0b57bdb902bb6a0034bd0bd54fcd Parents: 74f1410 Author: randgalt <randg...@apache.org> Authored: Thu Jan 5 18:18:30 2017 -0500 Committer: randgalt <randg...@apache.org> Committed: Thu Jan 5 18:18:30 2017 -0500 ---------------------------------------------------------------------- .../curator/x/crimps/async/AsyncCrimps.java | 84 +++++++----------- .../apache/curator/x/crimps/async/Crimped.java | 4 +- .../crimps/async/CrimpedBackgroundCallback.java | 10 ++- .../crimps/async/CrimpedConfigEnsembleable.java | 6 +- .../x/crimps/async/CrimpedEnsembleable.java | 3 +- .../x/crimps/async/CrimpedEnsembleableImpl.java | 22 ++++- .../x/crimps/async/CrimpedMultiTransaction.java | 3 +- .../curator/x/crimps/async/CrimpedPathable.java | 30 +++++++ .../x/crimps/async/CrimpledEnsembleable.java | 24 +++++ .../crimps/async/CrimpledPathAndBytesable.java | 32 +++++++ .../async/CrimpledPathAndBytesableImpl.java | 92 ++++++++++++++++++++ 11 files changed, 243 insertions(+), 67 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/curator/blob/81f0ab26/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/AsyncCrimps.java ---------------------------------------------------------------------- diff --git a/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/AsyncCrimps.java b/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/AsyncCrimps.java index afe97da..639deca 100644 --- a/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/AsyncCrimps.java +++ b/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/AsyncCrimps.java @@ -78,57 +78,57 @@ public class AsyncCrimps return new AsyncCrimps(unhandledErrorListener); } - public PathAndBytesable<CompletionStage<String>> name(BackgroundPathAndBytesable<String> builder) + public CrimpledPathAndBytesable<CompletionStage<String>> name(BackgroundPathAndBytesable<String> builder) { return build(builder, nameProc); } - public PathAndBytesable<CompletionStage<String>> path(BackgroundPathAndBytesable<String> builder) + public CrimpledPathAndBytesable<CompletionStage<String>> path(BackgroundPathAndBytesable<String> builder) { return build(builder, pathProc); } - public Pathable<CompletionStage<Void>> ignored(BackgroundPathable<Void> builder) + public CrimpedPathable<CompletionStage<Void>> ignored(BackgroundPathable<Void> builder) { return build(builder, ignoredProc); } - public Pathable<CompletionStage<byte[]>> data(BackgroundPathable<byte[]> builder) + public CrimpedPathable<CompletionStage<byte[]>> data(BackgroundPathable<byte[]> builder) { return build(builder, dataProc); } - public Pathable<CompletionStage<List<String>>> children(BackgroundPathable<List<String>> builder) + public CrimpedPathable<CompletionStage<List<String>>> children(BackgroundPathable<List<String>> builder) { return build(builder, childrenProc); } - public Pathable<CompletionStage<Stat>> stat(BackgroundPathable<Stat> builder) + public CrimpedPathable<CompletionStage<Stat>> stat(BackgroundPathable<Stat> builder) { return build(builder, statProc); } - public Pathable<CompletionStage<Stat>> safeStat(BackgroundPathable<Stat> builder) + public CrimpedPathable<CompletionStage<Stat>> safeStat(BackgroundPathable<Stat> builder) { return build(builder, safeStatProc); } - public Pathable<Crimped<Stat>> statWatched(Watchable<BackgroundPathable<Stat>> builder) + public CrimpedPathable<Crimped<Stat>> statWatched(Watchable<BackgroundPathable<Stat>> builder) { return build(builder, statProc); } - public Pathable<Crimped<Stat>> safeStatWatched(Watchable<BackgroundPathable<Stat>> builder) + public CrimpedPathable<Crimped<Stat>> safeStatWatched(Watchable<BackgroundPathable<Stat>> builder) { return build(builder, safeStatProc); } - public Pathable<CompletionStage<List<ACL>>> acls(BackgroundPathable<List<ACL>> builder) + public CrimpedPathable<CompletionStage<List<ACL>>> acls(BackgroundPathable<List<ACL>> builder) { return build(builder, aclProc); } - public PathAndBytesable<CompletionStage<Stat>> statBytes(BackgroundPathAndBytesable<Stat> builder) + public CrimpledPathAndBytesable<CompletionStage<Stat>> statBytes(BackgroundPathAndBytesable<Stat> builder) { return build(builder, statProc); } @@ -208,66 +208,46 @@ public class AsyncCrimps ErrorListenerMultiTransactionMain main = builder.inBackground(callback); CuratorMultiTransactionMain finalBuilder = (unhandledErrorListener != null) ? main.withUnhandledErrorListener(unhandledErrorListener) : main; return ops -> { - finalBuilder.forOperations(ops); + try + { + finalBuilder.forOperations(ops); + } + catch ( Exception e ) + { + callback.completeExceptionally(e); + } return callback; }; } - public <T> PathAndBytesable<CompletionStage<T>> build(BackgroundPathAndBytesable<T> builder, BackgroundProc<T> backgroundProc) + public <T> CrimpledPathAndBytesable<CompletionStage<T>> build(BackgroundPathAndBytesable<T> builder, BackgroundProc<T> backgroundProc) { CrimpedBackgroundCallback<T> callback = new CrimpedBackgroundCallback<T>(backgroundProc); ErrorListenerPathAndBytesable<T> localBuilder = builder.inBackground(callback); PathAndBytesable<T> finalLocalBuilder = (unhandledErrorListener != null) ? localBuilder.withUnhandledErrorListener(unhandledErrorListener) : localBuilder; - return new PathAndBytesable<CompletionStage<T>>() - { - @Override - public CompletionStage<T> forPath(String path) throws Exception - { - finalLocalBuilder.forPath(path); - return callback; - } - - @Override - public CompletionStage<T> forPath(String path, byte[] data) throws Exception - { - finalLocalBuilder.forPath(path, data); - return callback; - } - }; + return new CrimpledPathAndBytesableImpl<>(finalLocalBuilder, callback, null); } - public <T> Pathable<Crimped<T>> build(Watchable<BackgroundPathable<T>> builder, BackgroundProc<T> backgroundProc) + public <T> CrimpedPathable<Crimped<T>> build(Watchable<BackgroundPathable<T>> builder, BackgroundProc<T> backgroundProc) { CrimpedWatcher crimpedWatcher = new CrimpedWatcher(); - CrimpedBackgroundCallback<T> callback = new CrimpedBackgroundCallback<T>(backgroundProc); - Pathable<T> finalLocalBuilder = toFinalBuilder(callback, builder.usingWatcher(crimpedWatcher)); - return path -> { - finalLocalBuilder.forPath(path); - return new Crimped<T>() + CrimpedBackgroundCallback<T> callback = new CrimpedBackgroundCallback<T>(backgroundProc) + { + @Override + public CompletionStage<WatchedEvent> event() { - @Override - public CompletionStage<WatchedEvent> event() - { - return crimpedWatcher; - } - - @Override - public CompletionStage<T> value() - { - return callback; - } - }; + return crimpedWatcher; + } }; + Pathable<T> finalLocalBuilder = toFinalBuilder(callback, builder.usingWatcher(crimpedWatcher)); + return new CrimpledPathAndBytesableImpl<T, Crimped<T>>(finalLocalBuilder, callback, crimpedWatcher); } - public <T> Pathable<CompletionStage<T>> build(BackgroundPathable<T> builder, BackgroundProc<T> backgroundProc) + public <T> CrimpedPathable<CompletionStage<T>> build(BackgroundPathable<T> builder, BackgroundProc<T> backgroundProc) { CrimpedBackgroundCallback<T> callback = new CrimpedBackgroundCallback<T>(backgroundProc); Pathable<T> finalLocalBuilder = toFinalBuilder(callback, builder); - return path -> { - finalLocalBuilder.forPath(path); - return callback; - }; + return new CrimpledPathAndBytesableImpl<>(finalLocalBuilder, callback, null); } private <T> Pathable<T> toFinalBuilder(CrimpedBackgroundCallback<T> callback, BackgroundPathable<T> backgroundPathable) http://git-wip-us.apache.org/repos/asf/curator/blob/81f0ab26/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/Crimped.java ---------------------------------------------------------------------- diff --git a/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/Crimped.java b/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/Crimped.java index 26e300a..dc69019 100644 --- a/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/Crimped.java +++ b/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/Crimped.java @@ -21,9 +21,7 @@ package org.apache.curator.x.crimps.async; import org.apache.zookeeper.WatchedEvent; import java.util.concurrent.CompletionStage; -public interface Crimped<T> +public interface Crimped<T> extends CompletionStage<T> { CompletionStage<WatchedEvent> event(); - - CompletionStage<T> value(); } http://git-wip-us.apache.org/repos/asf/curator/blob/81f0ab26/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedBackgroundCallback.java ---------------------------------------------------------------------- diff --git a/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedBackgroundCallback.java b/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedBackgroundCallback.java index 5fad73a..b3c20d2 100644 --- a/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedBackgroundCallback.java +++ b/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedBackgroundCallback.java @@ -21,9 +21,11 @@ package org.apache.curator.x.crimps.async; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.api.BackgroundCallback; import org.apache.curator.framework.api.CuratorEvent; +import org.apache.zookeeper.WatchedEvent; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionStage; -class CrimpedBackgroundCallback<T> extends CompletableFuture<T> implements BackgroundCallback +class CrimpedBackgroundCallback<T> extends CompletableFuture<T> implements BackgroundCallback, Crimped<T> { private final BackgroundProc<T> resultFunction; @@ -33,6 +35,12 @@ class CrimpedBackgroundCallback<T> extends CompletableFuture<T> implements Backg } @Override + public CompletionStage<WatchedEvent> event() + { + return null; + } + + @Override public void processResult(CuratorFramework client, CuratorEvent event) throws Exception { resultFunction.apply(event, this); http://git-wip-us.apache.org/repos/asf/curator/blob/81f0ab26/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedConfigEnsembleable.java ---------------------------------------------------------------------- diff --git a/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedConfigEnsembleable.java b/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedConfigEnsembleable.java index 9021daf..10c0c35 100644 --- a/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedConfigEnsembleable.java +++ b/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedConfigEnsembleable.java @@ -22,12 +22,12 @@ import org.apache.curator.framework.api.Ensembleable; import java.util.concurrent.CompletionStage; public interface CrimpedConfigEnsembleable extends - Ensembleable<CompletionStage<byte[]>> + CrimpledEnsembleable<CompletionStage<byte[]>> { /** * Sets the configuration version to use. * @param config The version of the configuration. - * @throws Exception errors + * @return this */ - Ensembleable<CompletionStage<byte[]>> fromConfig(long config) throws Exception; + CrimpledEnsembleable<CompletionStage<byte[]>> fromConfig(long config); } http://git-wip-us.apache.org/repos/asf/curator/blob/81f0ab26/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedEnsembleable.java ---------------------------------------------------------------------- diff --git a/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedEnsembleable.java b/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedEnsembleable.java index 3069e39..c8166e7 100644 --- a/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedEnsembleable.java +++ b/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedEnsembleable.java @@ -18,13 +18,12 @@ */ package org.apache.curator.x.crimps.async; -import org.apache.curator.framework.api.Ensembleable; import org.apache.curator.framework.api.Statable; import java.util.concurrent.CompletionStage; public interface CrimpedEnsembleable extends CrimpedConfigEnsembleable, Statable<CrimpedConfigEnsembleable>, - Ensembleable<CompletionStage<byte[]>> + CrimpledEnsembleable<CompletionStage<byte[]>> { } http://git-wip-us.apache.org/repos/asf/curator/blob/81f0ab26/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedEnsembleableImpl.java ---------------------------------------------------------------------- diff --git a/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedEnsembleableImpl.java b/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedEnsembleableImpl.java index 035e9bf..d94d242 100644 --- a/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedEnsembleableImpl.java +++ b/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedEnsembleableImpl.java @@ -48,9 +48,16 @@ class CrimpedEnsembleableImpl implements CrimpedEnsembleable } @Override - public CompletionStage<byte[]> forEnsemble() throws Exception + public CompletionStage<byte[]> forEnsemble() { - ensembleable.forEnsemble(); + try + { + ensembleable.forEnsemble(); + } + catch ( Exception e ) + { + callback.completeExceptionally(e); + } return callback; } @@ -62,9 +69,16 @@ class CrimpedEnsembleableImpl implements CrimpedEnsembleable } @Override - public Ensembleable<CompletionStage<byte[]>> fromConfig(long config) throws Exception + public CrimpledEnsembleable<CompletionStage<byte[]>> fromConfig(long config) { - ensembleable = configureEnsembleable.fromConfig(config); + try + { + ensembleable = configureEnsembleable.fromConfig(config); + } + catch ( Exception e ) + { + callback.completeExceptionally(e); + } return this; } } http://git-wip-us.apache.org/repos/asf/curator/blob/81f0ab26/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedMultiTransaction.java ---------------------------------------------------------------------- diff --git a/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedMultiTransaction.java b/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedMultiTransaction.java index b010624..fdba7b8 100644 --- a/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedMultiTransaction.java +++ b/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedMultiTransaction.java @@ -32,7 +32,6 @@ public interface CrimpedMultiTransaction * * @param operations operations that make up the transaction. * @return result details for foreground operations or <code>null</code> for background operations - * @throws Exception errors */ - CompletionStage<List<CuratorTransactionResult>> forOperations(List<CuratorOp> operations) throws Exception; + CompletionStage<List<CuratorTransactionResult>> forOperations(List<CuratorOp> operations); } http://git-wip-us.apache.org/repos/asf/curator/blob/81f0ab26/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedPathable.java ---------------------------------------------------------------------- diff --git a/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedPathable.java b/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedPathable.java new file mode 100644 index 0000000..300b695 --- /dev/null +++ b/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpedPathable.java @@ -0,0 +1,30 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.curator.x.crimps.async; + +public interface CrimpedPathable<T> +{ + /** + * Commit the currently building operation using the given path + * + * @param path the path + * @return result + */ + T forPath(String path); +} http://git-wip-us.apache.org/repos/asf/curator/blob/81f0ab26/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpledEnsembleable.java ---------------------------------------------------------------------- diff --git a/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpledEnsembleable.java b/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpledEnsembleable.java new file mode 100644 index 0000000..f23349e --- /dev/null +++ b/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpledEnsembleable.java @@ -0,0 +1,24 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.curator.x.crimps.async; + +public interface CrimpledEnsembleable<T> { + + T forEnsemble(); +} http://git-wip-us.apache.org/repos/asf/curator/blob/81f0ab26/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpledPathAndBytesable.java ---------------------------------------------------------------------- diff --git a/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpledPathAndBytesable.java b/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpledPathAndBytesable.java new file mode 100644 index 0000000..5e03815 --- /dev/null +++ b/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpledPathAndBytesable.java @@ -0,0 +1,32 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.curator.x.crimps.async; + +public interface CrimpledPathAndBytesable<T> extends CrimpedPathable<T> +{ + /** + * Commit the currently building operation using the given path and data + * + * @param path the path + * @param data the data + * @return result + */ + T forPath(String path, byte[] data); +} http://git-wip-us.apache.org/repos/asf/curator/blob/81f0ab26/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpledPathAndBytesableImpl.java ---------------------------------------------------------------------- diff --git a/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpledPathAndBytesableImpl.java b/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpledPathAndBytesableImpl.java new file mode 100644 index 0000000..329de64 --- /dev/null +++ b/curator-x-crimps/src/main/java/org/apache/curator/x/crimps/async/CrimpledPathAndBytesableImpl.java @@ -0,0 +1,92 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.curator.x.crimps.async; + +import org.apache.curator.framework.api.PathAndBytesable; +import org.apache.curator.framework.api.Pathable; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.CompletionStage; + +class CrimpledPathAndBytesableImpl<MAIN, RESULT extends CompletionStage<MAIN>> implements CrimpledPathAndBytesable<RESULT> +{ + private final Pathable<MAIN> pathable; + private final PathAndBytesable<MAIN> pathAndBytesable; + private final RESULT result; + private final CompletableFuture second; + + CrimpledPathAndBytesableImpl(Pathable<MAIN> pathable, RESULT result, CompletableFuture second) + { + this.result = result; + this.second = second; + this.pathAndBytesable = null; + this.pathable = pathable; + } + + CrimpledPathAndBytesableImpl(PathAndBytesable<MAIN> pathAndBytesable, RESULT result, CompletableFuture second) + { + this.pathAndBytesable = pathAndBytesable; + this.result = result; + this.second = second; + this.pathable = null; + } + + @Override + public RESULT forPath(String path) + { + try + { + if ( pathable != null ) + { + pathable.forPath(path); + } + else + { + pathAndBytesable.forPath(path); + } + } + catch ( Exception e ) + { + setException(e); + } + return result; + } + + @Override + public RESULT forPath(String path, byte[] data) + { + try + { + pathAndBytesable.forPath(path, data); + } + catch ( Exception e ) + { + setException(e); + } + return result; + } + + private void setException(Exception e) + { + result.toCompletableFuture().completeExceptionally(e); + if ( second != null ) + { + second.completeExceptionally(e); + } + } +}