You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by mr...@apache.org on 2016/01/27 12:07:40 UTC

svn commit: r1726993 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/document/ main/java/org/apache/jackrabbit/oak/plugins/document/mongo/ main/java/org/apache/jackrabbit/oak/plugins/document/rdb/ test/java/org/apac...

Author: mreutegg
Date: Wed Jan 27 11:07:39 2016
New Revision: 1726993

URL: http://svn.apache.org/viewvc?rev=1726993&view=rev
Log:
OAK-3932: DocumentStore.getIfCached() must not return NodeDocument.NULL

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java?rev=1726993&r1=1726992&r2=1726993&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentStore.java Wed Jan 27 11:07:39 2016
@@ -304,12 +304,16 @@ public interface DocumentStore {
     void dispose();
 
     /**
-     * Fetches the cached document. If document is not present in cache <code>null</code> would be returned
+     * Fetches the cached document. If the document is not present in the cache
+     * {@code null} will be returned. This method is consistent with other find
+     * methods that may return cached documents and will return {@code null}
+     * even when the implementation has a negative cache for documents that
+     * do not exist. This method will never return {@link NodeDocument#NULL}.
      *
      * @param <T> the document type
      * @param collection the collection
      * @param key the key
-     * @return cached document if present. Otherwise null
+     * @return cached document if present. Otherwise {@code null}.
      */
     @CheckForNull
     <T extends Document> T getIfCached(Collection<T> collection, String key);

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java?rev=1726993&r1=1726992&r2=1726993&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java Wed Jan 27 11:07:39 2016
@@ -1151,6 +1151,9 @@ public class MongoDocumentStore implemen
         }
         @SuppressWarnings("unchecked")
         T doc = (T) nodesCache.getIfPresent(key);
+        if (doc == NodeDocument.NULL) {
+            doc = null;
+        }
         return doc;
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java?rev=1726993&r1=1726992&r2=1726993&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/rdb/RDBDocumentStore.java Wed Jan 27 11:07:39 2016
@@ -645,6 +645,9 @@ public class RDBDocumentStore implements
             return null;
         } else {
             NodeDocument doc = nodesCache.getIfPresent(id);
+            if (doc == NodeDocument.NULL) {
+                doc = null;
+            }
             return castAsT(doc);
         }
     }

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java?rev=1726993&r1=1726992&r2=1726993&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/BasicDocumentStoreTest.java Wed Jan 27 11:07:39 2016
@@ -911,6 +911,14 @@ public class BasicDocumentStoreTest exte
         assertNull(ds.getIfCached(Collection.NODES, id));
     }
 
+    // OAK-3932
+    @Test
+    public void getIfCachedNonExistingDocument() throws Exception {
+        String id = Utils.getIdFromPath("/foo");
+        assertNull(ds.find(Collection.NODES, id));
+        assertNull(ds.getIfCached(Collection.NODES, id));
+    }
+
     private UpdateOp newDocument(String path, long modified) {
         String id = Utils.getIdFromPath(path);
         UpdateOp op = new UpdateOp(id, true);