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 am...@apache.org on 2017/01/16 07:41:30 UTC

svn commit: r1778982 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/blob/ test/java/org/apache/jackrabbit/oak/plugins/blob/

Author: amitj
Date: Mon Jan 16 07:41:30 2017
New Revision: 1778982

URL: http://svn.apache.org/viewvc?rev=1778982&view=rev
Log:
OAK-5454: Failed test: org.apache.jackrabbit.oak.plugins.blob.CachingDataStoreTest.zeroStagingCacheAddGetDelete

- Handling async build() to finish before finishing initialization

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/AbstractSharedCachingDataStore.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/CompositeDataStoreCache.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/CachingDataStoreTest.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/CompositeDataStoreCacheTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/AbstractSharedCachingDataStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/AbstractSharedCachingDataStore.java?rev=1778982&r1=1778981&r2=1778982&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/AbstractSharedCachingDataStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/AbstractSharedCachingDataStore.java Mon Jan 16 07:41:30 2017
@@ -27,6 +27,7 @@ import java.security.DigestOutputStream;
 import java.security.MessageDigest;
 import java.util.Iterator;
 import java.util.List;
+import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 
@@ -144,6 +145,8 @@ public abstract class AbstractSharedCach
 
     protected ScheduledExecutorService schedulerExecutor;
 
+    protected ExecutorService executor;
+
     public void init(String homeDir) throws DataStoreException {
         if (path == null) {
             path = homeDir + "/repository/datastore";
@@ -179,7 +182,7 @@ public abstract class AbstractSharedCach
                     @Override public void write(String id, File file) throws DataStoreException {
                         backend.write(new DataIdentifier(id), file);
                     }
-            }, statisticsProvider, listeningExecutor, schedulerExecutor, stagingPurgeInterval,
+            }, statisticsProvider, listeningExecutor, schedulerExecutor, executor, stagingPurgeInterval,
                 stagingRetryInterval);
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/CompositeDataStoreCache.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/CompositeDataStoreCache.java?rev=1778982&r1=1778981&r2=1778982&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/CompositeDataStoreCache.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/CompositeDataStoreCache.java Mon Jan 16 07:41:30 2017
@@ -22,6 +22,7 @@ import java.io.Closeable;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ScheduledExecutorService;
 
 import javax.annotation.Nullable;
@@ -61,8 +62,9 @@ public class CompositeDataStoreCache ext
 
     public CompositeDataStoreCache(String path, File home, long size, int uploadSplitPercentage,
         int uploadThreads, CacheLoader<String, InputStream> loader, final StagingUploader uploader,
-        StatisticsProvider statsProvider, ListeningExecutorService executor,
+        StatisticsProvider statsProvider, ListeningExecutorService listeningExecutor,
         ScheduledExecutorService scheduledExecutor /* purge scheduled executor */,
+        ExecutorService executor /* File cache executor */,
         int purgeInterval /* async purge interval secs */,
         int stagingRetryInterval /* async retry interval secs */) {
 
@@ -75,8 +77,8 @@ public class CompositeDataStoreCache ext
 
         this.stagingCache = UploadStagingCache
             .build(directory, home, uploadThreads, uploadSize, uploader, null, statsProvider,
-                executor, scheduledExecutor, purgeInterval, stagingRetryInterval);
-        this.downloadCache = FileCache.build((size - uploadSize), directory, loader, null);
+                listeningExecutor, scheduledExecutor, purgeInterval, stagingRetryInterval);
+        this.downloadCache = FileCache.build((size - uploadSize), directory, loader, executor);
         stagingCache.setDownloadCache(downloadCache);
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/CachingDataStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/CachingDataStoreTest.java?rev=1778982&r1=1778981&r2=1778982&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/CachingDataStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/CachingDataStoreTest.java Mon Jan 16 07:41:30 2017
@@ -32,8 +32,6 @@ import java.util.concurrent.TimeUnit;
 import com.google.common.collect.Iterators;
 import com.google.common.io.Closer;
 import com.google.common.io.Files;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.output.NullOutputStream;
@@ -54,6 +52,7 @@ import org.junit.rules.TemporaryFolder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor;
 import static org.apache.commons.codec.binary.Hex.encodeHexString;
 import static org.apache.jackrabbit.oak.spi.blob.BlobOptions.UploadType.SYNCHRONOUS;
 import static org.junit.Assert.assertEquals;
@@ -98,7 +97,7 @@ public class CachingDataStoreTest extend
         taskLatch = new CountDownLatch(1);
         callbackLatch = new CountDownLatch(1);
         afterExecuteLatch = new CountDownLatch(i);
-        TestExecutor executor = new TestExecutor(1, taskLatch, callbackLatch, afterExecuteLatch);
+        TestExecutor listeningExecutor = new TestExecutor(1, taskLatch, callbackLatch, afterExecuteLatch);
 
         // stats
         ScheduledExecutorService statsExecutor = Executors.newSingleThreadScheduledExecutor();
