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 2016/10/24 04:52:21 UTC

svn commit: r1766342 - 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 Oct 24 04:52:21 2016
New Revision: 1766342

URL: http://svn.apache.org/viewvc?rev=1766342&view=rev
Log:
OAK-4979: Caching sub-system implementation for DataStore

@trivial cosmetic changes

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/FileCache.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/UploadStagingCache.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/FileCacheTest.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=1766342&r1=1766341&r2=1766342&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 Oct 24 04:52:21 2016
@@ -67,14 +67,13 @@ import static com.google.common.base.Pre
  *     <param name="{@link #setUploadThreads(int) uploadThreads}" value="10"/>
  *     <param name="{@link #setStagingPurgeInterval(int) stagingPurgeInterval}" value="300"/>
  * </DataStore>
-
  */
 public abstract class AbstractSharedCachingDataStore extends AbstractDataStore
     implements MultiDataStoreAware, SharedDataStore {
     /**
      * Logger instance.
      */
-    static final Logger LOG = LoggerFactory.getLogger(org.apache.jackrabbit.core.data.LocalCache.class);
+    private static final Logger LOG = LoggerFactory.getLogger(AbstractSharedCachingDataStore.class);
 
     /**
      * The digest algorithm used to uniquely identify records.
@@ -186,7 +185,6 @@ public abstract class AbstractSharedCach
         }
 
         // File not in cache so, retrieve the meta data from the backend explicitly
-        DataRecord record;
         try {
             return backend.getRecord(dataIdentifier);
         } catch (Exception e) {
@@ -214,8 +212,8 @@ public abstract class AbstractSharedCach
             }
 
             DataIdentifier identifier = new DataIdentifier(encodeHexString(digest.digest()));
-            LOG.debug("SHA1 of [{}], length =[{}] took [{}]ms ",
-                new Object[] {identifier, length, watch.elapsed(TimeUnit.MILLISECONDS)});
+            LOG.debug("SHA1 of [{}], length =[{}] took [{}] ms ", identifier, length,
+                watch.elapsed(TimeUnit.MILLISECONDS));
 
             // asynchronously stage for upload if the size limit of staging cache permits
             // otherwise add to backend
@@ -254,14 +252,14 @@ public abstract class AbstractSharedCach
 
     /**
      * Need a DataRecord implementation that
-     * * decorates the data record of the backened if available
-     * * creates a record from the paramaters of the file in cache
+     * * decorates the data record of the backend if available
+     * * creates a record from the parameters of the file in cache
      *
      */
     static class FileCacheDataRecord extends AbstractDataRecord {
-        private long length;
-        private long lastModified;
-        private AbstractSharedCachingDataStore store;
+        private final long length;
+        private final long lastModified;
+        private final AbstractSharedCachingDataStore store;
 
         public FileCacheDataRecord(AbstractSharedCachingDataStore store, DataIdentifier identifier, long length,
             long lastModified) {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/FileCache.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/FileCache.java?rev=1766342&r1=1766341&r2=1766342&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/FileCache.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/FileCache.java Mon Oct 24 04:52:21 2016
@@ -89,7 +89,7 @@ public class FileCache extends AbstractC
                 StringUtils.estimateMemoryUsage(value.getAbsolutePath()) + 48);
         }};
 
-    private FileCache(long maxSize /** bytes **/, File root,
+    private FileCache(long maxSize /* bytes */, File root,
         final CacheLoader<String, InputStream> loader, @Nullable final ExecutorService executor) {
 
         this.cacheRoot = new File(root, "download");
@@ -137,7 +137,7 @@ public class FileCache extends AbstractC
                 }
             });
         this.cacheStats =
-            new FileCacheStats(cache, "DataStore-DownloadCache", weigher, memWeigher, maxSize);
+            new FileCacheStats(cache, weigher, memWeigher, maxSize);
 
         //  TODO: Check persisting the in-memory map and initializing Vs building from fs
         // Build in-memory cache asynchronously from the file system entries
@@ -149,7 +149,7 @@ public class FileCache extends AbstractC
         this.executor.submit(new CacheBuildJob());
     }
 
