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/05/07 07:55:35 UTC
[2/3] curator git commit: Added variant to readAsZNode
Added variant to readAsZNode
Project: http://git-wip-us.apache.org/repos/asf/curator/repo
Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/c1878392
Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/c1878392
Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/c1878392
Branch: refs/heads/CURATOR-397
Commit: c18783924af4b4c3f11d098165c85bf313f454c2
Parents: fe0a88b
Author: randgalt <ra...@apache.org>
Authored: Sun May 7 09:41:55 2017 +0200
Committer: randgalt <ra...@apache.org>
Committed: Sun May 7 09:41:55 2017 +0200
----------------------------------------------------------------------
.../x/async/modeled/ModeledFramework.java | 8 +++
.../apache/curator/x/async/modeled/ZNode.java | 49 ++++++++++++++
.../x/async/modeled/cached/ModeledCache.java | 1 +
.../curator/x/async/modeled/cached/ZNode.java | 49 --------------
.../details/CachedModeledFrameworkImpl.java | 29 ++++++---
.../async/modeled/details/ModeledCacheImpl.java | 2 +-
.../modeled/details/ModeledFrameworkImpl.java | 68 ++++++++++++--------
.../x/async/modeled/details/ZNodeImpl.java | 2 +-
8 files changed, 122 insertions(+), 86 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/curator/blob/c1878392/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/ModeledFramework.java
----------------------------------------------------------------------
diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/ModeledFramework.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/ModeledFramework.java
index f8cf4c7..b475712 100644
--- a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/ModeledFramework.java
+++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/ModeledFramework.java
@@ -170,6 +170,14 @@ public interface ModeledFramework<T>
AsyncStage<T> read(Stat storingStatIn);
/**
+ * Read the ZNode at this instance's path and deserialize into a model
+ *
+ * @return AsyncStage
+ * @see org.apache.curator.x.async.AsyncStage
+ */
+ AsyncStage<ZNode<T>> readAsZNode();
+
+ /**
* Update the ZNode at this instance's path with a serialized
* form of the given model passing "-1" for the update version
*
http://git-wip-us.apache.org/repos/asf/curator/blob/c1878392/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/ZNode.java
----------------------------------------------------------------------
diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/ZNode.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/ZNode.java
new file mode 100644
index 0000000..7ed6ef5
--- /dev/null
+++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/ZNode.java
@@ -0,0 +1,49 @@
+/**
+ * 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.async.modeled;
+
+import org.apache.curator.x.async.modeled.ZPath;
+import org.apache.zookeeper.data.Stat;
+
+/**
+ * Abstracts a ZooKeeper node
+ */
+public interface ZNode<T>
+{
+ /**
+ * The path of the node
+ *
+ * @return path
+ */
+ ZPath path();
+
+ /**
+ * The node's last known stat if available
+ *
+ * @return stat
+ */
+ Stat stat();
+
+ /**
+ * The node's current model
+ *
+ * @return model
+ */
+ T model();
+}
http://git-wip-us.apache.org/repos/asf/curator/blob/c1878392/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/cached/ModeledCache.java
----------------------------------------------------------------------
diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/cached/ModeledCache.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/cached/ModeledCache.java
index 9289988..6677268 100644
--- a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/cached/ModeledCache.java
+++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/cached/ModeledCache.java
@@ -18,6 +18,7 @@
*/
package org.apache.curator.x.async.modeled.cached;
+import org.apache.curator.x.async.modeled.ZNode;
import org.apache.curator.x.async.modeled.ZPath;
import java.util.Map;
import java.util.Optional;
http://git-wip-us.apache.org/repos/asf/curator/blob/c1878392/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/cached/ZNode.java
----------------------------------------------------------------------
diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/cached/ZNode.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/cached/ZNode.java
deleted file mode 100644
index 88f3489..0000000
--- a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/cached/ZNode.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/**
- * 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.async.modeled.cached;
-
-import org.apache.curator.x.async.modeled.ZPath;
-import org.apache.zookeeper.data.Stat;
-
-/**
- * Abstracts a cached node
- */
-public interface ZNode<T>
-{
- /**
- * The path of the node
- *
- * @return path
- */
- ZPath path();
-
- /**
- * The node's last known stat if available
- *
- * @return stat
- */
- Stat stat();
-
- /**
- * The node's current model
- *
- * @return model
- */
- T model();
-}
http://git-wip-us.apache.org/repos/asf/curator/blob/c1878392/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/CachedModeledFrameworkImpl.java
----------------------------------------------------------------------
diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/CachedModeledFrameworkImpl.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/CachedModeledFrameworkImpl.java
index 2209d37..9ef88e8 100644
--- a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/CachedModeledFrameworkImpl.java
+++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/CachedModeledFrameworkImpl.java
@@ -30,7 +30,7 @@ import org.apache.curator.x.async.modeled.ZPath;
import org.apache.curator.x.async.modeled.cached.CachedModeledFramework;
import org.apache.curator.x.async.modeled.cached.ModeledCache;
import org.apache.curator.x.async.modeled.cached.ModeledCacheListener;
-import org.apache.curator.x.async.modeled.cached.ZNode;
+import org.apache.curator.x.async.modeled.ZNode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.data.Stat;
import org.apache.zookeeper.server.DataTree;
@@ -39,6 +39,7 @@ import java.util.Optional;
import java.util.Set;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
+import java.util.function.Function;
class CachedModeledFrameworkImpl<T> implements CachedModeledFramework<T>
{
@@ -133,21 +134,25 @@ class CachedModeledFrameworkImpl<T> implements CachedModeledFramework<T>
@Override
public AsyncStage<T> read()
{
- return read(null);
+ return internalRead(ZNode::model);
}
@Override
public AsyncStage<T> read(Stat storingStatIn)
{
- ZPath path = client.modelSpec().path();
- Optional<ZNode<T>> data = cache.currentData(path);
- return data.map(node -> {
+ return internalRead(n -> {
if ( storingStatIn != null )
{
- DataTree.copyStat(node.stat(), storingStatIn);
+ DataTree.copyStat(n.stat(), storingStatIn);
}
- return completed(new ModelStage<>(), node.model());
- }).orElseGet(() -> completedExceptionally(new ModelStage<>(), new KeeperException.NoNodeException(path.fullPath())));
+ return n.model();
+ });
+ }
+
+ @Override
+ public AsyncStage<ZNode<T>> readAsZNode()
+ {
+ return internalRead(Function.identity());
}
@Override
@@ -248,4 +253,12 @@ class CachedModeledFrameworkImpl<T> implements CachedModeledFramework<T>
executor.execute(() -> stage.completeExceptionally(e));
return stage;
}
+
+ private <U> ModelStage<U> internalRead(Function<ZNode<T>, U> resolver)
+ {
+ ZPath path = client.modelSpec().path();
+ Optional<ZNode<T>> data = cache.currentData(path);
+ return data.map(node -> completed(new ModelStage<>(), resolver.apply(node)))
+ .orElseGet(() -> completedExceptionally(new ModelStage<>(), new KeeperException.NoNodeException(path.fullPath())));
+ }
}
http://git-wip-us.apache.org/repos/asf/curator/blob/c1878392/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledCacheImpl.java
----------------------------------------------------------------------
diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledCacheImpl.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledCacheImpl.java
index 353c28a..2de57c1 100644
--- a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledCacheImpl.java
+++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledCacheImpl.java
@@ -31,7 +31,7 @@ import org.apache.curator.x.async.modeled.ModelSpec;
import org.apache.curator.x.async.modeled.ZPath;
import org.apache.curator.x.async.modeled.cached.ModeledCache;
import org.apache.curator.x.async.modeled.cached.ModeledCacheListener;
-import org.apache.curator.x.async.modeled.cached.ZNode;
+import org.apache.curator.x.async.modeled.ZNode;
import org.apache.zookeeper.data.Stat;
import java.util.AbstractMap;
import java.util.Map;
http://git-wip-us.apache.org/repos/asf/curator/blob/c1878392/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledFrameworkImpl.java
----------------------------------------------------------------------
diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledFrameworkImpl.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledFrameworkImpl.java
index 66f10de..3bb1b73 100644
--- a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledFrameworkImpl.java
+++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ModeledFrameworkImpl.java
@@ -35,15 +35,18 @@ import org.apache.curator.x.async.api.CreateOption;
import org.apache.curator.x.async.api.WatchableAsyncCuratorFramework;
import org.apache.curator.x.async.modeled.ModelSpec;
import org.apache.curator.x.async.modeled.ModeledFramework;
+import org.apache.curator.x.async.modeled.ZNode;
import org.apache.curator.x.async.modeled.ZPath;
import org.apache.curator.x.async.modeled.cached.CachedModeledFramework;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.data.ACL;
import org.apache.zookeeper.data.Stat;
+import org.apache.zookeeper.server.DataTree;
import java.util.List;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.ExecutorService;
+import java.util.function.Function;
import java.util.function.UnaryOperator;
import java.util.stream.Collectors;
@@ -154,41 +157,25 @@ public class ModeledFrameworkImpl<T> implements ModeledFramework<T>
@Override
public AsyncStage<T> read()
{
- return read(null);
+ return internalRead(ZNode::model);
}
@Override
public AsyncStage<T> read(Stat storingStatIn)
{
- AsyncPathable<AsyncStage<byte[]>> next;
- if ( isCompressed() )
- {
- next = (storingStatIn != null) ? watchableClient.getData().decompressedStoringStatIn(storingStatIn) : watchableClient.getData().decompressed();
- }
- else
- {
- next = (storingStatIn != null) ? watchableClient.getData().storingStatIn(storingStatIn) : watchableClient.getData();
- }
- AsyncStage<byte[]> asyncStage = next.forPath(modelSpec.path().fullPath());
- ModelStage<T> modelStage = new ModelStage<>(asyncStage.event());
- asyncStage.whenComplete((value, e) -> {
- if ( e != null )
+ return internalRead(n -> {
+ if ( storingStatIn != null )
{
- modelStage.completeExceptionally(e);
- }
- else
- {
- try
- {
- modelStage.complete(modelSpec.serializer().deserialize(value));
- }
- catch ( Exception deserializeException )
- {
- modelStage.completeExceptionally(deserializeException);
- }
+ DataTree.copyStat(n.stat(), storingStatIn);
}
+ return n.model();
});
- return modelStage;
+ }
+
+ @Override
+ public AsyncStage<ZNode<T>> readAsZNode()
+ {
+ return internalRead(Function.identity());
}
@Override
@@ -349,4 +336,31 @@ public class ModeledFrameworkImpl<T> implements ModeledFramework<T>
{
return modelSpec.createOptions().contains(CreateOption.compress);
}
+
+ private <U> ModelStage<U> internalRead(Function<ZNode<T>, U> resolver)
+ {
+ Stat stat = new Stat();
+ AsyncPathable<AsyncStage<byte[]>> next = isCompressed() ? watchableClient.getData().decompressedStoringStatIn(stat) : watchableClient.getData().storingStatIn(stat);
+ AsyncStage<byte[]> asyncStage = next.forPath(modelSpec.path().fullPath());
+ ModelStage<U> modelStage = new ModelStage<>(asyncStage.event());
+ asyncStage.whenComplete((value, e) -> {
+ if ( e != null )
+ {
+ modelStage.completeExceptionally(e);
+ }
+ else
+ {
+ try
+ {
+ ZNode<T> node = new ZNodeImpl<>(modelSpec.path(), stat, modelSpec.serializer().deserialize(value));
+ modelStage.complete(resolver.apply(node));
+ }
+ catch ( Exception deserializeException )
+ {
+ modelStage.completeExceptionally(deserializeException);
+ }
+ }
+ });
+ return modelStage;
+ }
}
http://git-wip-us.apache.org/repos/asf/curator/blob/c1878392/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ZNodeImpl.java
----------------------------------------------------------------------
diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ZNodeImpl.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ZNodeImpl.java
index 20dcaac..85bedf4 100644
--- a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ZNodeImpl.java
+++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/ZNodeImpl.java
@@ -18,7 +18,7 @@
*/
package org.apache.curator.x.async.modeled.details;
-import org.apache.curator.x.async.modeled.cached.ZNode;
+import org.apache.curator.x.async.modeled.ZNode;
import org.apache.curator.x.async.modeled.ZPath;
import org.apache.zookeeper.data.Stat;
import java.util.Objects;