Author: chetanm
Date: Thu Nov 24 14:02:29 2016
New Revision: 1771137
URL: http://svn.apache.org/viewvc?rev=1771137&view=rev
Log:
OAK-4898 - Allow for external changes to have a CommitInfo attached
Changes in observation logic
-- Switch to Nonnull annotation for CommitInfo param
-- Replace usage of CommitInfo == null with CommitInfo.isExternal
One TODO as in optimization left where while compacting changes the ChangeSet
can be merged
--
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/Filter.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringAwareObserver.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringDispatcher.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringObserver.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/NodeObserver.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/FilterBuilder.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/BackgroundObserver.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ChangeDispatcher.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/commit/BackgroundObserverTest.java
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/commit/PrefilteringBackgroundObserverTest.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ChangeProcessor.java
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/EventFactory.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/Filter.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/Filter.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/Filter.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/Filter.java
Thu Nov 24 14:02:29 2016
@@ -19,7 +19,6 @@
package org.apache.jackrabbit.oak.plugins.observation;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import org.apache.jackrabbit.oak.spi.commit.CommitInfo;
import org.apache.jackrabbit.oak.spi.state.NodeState;
@@ -41,6 +40,6 @@ public interface Filter {
* @return true to exclude this content change (not forward), false to
* include it (forward)
*/
- public boolean excludes(@Nonnull NodeState root, @Nullable CommitInfo
info);
+ boolean excludes(@Nonnull NodeState root, @Nonnull CommitInfo info);
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringAwareObserver.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringAwareObserver.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringAwareObserver.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringAwareObserver.java
Thu Nov 24 14:02:29 2016
@@ -44,6 +44,6 @@ public interface FilteringAwareObserver
* @param after the after NodeState
* @param info the associated CommitInfo
*/
- public void contentChanged(@Nonnull NodeState before, @Nonnull NodeState
after, @Nullable CommitInfo info);
+ void contentChanged(@Nonnull NodeState before, @Nonnull NodeState after,
@Nonnull CommitInfo info);
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringDispatcher.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringDispatcher.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringDispatcher.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringDispatcher.java
Thu Nov 24 14:02:29 2016
@@ -46,7 +46,7 @@ public class FilteringDispatcher impleme
@Override
public void contentChanged(@Nonnull NodeState root,
- @Nullable CommitInfo info) {
+ @Nonnull CommitInfo info) {
if (info != FilteringObserver.NOOP_CHANGE) {
observer.contentChanged(before, root, info);
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringObserver.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringObserver.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringObserver.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/FilteringObserver.java
Thu Nov 24 14:02:29 2016
@@ -91,7 +91,7 @@ public class FilteringObserver implement
}
@Override
- public final void contentChanged(@Nonnull NodeState root, @Nullable
CommitInfo info) {
+ public final void contentChanged(@Nonnull NodeState root, @Nonnull
CommitInfo info) {
if (filter.excludes(root, info)) {
lastNoop = root;
return;
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/NodeObserver.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/NodeObserver.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/NodeObserver.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/NodeObserver.java
Thu Nov 24 14:02:29 2016
@@ -122,7 +122,7 @@ public abstract class NodeObserver imple
@Nonnull CommitInfo commitInfo);
@Override
- public void contentChanged(@Nonnull NodeState root, @Nullable CommitInfo
info) {
+ public void contentChanged(@Nonnull NodeState root, @Nonnull CommitInfo
info) {
if (previousRoot != null) {
try {
long start = PERF_LOGGER.start();
@@ -187,7 +187,7 @@ public abstract class NodeObserver imple
public NodeEventHandler(String path, CommitInfo commitInfo,
NamePathMapper namePathMapper,
Set<String> propertyNames) {
this.path = path;
- this.commitInfo = commitInfo == null ? CommitInfo.EMPTY :
commitInfo;
+ this.commitInfo = commitInfo;
this.namePathMapper = namePathMapper;
this.propertyNames = propertyNames;
this.eventType = EventType.CHANGED;
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/FilterBuilder.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/FilterBuilder.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/FilterBuilder.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/observation/filter/FilterBuilder.java
Thu Nov 24 14:02:29 2016
@@ -430,7 +430,7 @@ public final class FilterBuilder {
}
private boolean isExternal(CommitInfo info) {
- return info == null;
+ return info.isExternal();
}
@Override
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/BackgroundObserver.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/BackgroundObserver.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/BackgroundObserver.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/BackgroundObserver.java
Thu Nov 24 14:02:29 2016
@@ -33,7 +33,6 @@ import java.util.concurrent.Executor;
import java.util.concurrent.TimeUnit;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import com.google.common.base.Predicate;
import org.apache.jackrabbit.oak.commons.concurrent.NotifyingFutureTask;
@@ -246,7 +245,7 @@ public class BackgroundObserver implemen
return size(filter(queue, new Predicate<ContentChange>() {
@Override
public boolean apply(ContentChange input) {
- return input.info != null;
+ return !input.info.isExternal();
}
}));
}
@@ -256,7 +255,7 @@ public class BackgroundObserver implemen
return size(filter(queue, new Predicate<ContentChange>() {
@Override
public boolean apply(ContentChange input) {
- return input.info == null;
+ return input.info.isExternal();
}
}));
}
@@ -269,15 +268,18 @@ public class BackgroundObserver implemen
* @throws IllegalStateException if {@link #close()} has already been
called.
*/
@Override
- public synchronized void contentChanged(@Nonnull NodeState root, @Nullable
CommitInfo info) {
+ public synchronized void contentChanged(@Nonnull NodeState root, @Nonnull
CommitInfo info) {
checkState(!stopped);
checkNotNull(root);
+ checkNotNull(info);
- if (alwaysCollapseExternalEvents && info == null && last != null &&
last.info == null) {
+ if (alwaysCollapseExternalEvents && info.isExternal() && last != null
&& last.info.isExternal()) {
// This is an external change. If the previous change was
// also external, we can drop it from the queue (since external
// changes in any case can cover multiple commits) to help
// prevent the queue from filling up too fast.
+
+ //TODO - Support for merging ChangeSet for external changes
queue.remove(last);
full = false;
}
@@ -287,7 +289,7 @@ public class BackgroundObserver implemen
// If the queue is full, some commits have already been skipped
// so we need to drop the possible local commit information as
// only external changes can be merged together to larger chunks.
- change = new ContentChange(root, null);
+ change = new ContentChange(root, CommitInfo.EMPTY_EXTERNAL);
} else {
change = new ContentChange(root, info);
}
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ChangeDispatcher.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ChangeDispatcher.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ChangeDispatcher.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/ChangeDispatcher.java
Thu Nov 24 14:02:29 2016
@@ -63,7 +63,7 @@ public class ChangeDispatcher implements
@Override
@Nonnull
public synchronized Closeable addObserver(final Observer observer) {
- observer.contentChanged(root, null);
+ observer.contentChanged(root, CommitInfo.EMPTY_EXTERNAL);
observers.addObserver(observer);
return new Closeable() {
@Override
@@ -74,8 +74,9 @@ public class ChangeDispatcher implements
}
@Override
- public synchronized void contentChanged(@Nonnull NodeState root, @Nullable
CommitInfo info) {
+ public synchronized void contentChanged(@Nonnull NodeState root, @Nonnull
CommitInfo info) {
checkNotNull(root);
+ checkNotNull(info);
observers.contentChanged(root, info);
this.root = root;
}
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/commit/BackgroundObserverTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/commit/BackgroundObserverTest.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/commit/BackgroundObserverTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/commit/BackgroundObserverTest.java
Thu Nov 24 14:02:29 2016
@@ -119,7 +119,7 @@ public class BackgroundObserverTest {
volatile NodeState previous;
@Override
- public void contentChanged(@Nonnull final NodeState root,
@Nullable CommitInfo info) {
+ public void contentChanged(@Nonnull final NodeState root, @Nonnull
CommitInfo info) {
if (root.hasProperty("done")) {
done(assertions);
} else if (previous != null) {
Modified:
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/commit/PrefilteringBackgroundObserverTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/commit/PrefilteringBackgroundObserverTest.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/commit/PrefilteringBackgroundObserverTest.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/spi/commit/PrefilteringBackgroundObserverTest.java
Thu Nov 24 14:02:29 2016
@@ -59,7 +59,7 @@ public class PrefilteringBackgroundObser
return false;
} else if (info == excludingCommitInfo) {
return true;
- } else if (info == null) {
+ } else if (info.isExternal()) {
return false;
}
throw new IllegalStateException("only supporting include or
exclude");
@@ -147,7 +147,7 @@ public class PrefilteringBackgroundObser
// initialize observer with an initial contentChanged
// (see ChangeDispatcher#addObserver)
{
- compositeObserver.contentChanged(p(-1), null);
+ compositeObserver.contentChanged(p(-1), CommitInfo.EMPTY_EXTERNAL);
}
// Part 1 : first run with filtersEvaluatedMapWithEmptyObservers -
empty or null shouldn't matter, it's excluded in both cases
for (int k = 0; k < 1000; k++) {
@@ -322,7 +322,7 @@ public class PrefilteringBackgroundObser
// initialize observer with an initial contentChanged
// (see ChangeDispatcher#addObserver)
{
- compositeObserver.contentChanged(p(-1), null);
+ compositeObserver.contentChanged(p(-1), CommitInfo.EMPTY_EXTERNAL);
}
// remove above first event right away
executeRunnables(runnableQ, 5);
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ChangeProcessor.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ChangeProcessor.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ChangeProcessor.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ChangeProcessor.java
Thu Nov 24 14:02:29 2016
@@ -18,6 +18,7 @@
*/
package org.apache.jackrabbit.oak.jcr.observation;
+import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
import static
org.apache.jackrabbit.api.stats.RepositoryStatistics.Type.OBSERVATION_EVENT_COUNTER;
import static
org.apache.jackrabbit.api.stats.RepositoryStatistics.Type.OBSERVATION_EVENT_DURATION;
@@ -33,7 +34,6 @@ import java.util.concurrent.atomic.Atomi
import java.util.concurrent.atomic.AtomicReference;
import javax.annotation.Nonnull;
-import javax.annotation.Nullable;
import javax.jcr.observation.Event;
import javax.jcr.observation.EventIterator;
import javax.jcr.observation.EventListener;
@@ -472,8 +472,9 @@ class ChangeProcessor implements Filteri
@Override
public void contentChanged(@Nonnull NodeState before,
- @Nonnull NodeState after,
- @Nullable CommitInfo info) {
+ @Nonnull NodeState after,
+ @Nonnull CommitInfo info) {
+ checkNotNull(info);
FilterResult prefilterTestResult = null;
if (PREFILTERING_TESTMODE) {
// OAK-4908 test mode: when the ChangeCollectorProvider is enabled
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/EventFactory.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/EventFactory.java?rev=1771137&r1=1771136&r2=1771137&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/EventFactory.java
(original)
+++
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/EventFactory.java
Thu Nov 24 14:02:29 2016
@@ -64,16 +64,16 @@ public class EventFactory {
EventFactory(NamePathMapper mapper, CommitInfo commitInfo) {
this.mapper = mapper;
- if (commitInfo != null) {
+ if (!commitInfo.isExternal()) {
this.userID = commitInfo.getUserId();
Object userData = commitInfo.getInfo().get(USER_DATA);
this.userData = userData instanceof String ? (String) userData :
null;
this.date = commitInfo.getDate();
this.external = false;
} else {
- this.userID = CommitInfo.OAK_UNKNOWN;
+ this.userID = commitInfo.getUserId();
this.userData = null;
- this.date = System.currentTimeMillis(); // rough estimate
+ this.date = commitInfo.getDate(); // rough estimate
this.external = true;
}
}