Author: amitj
Date: Mon Oct 24 04:52:41 2016
New Revision: 1766344
URL: http://svn.apache.org/viewvc?rev=1766344&view=rev
Log:
OAK-4979: Caching sub-system implementation for DataStore
- Normalization of path configured
- Performance improvement in DataStore#addRecord() by pre-creating parent dirs
- Using an explicit copy option when adding to download cache on upload success
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/DataStoreCacheUtils.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
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=1766344&r1=1766343&r2=1766344&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:41 2016
@@ -39,6 +39,7 @@ import com.google.common.collect.Immutab
import com.google.common.collect.Iterators;
import com.google.common.io.Closeables;
import com.google.common.util.concurrent.ListeningExecutorService;
+import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.jackrabbit.core.data.AbstractDataRecord;
import org.apache.jackrabbit.core.data.AbstractDataStore;
@@ -138,7 +139,7 @@ public abstract class AbstractSharedCach
if (path == null) {
path = homeDir + "/repository/datastore";
}
-
+ path = FilenameUtils.normalizeNoEndSeparator(path);
checkArgument(stagingSplitPercentage >= 0 && stagingSplitPercentage <=
50,
"Staging percentage cache should be between 0 and 50");
@@ -219,6 +220,8 @@ public abstract class AbstractSharedCach
// otherwise add to backend
if (!cache.stage(identifier.toString(), tmpFile)) {
backend.write(identifier, tmpFile);
+ // offer to download cache
+ cache.getDownloadCache().put(identifier.toString(), tmpFile);
}
return getRecordIfStored(identifier);
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/DataStoreCacheUtils.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/DataStoreCacheUtils.java?rev=1766344&r1=1766343&r2=1766344&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/DataStoreCacheUtils.java
(original)
+++
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/DataStoreCacheUtils.java
Mon Oct 24 04:52:41 2016
@@ -66,6 +66,7 @@ public class DataStoreCacheUtils {
file = new File(file, id.substring(0, 2));
file = new File(file, id.substring(2, 4));
file = new File(file, id.substring(4, 6));
+ file.mkdirs();
return new File(file, id);
}
}
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=1766344&r1=1766343&r2=1766344&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:41 2016
@@ -52,7 +52,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.apache.commons.io.FileUtils.copyInputStreamToFile;
-import static org.apache.commons.io.FileUtils.forceDelete;
import static org.apache.commons.io.FilenameUtils.normalizeNoEndSeparator;
/**
@@ -193,10 +192,18 @@ public class FileCache extends AbstractC
*/
@Override
public void put(String key, File file) {
+ put(key, file, true);
+ }
+
+ private void put(String key, File file, boolean copy) {
try {
File cached = DataStoreCacheUtils.getFile(key, cacheRoot);
if (!cached.exists()) {
- FileUtils.moveFile(file, cached);
+ if (copy) {
+ FileUtils.copyFile(file, cached);
+ } else {
+ FileUtils.moveFile(file, cached);
+ }
}
cache.put(key, cached);
} catch (IOException e) {
@@ -287,7 +294,7 @@ public class FileCache extends AbstractC
while (iter.hasNext()) {
File toBeSyncedFile = iter.next();
try {
- put(toBeSyncedFile.getName(), toBeSyncedFile);
+ put(toBeSyncedFile.getName(), toBeSyncedFile, false);
count++;
LOG.trace("Added file [{}} to in-memory cache",
toBeSyncedFile);
} catch (Exception e) {
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=1766344&r1=1766343&r2=1766344&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:41 2016
@@ -312,20 +312,12 @@ public class UploadStagingCache implemen
if (downloadCache != null) {
// Touch the file to update timestamp and record
length
Files.touch(upload);
- long length = upload.length();
-
downloadCache.put(id, upload);
- LOG.debug("[{}] added to cache", id);
- // Update stats for removal
- currentSize.addAndGet(-length);
- cacheStats.decrementSize(length);
+ LOG.debug("[{}] added to cache", id);
}
map.remove(id);
-
- // Remove from upload staging area
- //LOG.info("File [{}] removed from cache [{}]",
upload, remove(id));
} catch (IOException e) {
LOG.warn("Error in cleaning up [{}] from staging",
upload);
}