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 to...@apache.org on 2017/11/20 11:32:57 UTC
svn commit: r1815792 - in /jackrabbit/oak/trunk/oak-store-document/src:
main/java/org/apache/jackrabbit/oak/plugins/document/cache/NodeDocumentCache.java
test/java/org/apache/jackrabbit/oak/plugins/document/cache/CacheChangesTrackerTest.java
Author: tomekr
Date: Mon Nov 20 11:32:57 2017
New Revision: 1815792
URL: http://svn.apache.org/viewvc?rev=1815792&view=rev
Log:
OAK-6347: Don't track local changes in the document cache tracker
Modified:
jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/cache/NodeDocumentCache.java
jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/cache/CacheChangesTrackerTest.java
Modified: jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/cache/NodeDocumentCache.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/cache/NodeDocumentCache.java?rev=1815792&r1=1815791&r2=1815792&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/cache/NodeDocumentCache.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/main/java/org/apache/jackrabbit/oak/plugins/document/cache/NodeDocumentCache.java Mon Nov 20 11:32:57 2017
@@ -444,11 +444,11 @@ public class NodeDocumentCache implement
NodeDocument cachedDoc = getIfPresent(id);
// if an old document is present in the cache, we can simply update it
if (cachedDoc != null && isNewer(cachedDoc, d)) {
- putInternal(d);
+ putInternal(d, tracker);
// if the document hasn't been invalidated or added during the tracker lifetime,
// we can put it as well
} else if (cachedDoc == null && !tracker.mightBeenAffected(id)) {
- putInternal(d);
+ putInternal(d, tracker);
}
} finally {
lock.unlock();
@@ -470,17 +470,33 @@ public class NodeDocumentCache implement
}
/**
- * Puts a document into the cache without acquiring a lock.
+ * Puts a document into the cache without acquiring a lock. All trackers will
+ * be updated.
*
* @param doc the document to put into the cache.
*/
protected final void putInternal(@Nonnull NodeDocument doc) {
+ putInternal(doc, null);
+ }
+
+ /**
+ * Puts a document into the cache without acquiring a lock. All trackers will
+ * be updated, apart from the {@code trackerToSkip}.
+ *
+ * @param doc the document to put into the cache.
+ * @param trackerToSkip this tracker won't be updated. pass {@code null} to update
+ * all trackers.
+ */
+ protected final void putInternal(@Nonnull NodeDocument doc, @Nullable CacheChangesTracker trackerToSkip) {
if (isLeafPreviousDocId(doc.getId())) {
prevDocumentsCache.put(new StringValue(doc.getId()), doc);
} else {
nodeDocumentsCache.put(new StringValue(doc.getId()), doc);
}
for (CacheChangesTracker tracker : changeTrackers) {
+ if (tracker == trackerToSkip) {
+ continue;
+ }
tracker.putDocument(doc.getId());
}
}
Modified: jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/cache/CacheChangesTrackerTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/cache/CacheChangesTrackerTest.java?rev=1815792&r1=1815791&r2=1815792&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/cache/CacheChangesTrackerTest.java (original)
+++ jackrabbit/oak/trunk/oak-store-document/src/test/java/org/apache/jackrabbit/oak/plugins/document/cache/CacheChangesTrackerTest.java Mon Nov 20 11:32:57 2017
@@ -29,7 +29,6 @@ import org.apache.jackrabbit.oak.plugins
import org.apache.jackrabbit.oak.plugins.document.locks.StripedNodeDocumentLocks;
import org.apache.jackrabbit.oak.plugins.document.memory.MemoryDocumentStore;
import org.apache.jackrabbit.oak.plugins.document.util.StringValue;
-import org.apache.jackrabbit.oak.plugins.document.util.Utils;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
@@ -147,6 +146,19 @@ public class CacheChangesTrackerTest {
assertFalse(tracker.mightBeenAffected("1:/aaa"));
}
+
+ @Test
+ public void testOnlyExternalChanges() {
+ NodeDocumentCache cache = createCache();
+ CacheChangesTracker tracker = cache.registerTracker(getKeyLowerLimit("/parent"), getKeyUpperLimit("/parent"));
+
+ cache.putNonConflictingDocs(tracker, ImmutableSet.of(createDoc("2:/parent/local")));
+ assertFalse(tracker.mightBeenAffected("2:/parent/local"));
+
+ cache.put(createDoc("2:/parent/external"));
+ assertTrue(tracker.mightBeenAffected("2:/parent/external"));
+ }
+
private NodeDocumentCache createCache() {
Cache<CacheValue, NodeDocument> nodeDocumentsCache = new CacheLIRS<CacheValue, NodeDocument>(10);
Cache<StringValue, NodeDocument> prevDocumentsCache = new CacheLIRS<StringValue, NodeDocument>(10);