-    public static FileCache build(long maxSize /** bytes **/, File root,
+    public static FileCache build(long maxSize /* bytes */, File root,
         final CacheLoader<String, InputStream> loader, @Nullable final ExecutorService executor) {
         if (maxSize > 0) {
             return new FileCache(maxSize, root, loader, executor);
@@ -174,7 +174,7 @@ public class FileCache extends AbstractC
             }
 
             @Override public DataStoreCacheStatsMBean getStats() {
-                return new FileCacheStats(this, "DataStore-DownloadCache", weigher, memWeigher, 0);
+                return new FileCacheStats(this, weigher, memWeigher, 0);
             }
 
             @Override public void close() {
@@ -301,7 +301,7 @@ public class FileCache extends AbstractC
     /**
      * Create a placeholder in the file system cache folder for the given identifier.
      *
-     * @param key
+     * @param key for the file
      * @return File handle for the id
      */
     private File getCacheFile(String key) {
@@ -321,15 +321,13 @@ class FileCacheStats extends CacheStats
 
     /**
      * Construct the cache stats object.
-     *
-     * @param cache     the cache
-     * @param name      the name of the cache
+     *  @param cache     the cache
      * @param weigher   the weigher used to estimate the current weight
      * @param maxWeight the maximum weight
      */
-    public FileCacheStats(Cache<?, ?> cache, String name, Weigher<?, ?> weigher,
-        Weigher<?, ?> memWeigher, long maxWeight) {
-        super(cache, name, weigher, maxWeight);
+    public FileCacheStats(Cache<?, ?> cache, Weigher<?, ?> weigher, Weigher<?, ?> memWeigher,
+        long maxWeight) {
+        super(cache, "DataStore-DownloadCache", weigher, maxWeight);
         this.memWeigher = (Weigher<Object, Object>) memWeigher;
         this.weigher = (Weigher<Object, Object>) weigher;
         this.cache = (Cache<Object, Object>) cache;

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/UploadStagingCache.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/UploadStagingCache.java?rev=1766342&r1=1766341&r2=1766342&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/UploadStagingCache.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/UploadStagingCache.java Mon Oct 24 04:52:21 2016
@@ -133,10 +133,10 @@ public class UploadStagingCache implemen
     @Nullable
     private final FileCache downloadCache;
 
-    private UploadStagingCache(File dir, int uploadThreads, long size /** bytes **/,
+    private UploadStagingCache(File dir, int uploadThreads, long size /* bytes */,
         StagingUploader uploader, @Nullable FileCache cache, StatisticsProvider statisticsProvider,
         @Nullable ListeningExecutorService executor,
-        @Nullable ScheduledExecutorService scheduledExecutor, long purgeInterval /** secs **/) {
+        @Nullable ScheduledExecutorService scheduledExecutor, long purgeInterval /* secs */) {
 
         this.currentSize = new AtomicLong();
         this.size = size;
@@ -165,9 +165,9 @@ public class UploadStagingCache implemen
     }
 
     public static UploadStagingCache build(File dir, int uploadThreads, long size
-        /** bytes **/, StagingUploader uploader, @Nullable FileCache cache,
+        /* bytes */, StagingUploader uploader, @Nullable FileCache cache,
         StatisticsProvider statisticsProvider, @Nullable ListeningExecutorService executor,
-        @Nullable ScheduledExecutorService scheduledExecutor, long purgeInterval /** secs **/) {
+        @Nullable ScheduledExecutorService scheduledExecutor, long purgeInterval /* secs */) {
         if (size > 0) {
             return new UploadStagingCache(dir, uploadThreads, size, uploader, cache,
                 statisticsProvider, executor, scheduledExecutor, purgeInterval);
@@ -346,7 +346,7 @@ public class UploadStagingCache implemen
 
     /**
      * Invalidate called externally.
-     * @param key
+     * @param key to invalidate
      */
     protected void invalidate(String key) {
         // Check if not already scheduled for deletion
@@ -404,8 +404,8 @@ public class UploadStagingCache implemen
     /**
      * Adjust stats and delete file.
      *
-     * @param key
-     * @param toBeDeleted
+     * @param key to delete
+     * @param toBeDeleted file to delete
      * @throws IOException
      */
     private void deleteInternal(String key, File toBeDeleted) throws IOException {
@@ -738,7 +738,7 @@ class StagingCacheStats extends Annotate
             .toString();
     }
 
-    //~--------------------------------------< CacheStatsMbean - stats that are not (yet) available
+    //~--------------------------------------< CacheStatsMBean - stats that are not (yet) available
     @Override
     public long getTotalLoadTime() {
         return 0;

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=1766342&r1=1766341&r2=1766342&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 Oct 24 04:52:21 2016
@@ -58,6 +58,9 @@ import static org.junit.Assert.assertNot
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
+/**
+ * Tests for {@link AbstractSharedCachingDataStore}
+ */
 public class CachingDataStoreTest extends AbstractDataStoreCacheTest {
     private static final Logger LOG = LoggerFactory.getLogger(CachingDataStoreTest.class);
     private static final String ID_PREFIX = "12345";
@@ -74,8 +77,6 @@ public class CachingDataStoreTest extend
     private CountDownLatch taskLatch;
     private CountDownLatch callbackLatch;
     private CountDownLatch afterExecuteLatch;
-    private TestExecutor executor;
-    private StatisticsProvider statsProvider;
     private ScheduledExecutorService scheduledExecutor;
     private AbstractSharedCachingDataStore dataStore;
 
@@ -90,12 +91,12 @@ public class CachingDataStoreTest extend
         taskLatch = new CountDownLatch(1);
         callbackLatch = new CountDownLatch(1);
         afterExecuteLatch = new CountDownLatch(i);
-        executor = new TestExecutor(1, taskLatch, callbackLatch, afterExecuteLatch);
+        TestExecutor executor = new TestExecutor(1, taskLatch, callbackLatch, afterExecuteLatch);
 
         // stats
         ScheduledExecutorService statsExecutor = Executors.newSingleThreadScheduledExecutor();
         closer.register(new ExecutorCloser(statsExecutor, 500, TimeUnit.MILLISECONDS));
-        statsProvider = new DefaultStatisticsProvider(statsExecutor);
+        StatisticsProvider statsProvider = new DefaultStatisticsProvider(statsExecutor);
 
         scheduledExecutor = Executors.newSingleThreadScheduledExecutor();
         closer.register(new ExecutorCloser(scheduledExecutor, 500, TimeUnit.MILLISECONDS));
@@ -116,6 +117,10 @@ public class CachingDataStoreTest extend
         dataStore.init(root.getAbsolutePath());
     }
 
+    /**
+     * Add, get, delete when zero cache size.
+     * @throws Exception
+     */
     @Test
     public void zeroCacheAddGetDelete() throws Exception {
         dataStore.close();
@@ -140,6 +145,10 @@ public class CachingDataStoreTest extend
         assertNull(rec);
     }
 
+    /**
+     * Add, get, delete when staging cache is 0.
+     * @throws Exception
+     */
     @Test
     public void zeroStagingCacheAddGetDelete() throws Exception {
         dataStore.close();
@@ -209,6 +218,10 @@ public class CachingDataStoreTest extend
         assertNull(rec);
     }
 
+    /**
+     * Add in staging and delete.
+     * @throws Exception
+     */
     @Test
     public void addStagingAndDelete() throws Exception {
         File f = copyToFile(randomStream(0, 4 * 1024), folder.newFile());

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/FileCacheTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/FileCacheTest.java?rev=1766342&r1=1766341&r2=1766342&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/FileCacheTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/FileCacheTest.java Mon Oct 24 04:52:21 2016
@@ -79,7 +79,7 @@ public class FileCacheTest extends Abstr
             TestExecutor executor = new TestExecutor(1, beforeLatch, afterLatch, afterExecuteLatch);
             beforeLatch.countDown();
             afterLatch.countDown();
-            cache = FileCache.build(4 * 1024/** KB */, root, loader, executor);
+            cache = FileCache.build(4 * 1024/* KB */, root, loader, executor);
             Futures.successfulAsList((Iterable<? extends ListenableFuture<?>>) executor.futures).get();
 
             closer.register(cache);
@@ -93,7 +93,7 @@ public class FileCacheTest extends Abstr
 
     @Test
     public void zeroCache() throws Exception {
-        cache = FileCache.build(0/** KB */, root, loader, null);
+        cache = FileCache.build(0/* KB */, root, loader, null);
         closer.register(cache);
         File f = createFile(0, loader, cache, folder);
         cache.put(ID_PREFIX + 0, f);