Repository: curator
Updated Branches:
  refs/heads/CURATOR-397 b83bef9de -> f7d410f8e


It doesn't make sense for cached() to cache the root node. So, don't


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

Branch: refs/heads/CURATOR-397
Commit: f7d410f8e11a840a36c7bb97313ed3fb7edf73ca
Parents: b83bef9
Author: randgalt <[email protected]>
Authored: Wed Jun 28 09:19:03 2017 -0500
Committer: randgalt <[email protected]>
Committed: Wed Jun 28 09:19:03 2017 -0500

----------------------------------------------------------------------
 .../x/async/modeled/ModeledFramework.java       |  5 ++++
 .../async/modeled/details/ModeledCacheImpl.java | 26 ++++++++++++--------
 2 files changed, 21 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/curator/blob/f7d410f8/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 a53d22b..8f03387 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
@@ -75,6 +75,11 @@ public interface ModeledFramework<T>
      * </p>
      *
      * <p>
+     *     Note: the root node (the main path of the model) is <em>not</em> 
cached. i.e. only nodes
+     *     below the root are cached.
+     * </p>
+     *
+     * <p>
      *     Note: this method internally allocates an Executor for the cache 
and read methods. Use
      *     {@link #cached(java.util.concurrent.ExecutorService)} if you'd like 
to provide your own executor service.
      * </p>

http://git-wip-us.apache.org/repos/asf/curator/blob/f7d410f8/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 4c281aa..72e6762 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
@@ -159,13 +159,16 @@ class ModeledCacheImpl<T> implements TreeCacheListener, 
ModeledCache<T>
         case NODE_UPDATED:
         {
             ZPath path = ZPath.parse(event.getData().getPath());
-            byte[] bytes = event.getData().getData();
-            if ( (bytes != null) && (bytes.length > 0) )    // otherwise it's 
probably just a parent node being created
+            if ( !path.equals(basePath) )
             {
-                T model = serializer.deserialize(bytes);
-                entries.put(path, new Entry<>(event.getData().getStat(), 
model));
-                ModeledCacheListener.Type type = (event.getType() == 
TreeCacheEvent.Type.NODE_ADDED) ? ModeledCacheListener.Type.NODE_ADDED : 
ModeledCacheListener.Type.NODE_UPDATED;
-                accept(type, path, event.getData().getStat(), model);
+                byte[] bytes = event.getData().getData();
+                if ( (bytes != null) && (bytes.length > 0) )    // otherwise 
it's probably just a parent node being created
+                {
+                    T model = serializer.deserialize(bytes);
+                    entries.put(path, new Entry<>(event.getData().getStat(), 
model));
+                    ModeledCacheListener.Type type = (event.getType() == 
TreeCacheEvent.Type.NODE_ADDED) ? ModeledCacheListener.Type.NODE_ADDED : 
ModeledCacheListener.Type.NODE_UPDATED;
+                    accept(type, path, event.getData().getStat(), model);
+                }
             }
             break;
         }
@@ -173,10 +176,13 @@ class ModeledCacheImpl<T> implements TreeCacheListener, 
ModeledCache<T>
         case NODE_REMOVED:
         {
             ZPath path = ZPath.parse(event.getData().getPath());
-            Entry<T> entry = entries.remove(path);
-            T model = (entry != null) ? entry.model : 
serializer.deserialize(event.getData().getData());
-            Stat stat = (entry != null) ? entry.stat : 
event.getData().getStat();
-            accept(ModeledCacheListener.Type.NODE_REMOVED, path, stat, model);
+            if ( !path.equals(basePath) )
+            {
+                Entry<T> entry = entries.remove(path);
+                T model = (entry != null) ? entry.model : 
serializer.deserialize(event.getData().getData());
+                Stat stat = (entry != null) ? entry.stat : 
event.getData().getStat();
+                accept(ModeledCacheListener.Type.NODE_REMOVED, path, stat, 
model);
+            }
             break;
         }
 

Reply via email to