Author: chetanm
Date: Thu Nov 24 14:01:36 2016
New Revision: 1771133
URL: http://svn.apache.org/viewvc?rev=1771133&view=rev
Log:
OAK-4898 - Allow for external changes to have a CommitInfo attached
Changes in DocumentNodeStore
-- Switch to Nonnull annotation for CommitInfo param
-- Use CommitInfo.isExternal instead of null check to determine if info is
external
-- Pass CommitInfo.EMPTY_EXTERNAL while dispatching changes
- Read from journal as part of background read
- As part of initial Observer registration callback
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentDiscoveryLiteService.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/PrefetchDispatcher.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/bundlor/BundlingConfigHandler.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/secondary/SecondaryStoreObserver.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/PrefetchDispatcherTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/secondary/SecondaryStoreCacheTest.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentDiscoveryLiteService.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentDiscoveryLiteService.java?rev=1771133&r1=1771132&r2=1771133&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentDiscoveryLiteService.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentDiscoveryLiteService.java
Thu Nov 24 14:01:36 2016
@@ -27,6 +27,7 @@ import java.util.Map;
import java.util.Random;
import java.util.Set;
+import javax.annotation.Nonnull;
import javax.jcr.Value;
import org.apache.felix.scr.annotations.Activate;
@@ -649,7 +650,7 @@ public class DocumentDiscoveryLiteServic
* that's why this approach has been chosen).
*/
@Override
- public void contentChanged(NodeState root, CommitInfo info) {
+ public void contentChanged(@Nonnull NodeState root,@Nonnull CommitInfo
info) {
// contentChanged is only used to react as quickly as possible
// when we have instances that have a 'backlog' - ie when instances
// crashed
@@ -662,7 +663,7 @@ public class DocumentDiscoveryLiteServic
// Now from the above it also results that this only wakes up the
// backgroundWorker if we have any pending 'backlogy instances'
// otherwise this is a no-op
- if (info == null) {
+ if (info.isExternal()) {
// then ignore this as this is likely an external change
// note: it could be a compacted change, in which case we should
// probably still process it - but we have a 5sec fallback
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java?rev=1771133&r1=1771132&r2=1771133&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/DocumentNodeStore.java
Thu Nov 24 14:01:36 2016
@@ -767,7 +767,7 @@ public final class DocumentNodeStore
return c;
}
- RevisionVector done(final @Nonnull Commit c, boolean isBranch, final
@Nullable CommitInfo info) {
+ RevisionVector done(final @Nonnull Commit c, boolean isBranch, final
@Nonnull CommitInfo info) {
if (commitQueue.contains(c.getRevision())) {
try {
final RevisionVector[] newHead = new RevisionVector[1];
@@ -2002,7 +2002,7 @@ public final class DocumentNodeStore
stats.populateDiffCache = clock.getTime() - time;
time = clock.getTime();
- dispatcher.contentChanged(getRoot().fromExternalChange(),
null);
+ dispatcher.contentChanged(getRoot().fromExternalChange(),
CommitInfo.EMPTY_EXTERNAL);
} finally {
backgroundOperationLock.writeLock().unlock();
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/PrefetchDispatcher.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/PrefetchDispatcher.java?rev=1771133&r1=1771132&r2=1771133&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/PrefetchDispatcher.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/PrefetchDispatcher.java
Thu Nov 24 14:01:36 2016
@@ -50,7 +50,7 @@ class PrefetchDispatcher extends ChangeD
@Override
public synchronized void contentChanged(@Nonnull NodeState root,
- @Nullable CommitInfo info) {
+ @Nonnull CommitInfo info) {
if (root instanceof DocumentNodeState) {
final DocumentNodeState state = (DocumentNodeState) root;
if (state.isFromExternalChange()) {
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/bundlor/BundlingConfigHandler.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/bundlor/BundlingConfigHandler.java?rev=1771133&r1=1771132&r2=1771133&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/bundlor/BundlingConfigHandler.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/bundlor/BundlingConfigHandler.java
Thu Nov 24 14:01:36 2016
@@ -66,7 +66,7 @@ public class BundlingConfigHandler imple
}, Iterables.toArray(PathUtils.elements(CONFIG_PATH), String.class));
@Override
- public synchronized void contentChanged(@Nonnull NodeState root, @Nullable
CommitInfo info) {
+ public synchronized void contentChanged(@Nonnull NodeState root, @Nonnull
CommitInfo info) {
EditorDiff.process(changeDetector, this.root, root);
this.root = root;
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/secondary/SecondaryStoreObserver.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/secondary/SecondaryStoreObserver.java?rev=1771133&r1=1771132&r2=1771133&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/secondary/SecondaryStoreObserver.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/document/secondary/SecondaryStoreObserver.java
Thu Nov 24 14:01:36 2016
@@ -23,7 +23,6 @@ import java.util.List;
import java.util.concurrent.TimeUnit;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import com.google.common.base.Stopwatch;
import org.apache.jackrabbit.oak.api.CommitFailedException;
@@ -70,7 +69,7 @@ public class SecondaryStoreObserver impl
}
@Override
- public void contentChanged(@Nonnull NodeState root, @Nullable CommitInfo
info) {
+ public void contentChanged(@Nonnull NodeState root, @Nonnull CommitInfo
info) {
//Diff here would also be traversing non visible areas and there
//diffManyChildren might pose problem for e.g. data under uuid index
if (!firstEventProcessed){
@@ -93,7 +92,7 @@ public class SecondaryStoreObserver impl
NodeState updatedSecondaryRoot = nodeStore.merge(builder,
EmptyHook.INSTANCE, CommitInfo.EMPTY);
secondaryObserver.contentChanged(DelegatingDocumentNodeState.wrap(updatedSecondaryRoot,
differ));
- TimerStats timer = info == null ? external : local;
+ TimerStats timer = info.isExternal() ? external : local;
timer.update(w.elapsed(TimeUnit.NANOSECONDS),
TimeUnit.NANOSECONDS);
if (!firstEventProcessed){
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/PrefetchDispatcherTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/PrefetchDispatcherTest.java?rev=1771133&r1=1771132&r2=1771133&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/PrefetchDispatcherTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/PrefetchDispatcherTest.java
Thu Nov 24 14:01:36 2016
@@ -75,7 +75,7 @@ public class PrefetchDispatcherTest {
PrefetchDispatcher dispatcher = new PrefetchDispatcher(
before, MoreExecutors.sameThreadExecutor());
numQueries.set(0);
- dispatcher.contentChanged(after, null);
+ dispatcher.contentChanged(after, CommitInfo.EMPTY_EXTERNAL);
// expect two queries for children: below /foo and /foo/bar
assertEquals(2, numQueries.get());
}
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/secondary/SecondaryStoreCacheTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/secondary/SecondaryStoreCacheTest.java?rev=1771133&r1=1771132&r2=1771133&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/secondary/SecondaryStoreCacheTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/document/secondary/SecondaryStoreCacheTest.java
Thu Nov 24 14:01:36 2016
@@ -193,7 +193,7 @@ public class SecondaryStoreCacheTest {
AbstractDocumentNodeState r0 = merge(nb);
AbstractDocumentNodeState a_c_0 = documentState(primary.getRoot(),
"/a/c");
- observer.contentChanged(r0, null);
+ observer.contentChanged(r0, CommitInfo.EMPTY);
AbstractDocumentNodeState result = cache.getDocumentNodeState("/a/c",
r0.getRootRevision(), a_c_0
.getLastRevision());