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 md...@apache.org on 2015/10/31 17:44:09 UTC
svn commit: r1711654 -
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/BackgroundObserver.java
Author: mduerig
Date: Sat Oct 31 16:44:09 2015
New Revision: 1711654
URL: http://svn.apache.org/viewvc?rev=1711654&view=rev
Log:
OAK-3372: Collapsing external events in BackgroundObserver even before queue is full leads to JournalEntry not getting used
Make *not* collapsing external events the default. Credits to Vikas Saurabh for the patch.
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/commit/BackgroundObserver.java
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=1711654&r1=1711653&r2=1711654&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 Sat Oct 31 16:44:09 2015
@@ -49,8 +49,9 @@ import org.slf4j.LoggerFactory;
* to fill up, any further update will automatically be merged into just one
* external content change, causing potential loss of local commit information.
* To help prevent such cases, any sequential external content changes that
- * the background observer thread has yet to process are automatically merged
- * to just one change.
+ * the background observer thread has yet to process are optionally
+ * (see {@code alwaysCollapseExternalEvents} and {@code oak.observation.alwaysCollapseExternal})
+ * automatically merged to just one change.
*/
public class BackgroundObserver implements Observer, Closeable {
@@ -84,6 +85,12 @@ public class BackgroundObserver implemen
*/
private final int maxQueueLength;
+ /**
+ * Whether external events should be collapsed even if queue isn't full yet.
+ */
+ private final boolean alwaysCollapseExternalEvents =
+ Boolean.parseBoolean(System.getProperty("oak.observation.alwaysCollapseExternal", "false"));
+
private static class ContentChange {
private final NodeState root;
private final CommitInfo info;
@@ -254,7 +261,7 @@ public class BackgroundObserver implemen
checkState(!stopped);
checkNotNull(root);
- if (info == null && last != null && last.info == null) {
+ if (alwaysCollapseExternalEvents && info == null && last != null && last.info == null) {
// 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