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/04/09 03:14:12 UTC
curator git commit: added tree cache wrapper
Repository: curator
Updated Branches:
refs/heads/CURATOR-397 4efc38f3d -> 019caeea6
added tree cache wrapper
Project: http://git-wip-us.apache.org/repos/asf/curator/repo
Commit: http://git-wip-us.apache.org/repos/asf/curator/commit/019caeea
Tree: http://git-wip-us.apache.org/repos/asf/curator/tree/019caeea
Diff: http://git-wip-us.apache.org/repos/asf/curator/diff/019caeea
Branch: refs/heads/CURATOR-397
Commit: 019caeea6aba36e77c64073003e66d62aa60b761
Parents: 4efc38f
Author: randgalt <ra...@apache.org>
Authored: Sat Apr 8 22:14:06 2017 -0500
Committer: randgalt <ra...@apache.org>
Committed: Sat Apr 8 22:14:06 2017 -0500
----------------------------------------------------------------------
.../details/recipes/ModeledNodeCacheImpl.java | 12 +-
.../recipes/ModeledPathChildrenCacheImpl.java | 131 ++++++++-------
.../details/recipes/ModeledTreeCacheImpl.java | 164 +++++++++++++++++++
.../modeled/recipes/ModeledCacheEvent.java | 28 ++++
.../modeled/recipes/ModeledCacheEventType.java | 57 +++++++
.../modeled/recipes/ModeledCacheListener.java | 24 +++
.../async/modeled/recipes/ModeledNodeCache.java | 8 +-
.../recipes/ModeledPathChildrenCache.java | 40 ++---
.../recipes/ModeledPathChildrenCacheEvent.java | 28 ----
.../ModeledPathChildrenCacheListener.java | 24 ---
.../async/modeled/recipes/ModeledTreeCache.java | 46 ++++++
11 files changed, 416 insertions(+), 146 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/curator/blob/019caeea/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledNodeCacheImpl.java
----------------------------------------------------------------------
diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledNodeCacheImpl.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledNodeCacheImpl.java
index f704f77..991119f 100644
--- a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledNodeCacheImpl.java
+++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledNodeCacheImpl.java
@@ -18,13 +18,11 @@
*/
package org.apache.curator.x.async.modeled.details.recipes;
-import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.listen.Listenable;
import org.apache.curator.framework.recipes.cache.ChildData;
import org.apache.curator.framework.recipes.cache.NodeCache;
import org.apache.curator.framework.recipes.cache.NodeCacheListener;
import org.apache.curator.utils.CloseableUtils;
-import org.apache.curator.x.async.api.CreateOption;
import org.apache.curator.x.async.modeled.ModeledDetails;
import org.apache.curator.x.async.modeled.recipes.ModeledCachedNode;
import org.apache.curator.x.async.modeled.recipes.ModeledNodeCache;
@@ -37,10 +35,16 @@ public class ModeledNodeCacheImpl<T> implements ModeledNodeCache<T>
private final NodeCache cache;
private final ModeledDetails<T> modeled;
- public ModeledNodeCacheImpl(CuratorFramework client, ModeledDetails<T> modeled)
+ public ModeledNodeCacheImpl(ModeledDetails<T> modeled, NodeCache cache)
{
this.modeled = Objects.requireNonNull(modeled, "modeled cannot be null");
- cache = new NodeCache(client, modeled.getPath().fullPath(), modeled.getCreateOptions().contains(CreateOption.compress));
+ this.cache = Objects.requireNonNull(cache, "cache cannot be null");
+ }
+
+ @Override
+ public NodeCache upwrap()
+ {
+ return cache;
}
@Override
http://git-wip-us.apache.org/repos/asf/curator/blob/019caeea/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledPathChildrenCacheImpl.java
----------------------------------------------------------------------
diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledPathChildrenCacheImpl.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledPathChildrenCacheImpl.java
index 5a5bdda..d0ee681 100644
--- a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledPathChildrenCacheImpl.java
+++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledPathChildrenCacheImpl.java
@@ -18,57 +18,45 @@
*/
package org.apache.curator.x.async.modeled.details.recipes;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.util.concurrent.MoreExecutors;
-import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.listen.Listenable;
import org.apache.curator.framework.recipes.cache.ChildData;
import org.apache.curator.framework.recipes.cache.PathChildrenCache;
import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent;
import org.apache.curator.framework.recipes.cache.PathChildrenCacheListener;
-import org.apache.curator.utils.CloseableExecutorService;
import org.apache.curator.utils.CloseableUtils;
-import org.apache.curator.x.async.api.CreateOption;
import org.apache.curator.x.async.modeled.ModeledDetails;
import org.apache.curator.x.async.modeled.ZPath;
+import org.apache.curator.x.async.modeled.recipes.ModeledCacheEventType;
import org.apache.curator.x.async.modeled.recipes.ModeledCachedNode;
import org.apache.curator.x.async.modeled.recipes.ModeledPathChildrenCache;
-import org.apache.curator.x.async.modeled.recipes.ModeledPathChildrenCacheEvent;
-import org.apache.curator.x.async.modeled.recipes.ModeledPathChildrenCacheListener;
+import org.apache.curator.x.async.modeled.recipes.ModeledCacheEvent;
+import org.apache.curator.x.async.modeled.recipes.ModeledCacheListener;
import java.util.List;
import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.Executor;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.ThreadFactory;
import java.util.stream.Collectors;
public class ModeledPathChildrenCacheImpl<T> implements ModeledPathChildrenCache<T>
{
private final ModeledDetails<T> modeled;
private final PathChildrenCache cache;
- private final Map<ModeledPathChildrenCacheListener, PathChildrenCacheListener> listenerMap = new ConcurrentHashMap<>();
+ private final Map<ModeledCacheListener, PathChildrenCacheListener> listenerMap = new ConcurrentHashMap<>();
- public ModeledPathChildrenCacheImpl(CuratorFramework client, ModeledDetails<T> modeled, boolean cacheData, ThreadFactory threadFactory, ExecutorService executorService, CloseableExecutorService closeableExecutorService)
+ public ModeledPathChildrenCacheImpl(PathChildrenCache cache, ModeledDetails<T> modeled)
{
- this.modeled = modeled;
- PathChildrenCache localCache;
- if ( threadFactory != null )
- {
- localCache = new PathChildrenCache(client, modeled.getPath().fullPath(), cacheData, modeled.getCreateOptions().contains(CreateOption.compress), threadFactory);
- }
- else if ( executorService != null )
- {
- localCache = new PathChildrenCache(client, modeled.getPath().fullPath(), cacheData, modeled.getCreateOptions().contains(CreateOption.compress), executorService);
- }
- else if ( closeableExecutorService != null )
- {
- localCache = new PathChildrenCache(client, modeled.getPath().fullPath(), cacheData, modeled.getCreateOptions().contains(CreateOption.compress), closeableExecutorService);
- }
- else
- {
- localCache = new PathChildrenCache(client, modeled.getPath().fullPath(), cacheData, modeled.getCreateOptions().contains(CreateOption.compress), PathChildrenCache.defaultThreadFactory);
- }
- cache = localCache;
+ this.modeled = Objects.requireNonNull(modeled, "modeled cannot be null");
+ this.cache = Objects.requireNonNull(cache, "cache cannot be null");
+ }
+
+ @Override
+ public PathChildrenCache unwrap()
+ {
+ return cache;
}
@Override
@@ -111,11 +99,11 @@ public class ModeledPathChildrenCacheImpl<T> implements ModeledPathChildrenCache
}
@Override
- public void rebuildNode(String fullPath)
+ public void rebuildNode(ZPath fullPath)
{
try
{
- cache.rebuildNode(fullPath);
+ cache.rebuildNode(fullPath.fullPath());
}
catch ( Exception e )
{
@@ -124,32 +112,32 @@ public class ModeledPathChildrenCacheImpl<T> implements ModeledPathChildrenCache
}
@Override
- public Listenable<ModeledPathChildrenCacheListener> getListenable()
+ public Listenable<ModeledCacheListener<T>> getListenable()
{
- return new Listenable<ModeledPathChildrenCacheListener>()
+ return new Listenable<ModeledCacheListener<T>>()
{
@Override
- public void addListener(ModeledPathChildrenCacheListener listener)
+ public void addListener(ModeledCacheListener<T> listener)
{
addListener(listener, MoreExecutors.sameThreadExecutor());
}
@Override
- public void addListener(ModeledPathChildrenCacheListener listener, Executor executor)
+ public void addListener(ModeledCacheListener<T> listener, Executor executor)
{
PathChildrenCacheListener pathChildrenCacheListener = (client, event) -> {
- ModeledPathChildrenCacheEvent modeledEvent = new ModeledPathChildrenCacheEvent()
+ ModeledCacheEvent<T> modeledEvent = new ModeledCacheEvent<T>()
{
@Override
- public PathChildrenCacheEvent.Type getType()
+ public ModeledCacheEventType getType()
{
- return event.getType();
+ return toType(event.getType());
}
@Override
- public ModeledCachedNode getNode()
+ public Optional<ModeledCachedNode<T>> getNode()
{
- return from(event.getData());
+ return Optional.ofNullable(from(modeled, event.getData()));
}
};
listener.event(modeledEvent);
@@ -159,7 +147,7 @@ public class ModeledPathChildrenCacheImpl<T> implements ModeledPathChildrenCache
}
@Override
- public void removeListener(ModeledPathChildrenCacheListener listener)
+ public void removeListener(ModeledCacheListener listener)
{
PathChildrenCacheListener pathChildrenCacheListener = listenerMap.remove(listener);
if ( pathChildrenCacheListener != null )
@@ -174,36 +162,26 @@ public class ModeledPathChildrenCacheImpl<T> implements ModeledPathChildrenCache
public List<ModeledCachedNode> getCurrentData()
{
return cache.getCurrentData().stream()
- .map(this::from)
+ .map(data -> from(modeled, data))
.collect(Collectors.toList());
}
- private ModeledCachedNode<T> from(ChildData data)
- {
- if ( data == null )
- {
- return null;
- }
- T model = (data.getData() != null) ? modeled.getSerializer().deserialize(data.getData()) : null;
- return new ModeledCachedNode<>(ZPath.parse(data.getPath()), model, data.getStat());
- }
-
@Override
- public ModeledCachedNode getCurrentData(String fullPath)
+ public Optional<ModeledCachedNode> getCurrentData(String fullPath)
{
- return from(cache.getCurrentData(fullPath));
+ return Optional.ofNullable(from(modeled, cache.getCurrentData(fullPath)));
}
@Override
- public void clearDataBytes(String fullPath)
+ public void clearDataBytes(ZPath fullPath)
{
- cache.clearDataBytes(fullPath);
+ cache.clearDataBytes(fullPath.fullPath());
}
@Override
- public boolean clearDataBytes(String fullPath, int ifVersion)
+ public boolean clearDataBytes(ZPath fullPath, int ifVersion)
{
- return cache.clearDataBytes(fullPath, ifVersion);
+ return cache.clearDataBytes(fullPath.fullPath(), ifVersion);
}
@Override
@@ -230,4 +208,43 @@ public class ModeledPathChildrenCacheImpl<T> implements ModeledPathChildrenCache
{
CloseableUtils.closeQuietly(cache);
}
+
+ static <T> ModeledCachedNode<T> from(ModeledDetails<T> modeled, ChildData data)
+ {
+ if ( data == null )
+ {
+ return null;
+ }
+ T model = (data.getData() != null) ? modeled.getSerializer().deserialize(data.getData()) : null;
+ return new ModeledCachedNode<>(ZPath.parse(data.getPath()), model, data.getStat());
+ }
+
+ @VisibleForTesting
+ static ModeledCacheEventType toType(PathChildrenCacheEvent.Type type)
+ {
+ switch ( type )
+ {
+ case CHILD_ADDED:
+ return ModeledCacheEventType.NODE_ADDED;
+
+ case CHILD_UPDATED:
+ return ModeledCacheEventType.NODE_UPDATED;
+
+ case CHILD_REMOVED:
+ return ModeledCacheEventType.NODE_REMOVED;
+
+ case CONNECTION_SUSPENDED:
+ return ModeledCacheEventType.CONNECTION_SUSPENDED;
+
+ case CONNECTION_RECONNECTED:
+ return ModeledCacheEventType.CONNECTION_RECONNECTED;
+
+ case CONNECTION_LOST:
+ return ModeledCacheEventType.CONNECTION_LOST;
+
+ case INITIALIZED:
+ return ModeledCacheEventType.INITIALIZED;
+ }
+ throw new UnsupportedOperationException("Unknown type: " + type);
+ }
}
http://git-wip-us.apache.org/repos/asf/curator/blob/019caeea/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledTreeCacheImpl.java
----------------------------------------------------------------------
diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledTreeCacheImpl.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledTreeCacheImpl.java
new file mode 100644
index 0000000..542ad23
--- /dev/null
+++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/details/recipes/ModeledTreeCacheImpl.java
@@ -0,0 +1,164 @@
+/**
+ * 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.details.recipes;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.util.concurrent.MoreExecutors;
+import org.apache.curator.framework.listen.Listenable;
+import org.apache.curator.framework.recipes.cache.TreeCache;
+import org.apache.curator.framework.recipes.cache.TreeCacheEvent;
+import org.apache.curator.framework.recipes.cache.TreeCacheListener;
+import org.apache.curator.utils.CloseableUtils;
+import org.apache.curator.x.async.modeled.ModeledDetails;
+import org.apache.curator.x.async.modeled.ZPath;
+import org.apache.curator.x.async.modeled.recipes.ModeledCacheEvent;
+import org.apache.curator.x.async.modeled.recipes.ModeledCacheEventType;
+import org.apache.curator.x.async.modeled.recipes.ModeledCacheListener;
+import org.apache.curator.x.async.modeled.recipes.ModeledCachedNode;
+import org.apache.curator.x.async.modeled.recipes.ModeledTreeCache;
+import java.util.AbstractMap;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.Executor;
+import java.util.stream.Collectors;
+
+import static org.apache.curator.x.async.modeled.details.recipes.ModeledPathChildrenCacheImpl.from;
+
+public class ModeledTreeCacheImpl<T> implements ModeledTreeCache<T>
+{
+ private final ModeledDetails<T> modeled;
+ private final TreeCache cache;
+ private final Map<ModeledCacheListener, TreeCacheListener> listenerMap = new ConcurrentHashMap<>();
+
+ public ModeledTreeCacheImpl(ModeledDetails<T> modeled, TreeCache cache)
+ {
+ this.modeled = Objects.requireNonNull(modeled, "modeled cannot be null");
+ this.cache = Objects.requireNonNull(cache, "cache cannot be null");
+ }
+
+ @Override
+ public void start()
+ {
+ try
+ {
+ cache.start();
+ }
+ catch ( Exception e )
+ {
+ throw new RuntimeException("Could not start", e);
+ }
+ }
+
+ @Override
+ public void close()
+ {
+ CloseableUtils.closeQuietly(cache);
+ }
+
+ @Override
+ public Listenable<ModeledCacheListener<T>> getListenable()
+ {
+ return new Listenable<ModeledCacheListener<T>>()
+ {
+ @Override
+ public void addListener(ModeledCacheListener<T> listener)
+ {
+ addListener(listener, MoreExecutors.sameThreadExecutor());
+ }
+
+ @Override
+ public void addListener(ModeledCacheListener<T> listener, Executor executor)
+ {
+ TreeCacheListener treeCacheListener = (client, event) -> {
+ ModeledCacheEvent<T> wrappedEvent = new ModeledCacheEvent<T>()
+ {
+ @Override
+ public ModeledCacheEventType getType()
+ {
+ return toType(event.getType());
+ }
+
+ @Override
+ public Optional<ModeledCachedNode<T>> getNode()
+ {
+ return Optional.ofNullable(from(modeled, event.getData()));
+ }
+ };
+ };
+ listenerMap.put(listener, treeCacheListener);
+ cache.getListenable().addListener(treeCacheListener, executor);
+ }
+
+ @Override
+ public void removeListener(ModeledCacheListener<T> listener)
+ {
+ TreeCacheListener treeCacheListener = listenerMap.remove(listener);
+ if ( treeCacheListener != null )
+ {
+ cache.getListenable().removeListener(treeCacheListener);
+ }
+ }
+ };
+ }
+
+ @Override
+ public Map<ZPath, ModeledCachedNode<T>> getCurrentChildren(ZPath fullPath)
+ {
+ return cache.getCurrentChildren(fullPath.fullPath()).entrySet().stream()
+ .map(entry -> new AbstractMap.SimpleEntry<>(ZPath.parse(entry.getKey()), from(modeled, entry.getValue())))
+ .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
+ }
+
+ @Override
+ public Optional<ModeledCachedNode<T>> getCurrentData(ZPath fullPath)
+ {
+ return Optional.ofNullable(from(modeled, cache.getCurrentData(fullPath.fullPath())));
+ }
+
+ @VisibleForTesting
+ static ModeledCacheEventType toType(TreeCacheEvent.Type type)
+ {
+ switch ( type )
+ {
+ case NODE_ADDED:
+ return ModeledCacheEventType.NODE_ADDED;
+
+ case NODE_UPDATED:
+ return ModeledCacheEventType.NODE_UPDATED;
+
+ case NODE_REMOVED:
+ return ModeledCacheEventType.NODE_REMOVED;
+
+ case CONNECTION_SUSPENDED:
+ return ModeledCacheEventType.CONNECTION_SUSPENDED;
+
+ case CONNECTION_RECONNECTED:
+ return ModeledCacheEventType.CONNECTION_RECONNECTED;
+
+ case CONNECTION_LOST:
+ return ModeledCacheEventType.CONNECTION_LOST;
+
+ case INITIALIZED:
+ return ModeledCacheEventType.INITIALIZED;
+ }
+ throw new UnsupportedOperationException("Unknown type: " + type);
+ }
+}
http://git-wip-us.apache.org/repos/asf/curator/blob/019caeea/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheEvent.java
----------------------------------------------------------------------
diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheEvent.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheEvent.java
new file mode 100644
index 0000000..442e31c
--- /dev/null
+++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheEvent.java
@@ -0,0 +1,28 @@
+/**
+ * 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.recipes;
+
+import java.util.Optional;
+
+public interface ModeledCacheEvent<T>
+{
+ ModeledCacheEventType getType();
+
+ Optional<ModeledCachedNode<T>> getNode();
+}
http://git-wip-us.apache.org/repos/asf/curator/blob/019caeea/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheEventType.java
----------------------------------------------------------------------
diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheEventType.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheEventType.java
new file mode 100644
index 0000000..bfdf57d
--- /dev/null
+++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheEventType.java
@@ -0,0 +1,57 @@
+/**
+ * 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.recipes;
+
+public enum ModeledCacheEventType
+{
+ /**
+ * A child was added to the path
+ */
+ NODE_ADDED,
+
+ /**
+ * A child's data was changed
+ */
+ NODE_UPDATED,
+
+ /**
+ * A child was removed from the path
+ */
+ NODE_REMOVED,
+
+ /**
+ * Called when the connection has changed to {@link org.apache.curator.framework.state.ConnectionState#SUSPENDED}
+ */
+ CONNECTION_SUSPENDED,
+
+ /**
+ * Called when the connection has changed to {@link org.apache.curator.framework.state.ConnectionState#RECONNECTED}
+ */
+ CONNECTION_RECONNECTED,
+
+ /**
+ * Called when the connection has changed to {@link org.apache.curator.framework.state.ConnectionState#LOST}
+ */
+ CONNECTION_LOST,
+
+ /**
+ * Signals that the initial cache has been populated.
+ */
+ INITIALIZED
+}
http://git-wip-us.apache.org/repos/asf/curator/blob/019caeea/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheListener.java
----------------------------------------------------------------------
diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheListener.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheListener.java
new file mode 100644
index 0000000..88c7de0
--- /dev/null
+++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledCacheListener.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.async.modeled.recipes;
+
+public interface ModeledCacheListener<T>
+{
+ void event(ModeledCacheEvent<T> event);
+}
http://git-wip-us.apache.org/repos/asf/curator/blob/019caeea/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledNodeCache.java
----------------------------------------------------------------------
diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledNodeCache.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledNodeCache.java
index 6da08c7..d5650b3 100644
--- a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledNodeCache.java
+++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledNodeCache.java
@@ -18,8 +18,8 @@
*/
package org.apache.curator.x.async.modeled.recipes;
-import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.listen.Listenable;
+import org.apache.curator.framework.recipes.cache.NodeCache;
import org.apache.curator.framework.recipes.cache.NodeCacheListener;
import org.apache.curator.x.async.modeled.ModeledDetails;
import org.apache.curator.x.async.modeled.details.recipes.ModeledNodeCacheImpl;
@@ -28,11 +28,13 @@ import java.util.Optional;
public interface ModeledNodeCache<T> extends Closeable
{
- static <T> ModeledNodeCache build(CuratorFramework client, ModeledDetails<T> modeled)
+ static <T> ModeledNodeCache wrap(ModeledDetails<T> modeled, NodeCache cache)
{
- return new ModeledNodeCacheImpl<>(client, modeled);
+ return new ModeledNodeCacheImpl<>(modeled, cache);
}
+ NodeCache upwrap();
+
void start();
void start(boolean buildInitial);
http://git-wip-us.apache.org/repos/asf/curator/blob/019caeea/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCache.java
----------------------------------------------------------------------
diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCache.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCache.java
index 06fa345..fd27c12 100644
--- a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCache.java
+++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCache.java
@@ -18,43 +18,23 @@
*/
package org.apache.curator.x.async.modeled.recipes;
-import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.listen.Listenable;
import org.apache.curator.framework.recipes.cache.PathChildrenCache;
-import org.apache.curator.utils.CloseableExecutorService;
import org.apache.curator.x.async.modeled.ModeledDetails;
+import org.apache.curator.x.async.modeled.ZPath;
import org.apache.curator.x.async.modeled.details.recipes.ModeledPathChildrenCacheImpl;
import java.io.Closeable;
import java.util.List;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.ThreadFactory;
+import java.util.Optional;
public interface ModeledPathChildrenCache<T> extends Closeable
{
- static <T> ModeledPathChildrenCache<T> build(CuratorFramework client, ModeledDetails<T> modeled)
+ static <T> ModeledPathChildrenCache<T> wrap(PathChildrenCache cache, ModeledDetails<T> modeled)
{
- return new ModeledPathChildrenCacheImpl<>(client, modeled, true, null, null, null);
+ return new ModeledPathChildrenCacheImpl<>(cache, modeled);
}
- static <T> ModeledPathChildrenCache<T> build(CuratorFramework client, ModeledDetails<T> modeled, boolean cacheData)
- {
- return new ModeledPathChildrenCacheImpl<>(client, modeled, cacheData, null, null, null);
- }
-
- static <T> ModeledPathChildrenCache<T> build(CuratorFramework client, ModeledDetails<T> modeled, boolean cacheData, ThreadFactory threadFactory)
- {
- return new ModeledPathChildrenCacheImpl<>(client, modeled, cacheData, threadFactory, null, null);
- }
-
- static <T> ModeledPathChildrenCache<T> build(CuratorFramework client, ModeledDetails<T> modeled, boolean cacheData, ExecutorService executorService)
- {
- return new ModeledPathChildrenCacheImpl<>(client, modeled, cacheData, null, executorService, null);
- }
-
- static <T> ModeledPathChildrenCache<T> build(CuratorFramework client, ModeledDetails<T> modeled, boolean cacheData, CloseableExecutorService executorService)
- {
- return new ModeledPathChildrenCacheImpl<>(client, modeled, cacheData, null, null, executorService);
- }
+ PathChildrenCache unwrap();
void start();
@@ -62,17 +42,17 @@ public interface ModeledPathChildrenCache<T> extends Closeable
void rebuild();
- void rebuildNode(String fullPath);
+ void rebuildNode(ZPath fullPath);
- Listenable<ModeledPathChildrenCacheListener> getListenable();
+ Listenable<ModeledCacheListener<T>> getListenable();
List<ModeledCachedNode> getCurrentData();
- ModeledCachedNode getCurrentData(String fullPath);
+ Optional<ModeledCachedNode> getCurrentData(String fullPath);
- void clearDataBytes(String fullPath);
+ void clearDataBytes(ZPath fullPath);
- boolean clearDataBytes(String fullPath, int ifVersion);
+ boolean clearDataBytes(ZPath fullPath, int ifVersion);
void clearAndRefresh();
http://git-wip-us.apache.org/repos/asf/curator/blob/019caeea/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCacheEvent.java
----------------------------------------------------------------------
diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCacheEvent.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCacheEvent.java
deleted file mode 100644
index d2a9d71..0000000
--- a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCacheEvent.java
+++ /dev/null
@@ -1,28 +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.recipes;
-
-import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent;
-
-public interface ModeledPathChildrenCacheEvent<T>
-{
- PathChildrenCacheEvent.Type getType();
-
- ModeledCachedNode<T> getNode();
-}
http://git-wip-us.apache.org/repos/asf/curator/blob/019caeea/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCacheListener.java
----------------------------------------------------------------------
diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCacheListener.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCacheListener.java
deleted file mode 100644
index 9379961..0000000
--- a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledPathChildrenCacheListener.java
+++ /dev/null
@@ -1,24 +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.recipes;
-
-public interface ModeledPathChildrenCacheListener
-{
- void event(ModeledPathChildrenCacheEvent event);
-}
http://git-wip-us.apache.org/repos/asf/curator/blob/019caeea/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledTreeCache.java
----------------------------------------------------------------------
diff --git a/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledTreeCache.java b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledTreeCache.java
new file mode 100644
index 0000000..ec49b8b
--- /dev/null
+++ b/curator-x-async/src/main/java/org/apache/curator/x/async/modeled/recipes/ModeledTreeCache.java
@@ -0,0 +1,46 @@
+/**
+ * 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.recipes;
+
+import org.apache.curator.framework.listen.Listenable;
+import org.apache.curator.framework.recipes.cache.TreeCache;
+import org.apache.curator.x.async.modeled.ModeledDetails;
+import org.apache.curator.x.async.modeled.ZPath;
+import org.apache.curator.x.async.modeled.details.recipes.ModeledTreeCacheImpl;
+import java.io.Closeable;
+import java.util.Map;
+import java.util.Optional;
+
+public interface ModeledTreeCache<T> extends Closeable
+{
+ static <T> ModeledTreeCache<T> wrap(ModeledDetails<T> modeled, TreeCache cache)
+ {
+ return new ModeledTreeCacheImpl<>(modeled, cache);
+ }
+
+ void start();
+
+ void close();
+
+ Listenable<ModeledCacheListener<T>> getListenable();
+
+ Map<ZPath, ModeledCachedNode<T>> getCurrentChildren(ZPath fullPath);
+
+ Optional<ModeledCachedNode<T>> getCurrentData(ZPath fullPath);
+}