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);


Reply via email to