From d69707837edd7376abf66c2cc1f712cc0afea51f Mon Sep 17 00:00:00 2001 From: Nicola Fulvio Calabria <nicola.calabria@inaf.it> Date: Sat, 10 Apr 2021 13:18:19 +0200 Subject: [PATCH] Minor refactoring of error handling code in JobService::startJob + added update job phase on switch to EXECUTING --- .../java/it/inaf/oats/vospace/JobService.java | 83 +++++++++---------- .../oats/vospace/TransferControllerTest.java | 4 +- 2 files changed, 41 insertions(+), 46 deletions(-) diff --git a/src/main/java/it/inaf/oats/vospace/JobService.java b/src/main/java/it/inaf/oats/vospace/JobService.java index 291d9eb..2f08d73 100644 --- a/src/main/java/it/inaf/oats/vospace/JobService.java +++ b/src/main/java/it/inaf/oats/vospace/JobService.java @@ -47,54 +47,26 @@ public class JobService { private void startJob(JobSummary job) { - Transfer transfer = uriService.getTransfer(job); - - switch (getJobType(transfer)) { - case pullToVoSpace: - handlePullToVoSpace(job, transfer); - break; - case pullFromVoSpace: - case pushToVoSpace: - handleVoSpaceUrlsListResult(job, transfer); - break; - default: - throw new UnsupportedOperationException("Not implemented yet"); - } - } - - private void handlePullToVoSpace(JobSummary job, Transfer transfer) { try { - for (Protocol protocol : transfer.getProtocols()) { - switch (protocol.getUri()) { - case "ia2:async-recall": - asyncTransfService.startJob(job); - // ASK IF IT's OK neglect phase update. - return; - case "ivo://ivoa.net/vospace/core#httpget": - String nodeUri = transfer.getTarget(); - String contentUri = protocol.getEndpoint(); - uriService.setNodeRemoteLocation(nodeUri, contentUri); - uriService.setTransferJobResult(job, transfer); - job.setPhase(ExecutionPhase.COMPLETED); - jobDAO.updateJob(job); - return; - default: - throw new InternalFaultException("Unsupported pullToVoSpace protocol: " + protocol.getUri()); - } - } - } catch (VoSpaceErrorSummarizableException e) { - job.setPhase(ExecutionPhase.ERROR); - job.setErrorSummary(ErrorSummaryFactory.newErrorSummary(e.getFault())); + job.setPhase(ExecutionPhase.EXECUTING); jobDAO.updateJob(job); - } - } - private void handleVoSpaceUrlsListResult(JobSummary job, Transfer transfer) { - try { - job.setPhase(ExecutionPhase.EXECUTING); - uriService.setTransferJobResult(job, transfer); + Transfer transfer = uriService.getTransfer(job); + + switch (getJobType(transfer)) { + case pullToVoSpace: + handlePullToVoSpace(job, transfer); + break; + case pullFromVoSpace: + case pushToVoSpace: + handleVoSpaceUrlsListResult(job, transfer); + break; + default: + throw new UnsupportedOperationException("Not implemented yet"); + } + job.setPhase(ExecutionPhase.COMPLETED); - // Need to catch other exceptions too to avoid inconsistent job status + } catch (VoSpaceErrorSummarizableException e) { job.setPhase(ExecutionPhase.ERROR); job.setErrorSummary(ErrorSummaryFactory.newErrorSummary(e.getFault())); @@ -103,6 +75,29 @@ public class JobService { } } + private void handlePullToVoSpace(JobSummary job, Transfer transfer) { + + for (Protocol protocol : transfer.getProtocols()) { + switch (protocol.getUri()) { + case "ia2:async-recall": + asyncTransfService.startJob(job); + return; + case "ivo://ivoa.net/vospace/core#httpget": + String nodeUri = transfer.getTarget(); + String contentUri = protocol.getEndpoint(); + uriService.setNodeRemoteLocation(nodeUri, contentUri); + uriService.setTransferJobResult(job, transfer); + return; + default: + throw new InternalFaultException("Unsupported pullToVoSpace protocol: " + protocol.getUri()); + } + } + } + + private void handleVoSpaceUrlsListResult(JobSummary job, Transfer transfer) { + uriService.setTransferJobResult(job, transfer); + } + private JobType getJobType(Transfer transfer) { return JobType.valueOf(transfer.getDirection()); } diff --git a/src/test/java/it/inaf/oats/vospace/TransferControllerTest.java b/src/test/java/it/inaf/oats/vospace/TransferControllerTest.java index ea46eda..4a47a47 100644 --- a/src/test/java/it/inaf/oats/vospace/TransferControllerTest.java +++ b/src/test/java/it/inaf/oats/vospace/TransferControllerTest.java @@ -143,7 +143,7 @@ public class TransferControllerTest { verify(nodeDao, times(1)).setNodeLocation(eq("/portalnode"), eq(2), eq("lbcr.20130512.060722.fits.gz")); - verify(jobDao, times(1)).updateJob(argThat(j -> { + verify(jobDao, times(2)).updateJob(argThat(j -> { assertTrue(j.getResults().get(0).getHref().startsWith("http://archive.lbto.org")); assertEquals(ExecutionPhase.COMPLETED, j.getPhase()); return true; @@ -187,7 +187,7 @@ public class TransferControllerTest { .andExpect(status().is3xxRedirection()) .andReturn().getResponse().getHeader("Location"); - verify(jobDao, times(1)).updateJob(any()); + verify(jobDao, times(2)).updateJob(any()); assertThat(redirect, matchesPattern("^/transfers/.*")); } -- GitLab