Commit 2c789ef9 authored by Sonia Zorba's avatar Sonia Zorba
Browse files

Allowed multiple targets for transfer operations

parent ec2ba33b
Loading
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@ import net.ivoa.xml.uws.v1.JobSummary;
import net.ivoa.xml.vospace.v2.Protocol;
import net.ivoa.xml.vospace.v2.Transfer;
import it.inaf.oats.vospace.exception.ErrorSummaryFactory;
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;
@@ -131,7 +132,10 @@ public class JobService {
                    asyncTransfService.startJob(job);
                    return;
                case "ivo://ivoa.net/vospace/core#httpget":
                    String nodeUri = transfer.getTarget();
                    if (transfer.getTarget().size() != 1) {
                        throw new InvalidArgumentException("Invalid target size for pullToVoSpace: " + transfer.getTarget().size());
                    }
                    String nodeUri = transfer.getTarget().get(0);
                    String contentUri = protocol.getEndpoint();
                    uriService.setNodeRemoteLocation(nodeUri, contentUri);
                    uriService.setTransferJobResult(job, transfer);
+6 −1
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@ import it.inaf.oats.vospace.datamodel.NodeUtils;
import it.inaf.oats.vospace.exception.ContainerNotFoundException;
import it.inaf.oats.vospace.exception.DuplicateNodeException;
import it.inaf.oats.vospace.exception.InternalFaultException;
import it.inaf.oats.vospace.exception.InvalidArgumentException;
import it.inaf.oats.vospace.exception.NodeBusyException;
import it.inaf.oats.vospace.exception.NodeNotFoundException;
import it.inaf.oats.vospace.exception.PermissionDeniedException;
@@ -46,8 +47,12 @@ public class MoveService {
    @Transactional(rollbackFor = { Exception.class })
    public void processMoveJob(Transfer transfer) {

        if (transfer.getTarget().size() != 1) {
            throw new InvalidArgumentException("Invalid target size for moveNode: " + transfer.getTarget().size());
        }
        
        // Get Source Vos Path
        String sourcePath = transfer.getTarget().substring("vos://".length() + authority.length());
        String sourcePath = transfer.getTarget().get(0).substring("vos://".length() + authority.length());

        // Get Destination Vos Path (it's in transfer direction)
        String destinationPath = transfer.getDirection().substring("vos://".length() + authority.length());
+3 −3
Original line number Diff line number Diff line
@@ -13,7 +13,6 @@ import javax.servlet.http.HttpServletRequest;
import net.ivoa.xml.uws.v1.ExecutionPhase;
import net.ivoa.xml.uws.v1.JobSummary;
import net.ivoa.xml.uws.v1.Jobs;
import net.ivoa.xml.vospace.v2.Transfer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
@@ -32,6 +31,7 @@ import java.util.HashSet;
import java.util.List;
import net.ivoa.xml.uws.v1.ErrorSummary;
import net.ivoa.xml.vospace.v2.Protocol;
import net.ivoa.xml.vospace.v2.Transfer;

@RestController
public class TransferController {
@@ -81,7 +81,7 @@ public class TransferController {
            @RequestParam("DIRECTION") String direction, @RequestParam("PROTOCOL") String protocolUris, User principal) {

        Transfer transfer = new Transfer();
        transfer.setTarget(target);
        transfer.setTarget(Arrays.asList(target));
        transfer.setDirection(direction);

        // CADC client sends multiple protocol parameters and Spring join them using a comma separator.
+5 −1
Original line number Diff line number Diff line
@@ -144,7 +144,11 @@ public class UriService {

    private String getEndpoint(JobSummary job, Transfer transfer) {

        String relativePath = transfer.getTarget().substring("vos://".length() + authority.length());
        if (transfer.getTarget().size() != 1) {
            throw new InvalidArgumentException("Invalid target size: " + transfer.getTarget().size());
        }

        String relativePath = transfer.getTarget().get(0).substring("vos://".length() + authority.length());

        User user = (User) servletRequest.getUserPrincipal();
        String creator = user.getName();
+3 −2
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@
package it.inaf.oats.vospace;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import net.ivoa.xml.uws.v1.JobSummary;
import net.ivoa.xml.vospace.v2.Protocol;
@@ -25,7 +26,7 @@ import redis.clients.jedis.Jedis;
@ExtendWith(MockitoExtension.class)
public class AsyncTransferServiceTest {

    private static final String JSON_JOB = "{\"jobId\":\"job_id\",\"runId\":null,\"ownerId\":null,\"phase\":null,\"quote\":null,\"creationTime\":null,\"startTime\":null,\"endTime\":null,\"executionDuration\":0,\"destruction\":null,\"parameters\":null,\"results\":[],\"errorSummary\":null,\"jobInfo\":{\"transfer\":{\"target\":\"vos://example.com!vospace/my-node\",\"direction\":\"pullToVoSpace\",\"view\":null,\"protocols\":[{\"endpoint\":null,\"param\":[],\"uri\":\"ia2:async-recall\"}],\"keepBytes\":null,\"version\":null,\"param\":[]}},\"version\":null}\n";
    private static final String JSON_JOB = "{\"jobId\":\"job_id\",\"runId\":null,\"ownerId\":null,\"phase\":null,\"quote\":null,\"creationTime\":null,\"startTime\":null,\"endTime\":null,\"executionDuration\":0,\"destruction\":null,\"parameters\":null,\"results\":[],\"errorSummary\":null,\"jobInfo\":{\"transfer\":{\"target\":[\"vos://example.com!vospace/my-node\"],\"direction\":\"pullToVoSpace\",\"view\":null,\"protocols\":[],\"keepBytes\":null,\"version\":null,\"param\":[]}},\"version\":null}\n";

    @Test
    public void testRedisRpc() {
@@ -63,7 +64,7 @@ public class AsyncTransferServiceTest {
        Protocol protocol = new Protocol();
        protocol.setUri("ia2:async-recall");
        transfer.getProtocols().add(protocol);
        transfer.setTarget("vos://example.com!vospace/my-node");
        transfer.setTarget(Arrays.asList("vos://example.com!vospace/my-node"));

        JobSummary job = new JobSummary();
        job.setJobId("job_id");
Loading