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 2014/11/26 14:34:57 UTC
svn commit: r1641815 - in /jackrabbit/oak/branches/1.0: ./
oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreIT.java
Author: mreutegg
Date: Wed Nov 26 13:34:56 2014
New Revision: 1641815
URL: http://svn.apache.org/r1641815
Log:
OAK-2297: Update for absent document may throw NPE
Merged revision 1641811 from trunk
Modified:
jackrabbit/oak/branches/1.0/ (props changed)
jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
jackrabbit/oak/branches/1.0/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreIT.java
Propchange: jackrabbit/oak/branches/1.0/
------------------------------------------------------------------------------
Merged /jackrabbit/oak/trunk:r1641811
Modified: jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java?rev=1641815&r1=1641814&r2=1641815&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java (original)
+++ jackrabbit/oak/branches/1.0/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/mongo/MongoDocumentStore.java Wed Nov 26 13:34:56 2014
@@ -712,7 +712,8 @@ public class MongoDocumentStore implemen
for (Entry<String, NodeDocument> entry : cachedDocs.entrySet()) {
TreeLock lock = acquire(entry.getKey());
try {
- if (entry.getValue() == null) {
+ if (entry.getValue() == null
+ || entry.getValue() == NodeDocument.NULL) {
// make sure concurrently loaded document is invalidated
nodesCache.invalidate(new StringValue(entry.getKey()));
} else {
Modified: jackrabbit/oak/branches/1.0/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/branches/1.0/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreIT.java?rev=1641815&r1=1641814&r2=1641815&view=diff
==============================================================================
--- jackrabbit/oak/branches/1.0/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreIT.java (original)
+++ jackrabbit/oak/branches/1.0/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStoreIT.java Wed Nov 26 13:34:56 2014
@@ -16,7 +16,10 @@
*/
package org.apache.jackrabbit.oak.plugins.document;
+import java.util.Collections;
+
import org.apache.jackrabbit.oak.plugins.document.util.TimingDocumentStoreWrapper;
+import org.apache.jackrabbit.oak.plugins.document.util.Utils;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
import org.apache.jackrabbit.oak.spi.commit.EmptyHook;
import org.apache.jackrabbit.oak.spi.state.NodeBuilder;
@@ -25,6 +28,7 @@ import org.junit.After;
import org.junit.Test;
import static java.util.concurrent.TimeUnit.SECONDS;
+import static org.apache.jackrabbit.oak.plugins.document.Collection.NODES;
import static org.apache.jackrabbit.oak.plugins.document.NodeDocument.MODIFIED_IN_SECS_RESOLUTION;
import static org.apache.jackrabbit.oak.plugins.document.util.Utils.getIdFromPath;
import static org.junit.Assert.assertEquals;
@@ -113,4 +117,17 @@ public class DocumentNodeStoreIT extends
ns1.dispose();
ns2.dispose();
}
+
+ // OAK-2297
+ @Test
+ public void updateAbsentDocument() throws Exception {
+ String id = Utils.getIdFromPath("/test");
+ // trigger cache entry for /test
+ ds.find(NODES, id);
+
+ UpdateOp updateOp = new UpdateOp(id, false);
+ updateOp.setMapEntry("foo", Revision.newRevision(1), "bar");
+
+ ds.update(NODES, Collections.singletonList(id), updateOp);
+ }
}