Author: krosenvold Date: Mon Jan 12 17:02:09 2015 New Revision: 1651142 URL: http://svn.apache.org/r1651142 Log: Fixed last findbug issue, which was real
Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ParallelScatterZipCreator.java Modified: commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ParallelScatterZipCreator.java URL: http://svn.apache.org/viewvc/commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ParallelScatterZipCreator.java?rev=1651142&r1=1651141&r2=1651142&view=diff ============================================================================== --- commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ParallelScatterZipCreator.java (original) +++ commons/proper/compress/trunk/src/main/java/org/apache/commons/compress/archivers/zip/ParallelScatterZipCreator.java Mon Jan 12 17:02:09 2015 @@ -23,8 +23,10 @@ import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; import java.util.zip.Deflater; @@ -43,6 +45,7 @@ public class ParallelScatterZipCreator { private final List<ScatterZipOutputStream> streams = synchronizedList(new ArrayList<ScatterZipOutputStream>()); private final ExecutorService es; private final ScatterGatherBackingStoreSupplier supplier; + private final List<Future> futures = new ArrayList<Future>(); private final long startedAt = System.currentTimeMillis(); private long compressionDoneAt = 0; @@ -120,8 +123,8 @@ public class ParallelScatterZipCreator { throw new IllegalArgumentException("Method must be set on the supplied zipArchiveEntry"); } // Consider if we want to constrain the number of items that can enqueue here. - es.submit(new Callable<ScatterZipOutputStream>() { - public ScatterZipOutputStream call() throws Exception { + Future<Object> future = es.submit(new Callable<Object>() { + public Void call() throws Exception { ScatterZipOutputStream streamToUse = tlScatterStreams.get(); InputStream payload = source.get(); try { @@ -129,10 +132,11 @@ public class ParallelScatterZipCreator { } finally { payload.close(); } - return streamToUse; + return null; } }); + futures.add( future); } @@ -146,8 +150,16 @@ public class ParallelScatterZipCreator { * @param targetStream The ZipArchiveOutputStream to receive the contents of the scatter streams * @throws IOException If writing fails * @throws InterruptedException If we get interrupted + * @throws ExecutionException If something happens in the parallel execution */ - public void writeTo(ZipArchiveOutputStream targetStream) throws IOException, InterruptedException { + public void writeTo(ZipArchiveOutputStream targetStream) + throws IOException, InterruptedException, ExecutionException { + + // Make sure we catch any exceptions from parallel phase + for (Future future : futures) { + future.get(); + } + es.shutdown(); es.awaitTermination(1000 * 60, TimeUnit.SECONDS);