diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java index 9d9921d29377110c6c0bff1f2f5964c0558a6e95..74e3301679bc31f38ecdc1da9f5f41bf9323ff56 100644 --- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java +++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/Job.java @@ -238,7 +238,12 @@ public class Job { synchronized public void download(Predicate<String> predicate, ProgressNotifier notifier) { List<String> files = getHaaSClient().getChangedFiles(jobId).stream().filter(predicate).collect(Collectors.toList()); try (HaaSFileTransfer transfer = haasClientSupplier.get().startFileTransfer(getId(), HaaSClient.DUMMY_TRANSFER_FILE_PROGRESS)) { - List<Long> fileSizes = transfer.obtainSize(files); + List<Long> fileSizes; + try { + fileSizes = transfer.obtainSize(files); + } catch (InterruptedIOException e1) { + return; + } final long totalFileSize = fileSizes.stream().mapToLong(i -> i.longValue()).sum(); TransferFileProgressForHaaSClient progress = new TransferFileProgressForHaaSClient(totalFileSize, notifier); transfer.setProgress(progress); @@ -336,7 +341,11 @@ public class Job { try (HaaSFileTransfer transfer = getHaaSClient().startFileTransfer(getId(), HaaSClient.DUMMY_TRANSFER_FILE_PROGRESS)) { - return transfer.obtainSize(names); + try { + return transfer.obtainSize(names); + } catch (InterruptedIOException e) { + return Collections.emptyList(); + } } } diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/PersistentSynchronizationProcess.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/PersistentSynchronizationProcess.java index 767686f987c70c9ffb0f9844b582e3a2a03c3e2b..524e1048fc6d7260b1861254126e9fd43ed552ab 100644 --- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/PersistentSynchronizationProcess.java +++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/PersistentSynchronizationProcess.java @@ -91,18 +91,23 @@ public abstract class PersistentSynchronizationProcess<T> { abstract protected void processItem(HaaSFileTransfer tr, T p) throws InterruptedIOException; - abstract protected long getTotalSize(Iterable<T> items, HaaSFileTransfer tr); + abstract protected long getTotalSize(Iterable<T> items, HaaSFileTransfer tr) throws InterruptedIOException; private void doProcess(AtomicBoolean reRun) { boolean interrupted = false; notifier.addItem(INIT_TRANSFER_ITEM); + runningTransferThreads.add(Thread.currentThread()); try (HaaSFileTransfer tr = fileTransferSupplier.get()) { - TransferFileProgressForHaaSClient notifier; - tr.setProgress(notifier = getTransferFileProgress(tr)); - runningTransferThreads.add(Thread.currentThread()); - notifier.itemDone(INIT_TRANSFER_ITEM); - while (!toProcessQueue.isEmpty()) { + TransferFileProgressForHaaSClient notifier = DUMMY_FILE_PROGRESS; + try { + tr.setProgress(notifier = getTransferFileProgress(tr)); + } catch (InterruptedIOException e1) { + interrupted = true; + } + + this.notifier.itemDone(INIT_TRANSFER_ITEM); + while (!interrupted && !toProcessQueue.isEmpty()) { T p = toProcessQueue.poll(); String item = p.toString(); notifier.addItem(item); @@ -116,9 +121,9 @@ public abstract class PersistentSynchronizationProcess<T> { notifier.itemDone(item); reRun.set(false); } - runningTransferThreads.remove(Thread.currentThread()); notifier.done(); } finally { + runningTransferThreads.remove(Thread.currentThread()); synchronized (this) { if (startFinished) { if(!interrupted && !Thread.interrupted()) { @@ -130,6 +135,7 @@ public abstract class PersistentSynchronizationProcess<T> { } } } + log.info("doProcess - done - " + Thread.currentThread().isInterrupted()); } private void fileUploaded(T p) { @@ -141,7 +147,7 @@ public abstract class PersistentSynchronizationProcess<T> { } } - private TransferFileProgressForHaaSClient getTransferFileProgress(HaaSFileTransfer tr) { + private TransferFileProgressForHaaSClient getTransferFileProgress(HaaSFileTransfer tr) throws InterruptedIOException { if (notifier == null) { return DUMMY_FILE_PROGRESS; } diff --git a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/Synchronization.java b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/Synchronization.java index 268e5a46c3097ce8646ed2eaaab9ee84c92cc951..0206e91f7336d2731fa7e01edd6aae4297d52549 100644 --- a/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/Synchronization.java +++ b/haas-imagej-client/src/main/java/cz/it4i/fiji/haas/data_transfer/Synchronization.java @@ -164,8 +164,7 @@ public class Synchronization { } @Override - protected long getTotalSize(Iterable<String> items, HaaSFileTransfer tr) { - + protected long getTotalSize(Iterable<String> items, HaaSFileTransfer tr) throws InterruptedIOException { return tr.obtainSize( StreamSupport.stream(items.spliterator(), false).collect(Collectors.toList())).stream().collect(Collectors.summingLong(val->val)); } diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransfer.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransfer.java index 59d482ece293f89140bab989a57ca47bc74aa12c..2cf9b14969f30fb9cb8404e4bb0f8cb125ee4d76 100644 --- a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransfer.java +++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransfer.java @@ -18,7 +18,7 @@ public interface HaaSFileTransfer extends Closeable { void download(String files, Path workDirectory) throws InterruptedIOException; - List<Long> obtainSize(List<String> files); + List<Long> obtainSize(List<String> files) throws InterruptedIOException; List<String> getContent(List<String> logs); diff --git a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransferImp.java b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransferImp.java index 90e117b58c83f970a0fb909f4cfe10ac73dc6b83..9a9fba8bca97c62abdb412833c7e7af408769ead 100644 --- a/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransferImp.java +++ b/haas-java-client/src/main/java/cz/it4i/fiji/haas_java_client/HaaSFileTransferImp.java @@ -75,10 +75,12 @@ class HaaSFileTransferImp implements HaaSFileTransfer { } @Override - public List<Long> obtainSize(List<String> files) { + public List<Long> obtainSize(List<String> files) throws InterruptedIOException { try { return getSizes(files.stream() .map(filename -> "'" + ft.getSharedBasepath() + "/" + filename + "'").collect(Collectors.toList())); + } catch (InterruptedIOException e) { + throw e; } catch (JSchException | IOException e) { throw new HaaSClientException(e); }