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 2016/01/20 09:38:21 UTC

svn commit: r1725681 - in /jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr: AtomicCounterClusterIT.java DocumentClusterIT.java

Author: mreutegg
Date: Wed Jan 20 08:38:21 2016
New Revision: 1725681

URL: http://svn.apache.org/viewvc?rev=1725681&view=rev
Log:
OAK-3900: AtomicCounterClusterIT fails occasionally

Modified:
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/AtomicCounterClusterIT.java
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/DocumentClusterIT.java

Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/AtomicCounterClusterIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/AtomicCounterClusterIT.java?rev=1725681&r1=1725680&r2=1725681&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/AtomicCounterClusterIT.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/AtomicCounterClusterIT.java Wed Jan 20 08:38:21 2016
@@ -104,8 +104,8 @@ public class AtomicCounterClusterIT  ext
         }
         
         // allow the cluster to align
-        Thread.sleep(1500);
-                
+        alignCluster(mks);
+
         // asserting the initial state
         assertFalse("Path to the counter node should be set", Strings.isNullOrEmpty(counterPath));
         for (Repository r : repos) {

Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/DocumentClusterIT.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/DocumentClusterIT.java?rev=1725681&r1=1725680&r2=1725681&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/DocumentClusterIT.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/DocumentClusterIT.java Wed Jan 20 08:38:21 2016
@@ -19,6 +19,7 @@ package org.apache.jackrabbit.oak.jcr;
 import static com.google.common.base.Preconditions.checkNotNull;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -32,6 +33,7 @@ import javax.jcr.SimpleCredentials;
 
 import org.apache.jackrabbit.oak.plugins.document.DocumentMK;
 import org.apache.jackrabbit.oak.plugins.document.util.MongoConnection;
+import org.apache.jackrabbit.oak.plugins.document.util.Utils;
 import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider;
 import org.apache.jackrabbit.oak.spi.state.Clusterable;
 import org.apache.jackrabbit.oak.spi.state.NodeStore;
@@ -115,18 +117,21 @@ public abstract class DocumentClusterIT
      * <p> 
      * ensures that the cluster is aligned by running all the background operations
      * </p>
-     * 
-     * <p>
-     * In order to use this you have to initialise the cluster with {@code setAsyncDelay(0)}.
-     * </p>
-     * 
+     *
      * @param mks the list of {@link DocumentMK} composing the cluster. Cannot be null.
      */
     static void alignCluster(@Nonnull final List<DocumentMK> mks) {
-        for (int i = 0; i < 2; i++) {
-            for (DocumentMK mk : mks) {
-                mk.getNodeStore().runBackgroundOperations();
-            }            
+        // in a first round let all MKs run their background update
+        for (DocumentMK mk : mks) {
+            mk.getNodeStore().runBackgroundOperations();
+        }
+        String id = Utils.getIdFromPath("/");
+        // in the second round each MK will pick up changes from the others
+        for (DocumentMK mk : mks) {
+            // invalidate root document to make sure background read
+            // is forced to fetch the document from the store
+            mk.getDocumentStore().invalidateCache(Collections.singleton(id));
+            mk.getNodeStore().runBackgroundOperations();
         }
     }