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 2019/11/28 04:26:38 UTC

svn commit: r1870525 - in /jackrabbit/oak/trunk/oak-blob-plugins/src: main/java/org/apache/jackrabbit/oak/plugins/blob/FileCache.java test/java/org/apache/jackrabbit/oak/plugins/blob/CompositeDataStoreCacheTest.java

Author: amitj
Date: Thu Nov 28 04:26:38 2019
New Revision: 1870525

URL: http://svn.apache.org/viewvc?rev=1870525&view=rev
Log:
OAK-8807: Update FileCache to use non-cache segment blocking method

- Building the cache without the CacheLoader and using the get method with a valueLoader

Modified:
    jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/FileCache.java
    jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/CompositeDataStoreCacheTest.java

Modified: jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/FileCache.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/FileCache.java?rev=1870525&r1=1870524&r2=1870525&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/FileCache.java (original)
+++ jackrabbit/oak/trunk/oak-blob-plugins/src/main/java/org/apache/jackrabbit/oak/plugins/blob/FileCache.java Thu Nov 28 04:26:38 2019
@@ -79,6 +79,8 @@ public class FileCache extends AbstractC
 
     private ExecutorService executor;
 
+    private CacheLoader<String, File> cacheLoader;
+
     /**
      * Convert the size calculation to KB to support max file size of 2 TB
      */
@@ -103,6 +105,30 @@ public class FileCache extends AbstractC
         /* convert to 4 KB block */
         long size = Math.round(maxSize / (1024L * 4));
 
+        cacheLoader = new CacheLoader<String, File>() {
+            @Override public File load(String key) throws Exception {
+                // Fetch from local cache directory and if not found load from backend
+                File cachedFile = DataStoreCacheUtils.getFile(key, cacheRoot);
+                if (cachedFile.exists()) {
+                    return cachedFile;
+                } else {
+                    InputStream is = null;
+                    boolean threw = true;
+                    try {
+                        is = loader.load(key);
+                        copyInputStreamToFile(is, cachedFile);
+                        threw = false;
+                    } catch (Exception e) {
+                        LOG.warn("Error reading object for id [{}] from backend", key, e);
+                        throw e;
+                    } finally {
+                        Closeables.close(is, threw);
+                    }
+                    return cachedFile;
+                }
+            }
+        };
+
         cache = new CacheLIRS.Builder<String, File>()
             .maximumWeight(size)
             .recordStats()
@@ -122,30 +148,8 @@ public class FileCache extends AbstractC
                         LOG.info("Cached file deletion failed after eviction", e);
                     }
                 }})
-            .build(new CacheLoader<String, File>() {
-                @Override
-                public File load(String key) throws Exception {
-                    // Fetch from local cache directory and if not found load from backend
-                    File cachedFile = DataStoreCacheUtils.getFile(key, cacheRoot);
-                    if (cachedFile.exists()) {
-                        return cachedFile;
-                    } else {
-                        InputStream is = null;
-                        boolean threw = true;
-                        try {
-                            is = loader.load(key);
-                            copyInputStreamToFile(is, cachedFile);
-                            threw = false;
-                        } catch (Exception e) {
-                            LOG.warn("Error reading object for id [{}] from backend", key, e);
-                            throw e;
-                        } finally {
-                            Closeables.close(is, threw);
-                        }
-                        return cachedFile;
-                    }
-                }
-            });
+            .build();
+
         this.cacheStats =
             new FileCacheStats(cache, weigher, memWeigher, maxSize);
 
@@ -254,7 +258,7 @@ public class FileCache extends AbstractC
     public File get(String key) throws IOException {
         try {
             // get from cache and download if not available
-            return cache.get(key);
+            return cache.get(key, () -> cacheLoader.load(key));
         } catch (ExecutionException e) {
             LOG.error("Error loading [{}] from cache", key);
             throw new IOException(e);

Modified: jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/CompositeDataStoreCacheTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/CompositeDataStoreCacheTest.java?rev=1870525&r1=1870524&r2=1870525&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/CompositeDataStoreCacheTest.java (original)
+++ jackrabbit/oak/trunk/oak-blob-plugins/src/test/java/org/apache/jackrabbit/oak/plugins/blob/CompositeDataStoreCacheTest.java Thu Nov 28 04:26:38 2019
@@ -381,7 +381,7 @@ public class CompositeDataStoreCacheTest
         assertEquals(2, cache.getStagingCacheStats().getLoadCount());
         assertEquals(0, cache.getStagingCacheStats().getLoadSuccessCount());
 
-        assertCacheStats(cache.getCacheStats(), 1, 4 * 1024, 0, 3);
+        assertCacheStats(cache.getCacheStats(), 1, 4 * 1024, 0, 2);
         assertEquals(1, cache.getCacheStats().getLoadCount());
         assertEquals(1, cache.getCacheStats().getLoadSuccessCount());
 
@@ -414,7 +414,7 @@ public class CompositeDataStoreCacheTest
         assertEquals(2, cache.getStagingCacheStats().getLoadCount());
         assertEquals(0, cache.getStagingCacheStats().getLoadSuccessCount());
 
-        assertCacheStats(cache.getCacheStats(), 0, 0, 0, 3);
+        assertCacheStats(cache.getCacheStats(), 0, 0, 0, 2);
         assertEquals(1, cache.getCacheStats().getLoadCount());
         assertEquals(1, cache.getCacheStats().getLoadSuccessCount());
 
@@ -468,7 +468,7 @@ public class CompositeDataStoreCacheTest
         assertEquals(2, cache.getStagingCacheStats().getLoadCount());
         assertEquals(0, cache.getStagingCacheStats().getLoadSuccessCount());
 
-        assertCacheStats(cache.getCacheStats(), 2, 8 * 1024, 0, 4);
+        assertCacheStats(cache.getCacheStats(), 2, 8 * 1024, 0, 2);
         assertEquals(2, cache.getCacheStats().getLoadCount());
         assertEquals(2, cache.getCacheStats().getLoadSuccessCount());
 
@@ -533,7 +533,7 @@ public class CompositeDataStoreCacheTest
         assertEquals(2, cache.getStagingCacheStats().getLoadCount());
         assertEquals(1, cache.getStagingCacheStats().getLoadSuccessCount());
 
-        assertCacheStats(cache.getCacheStats(), 2, 8 * 1024, 0, 2);
+        assertCacheStats(cache.getCacheStats(), 2, 8 * 1024, 0, 1);
         assertEquals(1, cache.getCacheStats().getLoadCount());
         assertEquals(1, cache.getCacheStats().getLoadSuccessCount());