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 2017/03/16 08:53:39 UTC

svn commit: r1787145 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/blob/AbstractSharedCachingDataStore.java test/java/org/apache/jackrabbit/oak/plugins/blob/CachingDataStoreTest.java

Author: amitj
Date: Thu Mar 16 08:53:39 2017
New Revision: 1787145

URL: http://svn.apache.org/viewvc?rev=1787145&view=rev
Log:
OAK-5934: AbstractSharedCachingDataStore initializes a loader which closes input stream retrieved prematurely

- Removed the finally clause and the input stream close
- Added test syncAddGetLoadCache

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/AbstractSharedCachingDataStore.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/CachingDataStoreTest.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=1787145&r1=1787144&r2=1787145&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 Thu Mar 16 08:53:39 2017
@@ -163,15 +163,7 @@ public abstract class AbstractSharedCach
                 uploadThreads,
                 new CacheLoader<String, InputStream>() {
                     @Override public InputStream load(String key) throws Exception {
-                        InputStream is = null;
-                        boolean threw = true;
-                        try {
-                            is = backend.read(new DataIdentifier(key));
-                            threw = false;
-                        } finally {
-                            Closeables.close(is, threw);
-                        }
-                        return is;
+                        return backend.read(new DataIdentifier(key));
                     }
                 }, new StagingUploader() {
                     @Override public void write(String id, File file) throws DataStoreException {

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=1787145&r1=1787144&r2=1787145&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 Thu Mar 16 08:53:39 2017
@@ -226,6 +226,35 @@ public class CachingDataStoreTest extend
     }
 
     /**
+     * Add, get forcing load in cache.
+     * @throws Exception
+     */
+    @Test
+    public void syncAddGetLoadCache() throws Exception {
+        LOG.info("Starting syncAddGetForceFromCache");
+
+        File f = copyToFile(randomStream(0, 4 * 1024), folder.newFile());
+        String id = getIdForInputStream(f);
+        FileInputStream fin = new FileInputStream(f);
+        closer.register(fin);
+
+        DataRecord rec = dataStore.addRecord(fin, new BlobOptions().setUpload(SYNCHRONOUS));
+        assertEquals(id, rec.getIdentifier().toString());
+        assertFile(rec.getStream(), f, folder);
+
+        // Invalidate from the local cache
+        dataStore.getCache().invalidate(id);
+
+        // Trigger load from backend
+        File cacheDownloaded = dataStore.getCache().get(id);
+        assertTrue(Files.equal(f, cacheDownloaded));
+
+        assertEquals(1, Iterators.size(dataStore.getAllIdentifiers()));
+
+        LOG.info("Finished syncAddGetLoadCache");
+    }
+
+    /**
      * {@link CompositeDataStoreCache#getIfPresent(String)} when no cache.
      */
     @Test