From b3c09a0747eafca34f66b7e40784cdf1af53a922 Mon Sep 17 00:00:00 2001 From: Nicola Fulvio Calabria <nicola.calabria@inaf.it> Date: Mon, 2 Aug 2021 22:48:56 +0200 Subject: [PATCH] unlock nodes in case of copyNode failure after file service call --- src/main/java/it/inaf/oats/vospace/JobService.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main/java/it/inaf/oats/vospace/JobService.java b/src/main/java/it/inaf/oats/vospace/JobService.java index f101367..938fbee 100644 --- a/src/main/java/it/inaf/oats/vospace/JobService.java +++ b/src/main/java/it/inaf/oats/vospace/JobService.java @@ -18,6 +18,7 @@ import it.inaf.oats.vospace.exception.InvalidArgumentException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import it.inaf.oats.vospace.exception.VoSpaceErrorSummarizableException; +import it.inaf.oats.vospace.persistence.NodeDAO; import java.util.List; import java.util.Optional; import java.util.concurrent.CompletableFuture; @@ -52,6 +53,9 @@ public class JobService { @Autowired private FileServiceClient fileServiceClient; + + @Autowired + private NodeDAO nodeDao; public enum JobDirection { pullToVoSpace, @@ -193,10 +197,19 @@ public class JobService { User user = (User) servletRequest.getUserPrincipal(); CompletableFuture.runAsync(() -> { handleJobErrors(jobSummary, job -> { + String jobId = jobSummary.getJobId(); + // Index 0: source 1: destination List<String> sourceAndDestination = copyService.processCopyNodes(transfer, jobId, user); // Call file service and command copy + try{ fileServiceClient.startFileCopyJob(sourceAndDestination.get(0), sourceAndDestination.get(1), jobId, user); + } catch (Exception e) { + // We decided not to purge metadata in case of failure + // just release busy nodes setting job_id = null + nodeDao.releaseBusyNodesByJobId(jobId); + throw e; + } return null; }); -- GitLab