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 db231ddc775e67dbab55d35ebaab539a5a79d3f4
Author: DImuthuUpe <[email protected]>
AuthorDate: Wed Jun 28 20:15:43 2023 -0400

    Terminating pending transfers if an exception was captured
---
 .../apache/airavata/mft/controller/MFTController.java    | 16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git 
a/controller/src/main/java/org/apache/airavata/mft/controller/MFTController.java
 
b/controller/src/main/java/org/apache/airavata/mft/controller/MFTController.java
index eff5d04..110f6d2 100644
--- 
a/controller/src/main/java/org/apache/airavata/mft/controller/MFTController.java
+++ 
b/controller/src/main/java/org/apache/airavata/mft/controller/MFTController.java
@@ -304,17 +304,27 @@ public class MFTController implements CommandLineRunner {
 
             if (value.getValueAsString().isPresent()) {
                 logger.debug("Pending " + value.getKey() + " : " + 
value.getValueAsString().get());
+                String transferId = 
value.getKey().substring(value.getKey().lastIndexOf("/") + 1);
                 try {
                     TransferApiRequest.Builder builder = 
TransferApiRequest.newBuilder();
                     JsonFormat.parser().merge(value.getValueAsString().get(), 
builder);
                     TransferApiRequest transferRequest = builder.build();
-
-                    String transferId = 
value.getKey().substring(value.getKey().lastIndexOf("/") + 1);
                     AgentTransferRequest.Builder agentTransferRequest = 
requestBuilder.prepareAgentTransferRequest(transferRequest);
                     pathOptimizer.handleTransferRequest(transferId, 
transferRequest, agentTransferRequest, value.getKey());
 
                 } catch (Exception e) {
-                    logger.error("Failed to process pending transfer in key 
{}", value.getKey(), e);
+                    logger.error("Failed to process pending transfer in key 
{}. Deleting from queue", value.getKey(), e);
+                    try {
+                        mftConsulClient.saveTransferState(transferId, null, 
new TransferState()
+                                .setUpdateTimeMils(System.currentTimeMillis())
+                                .setState("FAILED").setPercentage(0)
+                                .setPublisher("controller")
+                                .setDescription("Failed to process pending 
transfer "));
+                        
mftConsulClient.getKvClient().deleteKey(value.getKey());
+                    } catch (Exception ex) {
+                        logger.warn("Failed to update state of transfer {} to 
FAILED", transferId);
+                        // Ignore
+                    }
                 }
             }
         });

Reply via email to