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());