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


Reply via email to