diff --git a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/UploadStagingCache.java b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/UploadStagingCache.java index 23c1b0e..4835dec 100644 --- a/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/UploadStagingCache.java +++ b/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/UploadStagingCache.java @@ -255,7 +255,9 @@ public class UploadStagingCache implements Closeable { * * @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> put(String id, File input) { return putOptionalDisregardingSize(id, input, false); @@ -305,6 +307,13 @@ public class UploadStagingCache implements Closeable { } } else { currentSize.addAndGet(-length); + + // if file is still pending upload, count it as present + if (map.containsKey(id)) { + SettableFuture result = SettableFuture.create(); + result.set(0); + return Optional.of(result); + } } return Optional.absent(); } diff --git a/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/UploadStagingCacheTest.java b/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/UploadStagingCacheTest.java index 671e655..7280683 100644 --- a/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/UploadStagingCacheTest.java +++ b/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/UploadStagingCacheTest.java @@ -381,7 +381,8 @@ public class UploadStagingCacheTest extends AbstractDataStoreCacheTest { File f = copyToFile(randomStream(0, 4 * 1024), folder.newFile()); Optional> future2 = stagingCache.put(ID_PREFIX + 0, f); - assertFalse(future2.isPresent()); + assertTrue(future2.isPresent()); + assertEquals(future2.get().get().intValue(), 0); //start taskLatch.countDown();