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