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