diff --git a/src/main/java/it/inaf/oats/vospace/JobService.java b/src/main/java/it/inaf/oats/vospace/JobService.java index 291d9ebac21b29ba19aafd7107f01a0f54a2afa3..2f08d73972920e56421ef6ae9b6f3a4678d181fb 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 ea46eda1b7de37f5c4dc8c9d3e0e296ae14f8fe9..4a47a4783912e6606bea7b7dbeb96b25b94196dd 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/.*")); }