This is an automated email from the ASF dual-hosted git repository. dimuthuupe pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/airavata-mft.git
commit cc4a195817f44e4b382bbabfdfd22a28b27ef03d Author: Dimuthu Wannipurage <[email protected]> AuthorDate: Thu Apr 16 00:18:42 2020 -0400 Avoiding success status publish for failed transfers --- .../airavata/mft/agent/TransportMediator.java | 77 +++++++++++----------- 1 file changed, 40 insertions(+), 37 deletions(-) diff --git a/agent/src/main/java/org/apache/airavata/mft/agent/TransportMediator.java b/agent/src/main/java/org/apache/airavata/mft/agent/TransportMediator.java index 7738ca4..d8a2ebe 100644 --- a/agent/src/main/java/org/apache/airavata/mft/agent/TransportMediator.java +++ b/agent/src/main/java/org/apache/airavata/mft/agent/TransportMediator.java @@ -88,6 +88,8 @@ public class TransportMediator { try { int futureCnt = futureList.size(); + boolean transferErrored = false; + for (int i = 0; i < futureCnt; i++) { Future<Integer> ft = completionService.take(); futureList.remove(ft); @@ -96,7 +98,7 @@ public class TransportMediator { } catch (Exception e) { logger.error("One task failed with error", e); - + transferErrored = true; statusLock.lock(); onStatusCallback.accept(command.getTransferId(), new TransferState() .setPercentage(0) @@ -119,52 +121,53 @@ public class TransportMediator { } } - Boolean transferred = destMetadataCollector.isAvailable(command.getDestinationId(), command.getDestinationToken()); - - if (!transferred) { - logger.error("Transfer completed but resource is not available in destination"); - throw new Exception("Transfer completed but resource is not available in destination"); - } + if (!transferErrored) { + Boolean transferred = destMetadataCollector.isAvailable(command.getDestinationId(), command.getDestinationToken()); - ResourceMetadata destMetadata = destMetadataCollector.getGetResourceMetadata(command.getDestinationId(), - command.getDestinationToken()); + if (!transferred) { + logger.error("Transfer completed but resource is not available in destination"); + throw new Exception("Transfer completed but resource is not available in destination"); + } - boolean doIntegrityVerify = true; + ResourceMetadata destMetadata = destMetadataCollector.getGetResourceMetadata(command.getDestinationId(), + command.getDestinationToken()); - if (srcMetadata.getMd5sum() == null) { - logger.warn("MD5 sum is not available for source resource. So this disables integrity verification"); - doIntegrityVerify = false; - } else if (destMetadata.getMd5sum() == null) { - logger.warn("MD5 sum is not available for destination resource. So this disables integrity verification"); - doIntegrityVerify = false; - } + boolean doIntegrityVerify = true; - if (doIntegrityVerify && !destMetadata.getMd5sum().equals(srcMetadata.getMd5sum())) { - logger.error("Resource integrity violated. MD5 sums are not matching. Source md5 {} destination md5 {}", - srcMetadata.getMd5sum(), destMetadata.getMd5sum()); - throw new Exception("Resource integrity violated. MD5 sums are not matching. Source md5 " + srcMetadata.getMd5sum() - + " destination md5 " + destMetadata.getMd5sum()); - } + if (srcMetadata.getMd5sum() == null) { + logger.warn("MD5 sum is not available for source resource. So this disables integrity verification"); + doIntegrityVerify = false; + } else if (destMetadata.getMd5sum() == null) { + logger.warn("MD5 sum is not available for destination resource. So this disables integrity verification"); + doIntegrityVerify = false; + } - // Check + if (doIntegrityVerify && !destMetadata.getMd5sum().equals(srcMetadata.getMd5sum())) { + logger.error("Resource integrity violated. MD5 sums are not matching. Source md5 {} destination md5 {}", + srcMetadata.getMd5sum(), destMetadata.getMd5sum()); + throw new Exception("Resource integrity violated. MD5 sums are not matching. Source md5 " + srcMetadata.getMd5sum() + + " destination md5 " + destMetadata.getMd5sum()); + } - long endTime = System.nanoTime(); + // Check - double time = (endTime - startTime) * 1.0 /1000000000; + long endTime = System.nanoTime(); - statusLock.lock(); - onStatusCallback.accept(command.getTransferId(), new TransferState() - .setPercentage(100) - .setState("COMPLETED") - .setUpdateTimeMils(System.currentTimeMillis()) - .setDescription("Transfer successfully completed")); - transferInProgress.set(false); - transferSuccess.set(true); - statusLock.unlock(); + double time = (endTime - startTime) * 1.0 / 1000000000; - logger.info("Transfer {} completed. Speed {} MB/s", command.getTransferId(), - (srcMetadata.getResourceSize() * 1.0 / time) / (1024 * 1024)); + statusLock.lock(); + onStatusCallback.accept(command.getTransferId(), new TransferState() + .setPercentage(100) + .setState("COMPLETED") + .setUpdateTimeMils(System.currentTimeMillis()) + .setDescription("Transfer successfully completed")); + transferInProgress.set(false); + transferSuccess.set(true); + statusLock.unlock(); + logger.info("Transfer {} completed. Speed {} MB/s", command.getTransferId(), + (srcMetadata.getResourceSize() * 1.0 / time) / (1024 * 1024)); + } } catch (Exception e) { statusLock.lock();