@@ -124,10 +123,10 @@ public class CachingDataStoreTest extend
         dataStore.setStatisticsProvider(statsProvider);
         dataStore.setCacheSize(cacheSize);
         dataStore.setStagingSplitPercentage(uploadSplit);
-        dataStore.listeningExecutor = executor;
+        dataStore.listeningExecutor = listeningExecutor;
         dataStore.schedulerExecutor = scheduledExecutor;
+        dataStore.executor = sameThreadExecutor();
         dataStore.init(root.getAbsolutePath());
-        Futures.successfulAsList((Iterable<? extends ListenableFuture<?>>) executor.futures).get();
 
         LOG.info("Finished init");
     }

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/CompositeDataStoreCacheTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/CompositeDataStoreCacheTest.java?rev=1778982&r1=1778981&r2=1778982&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/CompositeDataStoreCacheTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/CompositeDataStoreCacheTest.java Mon Jan 16 07:41:30 2017
@@ -22,6 +22,7 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.ScheduledFuture;
@@ -29,8 +30,6 @@ import java.util.concurrent.TimeUnit;
 
 import com.google.common.io.Closer;
 import com.google.common.io.Files;
-import com.google.common.util.concurrent.Futures;
-import com.google.common.util.concurrent.ListenableFuture;
 import com.google.common.util.concurrent.ListeningExecutorService;
 import com.google.common.util.concurrent.MoreExecutors;
 import com.google.common.util.concurrent.SettableFuture;
@@ -47,6 +46,7 @@ import org.junit.rules.TemporaryFolder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import static com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -78,6 +78,7 @@ public class CompositeDataStoreCacheTest
     private TestExecutor executor;
     private StatisticsProvider statsProvider;
     private ScheduledExecutorService scheduledExecutor;
+    private ExecutorService fileCacheExecutor;
 
     @Before
     public void setup() throws Exception {
@@ -101,13 +102,12 @@ public class CompositeDataStoreCacheTest
         scheduledExecutor = Executors.newSingleThreadScheduledExecutor();
         closer.register(new ExecutorCloser(scheduledExecutor, 500, TimeUnit.MILLISECONDS));
 
+        fileCacheExecutor = sameThreadExecutor();
+
         //cache instance
         cache =
-            new CompositeDataStoreCache(root.getAbsolutePath(), null, 80 * 1024 /* bytes */, 10,
-                1/*threads*/,
-                loader, uploader, statsProvider, executor, scheduledExecutor, 3000, 6000);
-        Futures.successfulAsList((Iterable<? extends ListenableFuture<?>>) executor.futures).get();
-
+            new CompositeDataStoreCache(root.getAbsolutePath(), null, 80 * 1024 /* bytes */, 10, 1/*threads*/,
+                loader, uploader, statsProvider, executor, scheduledExecutor, fileCacheExecutor,3000, 6000);
         closer.register(cache);
 
         LOG.info("Finished setup");
@@ -124,7 +124,8 @@ public class CompositeDataStoreCacheTest
 
         cache = new CompositeDataStoreCache(root.getAbsolutePath(), null, 0 /* bytes
         */, 10, 1/*threads*/, loader,
-            uploader, statsProvider, executor, scheduledExecutor, 3000, 6000);
+            uploader, statsProvider, executor, scheduledExecutor, fileCacheExecutor,
+            3000, 6000);
         closer.register(cache);
 
         File f = copyToFile(randomStream(0, 4 * 1024), folder.newFile());
@@ -220,8 +221,8 @@ public class CompositeDataStoreCacheTest
 
         cache = new CompositeDataStoreCache(root.getAbsolutePath(), null, 40 * 1024 /*
         bytes */, 10 /* staging % */,
-            1/*threads*/, loader, uploader, statsProvider, executor, scheduledExecutor, 3000,
-            6000);
+            1/*threads*/, loader, uploader, statsProvider, executor, scheduledExecutor, fileCacheExecutor,
+            3000,6000);
         closer.register(cache);
 
         File f = copyToFile(randomStream(0, 4 * 1024), folder.newFile());
@@ -260,8 +261,8 @@ public class CompositeDataStoreCacheTest
         executor = new TestExecutor(1, taskLatch, callbackLatch, afterExecuteLatch);
         cache = new CompositeDataStoreCache(root.getAbsolutePath(), null, 80 * 1024 /*
         bytes */, 10 /* staging % */,
-            1/*threads*/, loader, uploader, statsProvider, executor, scheduledExecutor, 3000,
-            6000);
+            1/*threads*/, loader, uploader, statsProvider, executor, scheduledExecutor, fileCacheExecutor,
+            3000,6000);
         closer.register(cache);