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/03 08:13:58 UTC

svn commit: r1785227 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/plugins/blob/UploadStagingCache.java test/java/org/apache/jackrabbit/oak/plugins/blob/UploadStagingCacheTest.java

Author: amitj
Date: Fri Mar  3 08:13:58 2017
New Revision: 1785227

URL: http://svn.apache.org/viewvc?rev=1785227&view=rev
Log:
OAK-5874: Duplicate uploads might happen with AbstractSharedCachingDataStore

 - Slightly modified patch from Raul Hudea

Modified:
    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/UploadStagingCacheTest.java

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=1785227&r1=1785226&r2=1785227&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 Fri Mar  3 08:13:58 2017
@@ -255,7 +255,9 @@ public class UploadStagingCache implemen
      *
      * @param id the id of the file to be staged
      * @param input the file to be staged
-     * @return An Optional SettableFuture.
+     * @return An Optional SettableFuture containing
+     *              1 if upload was successful,
+     *              0 if an existing id is already pending for upload
      */
     public Optional<SettableFuture<Integer>> put(String id, File input) {
         return putOptionalDisregardingSize(id, input, false);
@@ -305,6 +307,13 @@ public class UploadStagingCache implemen
             }
         } else {
             currentSize.addAndGet(-length);
+
+            // if file is still pending upload, count it as present
+            if (map.containsKey(id) || attic.containsKey(id)) {
+                SettableFuture<Integer> result = SettableFuture.create();
+                result.set(0);
+                return Optional.of(result);
+            }
         }
         return Optional.absent();
     }

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/UploadStagingCacheTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/UploadStagingCacheTest.java?rev=1785227&r1=1785226&r2=1785227&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/UploadStagingCacheTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/UploadStagingCacheTest.java Fri Mar  3 08:13:58 2017
@@ -381,7 +381,8 @@ public class UploadStagingCacheTest exte
 
         File f = copyToFile(randomStream(0, 4 * 1024), folder.newFile());
         Optional<SettableFuture<Integer>> future2 = stagingCache.put(ID_PREFIX + 0, f);
-        assertFalse(future2.isPresent());
+        assertTrue(future2.isPresent());
+        assertEquals(future2.get().get().intValue(), 0);
 
         //start
         taskLatch.countDown();