public void handleTransferRequest()

in controller/src/main/java/org/apache/airavata/mft/controller/TransferDispatcher.java [134:193]


    public void handleTransferRequest(String transferId,
                                      TransferApiRequest transferRequest,
                                      AgentTransferRequest.Builder agentTransferRequestTemplate,
                                      String consulKey) throws Exception{

        if (this.agentOrchestrator.isAnAgentDeploying(consulKey)) {
            logger.info("Ignoring handling transfer id {} as it is already in optimizing stage", transferId);
            return;
        }

        logger.info("Handling transfer id {} with consul key {}", transferId, consulKey);
        List<String> liveAgentIds = mftConsulClient.getLiveAgentIds();

        Map<String, Integer> targetAgentsMap = transferRequest.getTargetAgentsMap();
        List<String> userProvidedAgents = liveAgentIds.stream().filter(targetAgentsMap::containsKey).collect(Collectors.toList());

        AgentTransferRequest.Builder agentTransferRequestBuilder = agentTransferRequestTemplate.clone();

        agentTransferRequestBuilder.setRequestId(UUID.randomUUID().toString());
        for (EndpointPaths ep : transferRequest.getEndpointPathsList()) {
            agentTransferRequestBuilder.addEndpointPaths(org.apache.airavata.mft.agent.stub.EndpointPaths.newBuilder()
                    .setSourcePath(ep.getSourcePath())
                    .setDestinationPath(ep.getDestinationPath()).buildPartial());
        }

        AgentTransferRequest agentTransferRequest = agentTransferRequestBuilder.build();

        if (transferRequest.getOptimizeTransferPath()) {
            boolean agentLaunching = agentOrchestrator.tryLaunchingAgent(
                    transferId, transferRequest,
                    agentTransferRequest,
                    consulKey);

            if (!agentLaunching) {
                logger.warn("No optimizing path is available. Moving user provided agents");
                submitTransferToAgent(userProvidedAgents, transferId,
                        transferRequest,
                        agentTransferRequest,
                        consulKey);
            }

        } else if (userProvidedAgents.isEmpty()) {
            if (liveAgentIds.isEmpty()) {
                logger.warn("No live agent available to perform the transfer.");
                return;
            }
            logger.info("No agent selection criteria was provided. Going with the local agent");
            // TODO select the local agent
            submitTransferToAgent(liveAgentIds, transferId,
                    transferRequest,
                    agentTransferRequest,
                    consulKey);

        } else {
            submitTransferToAgent(userProvidedAgents, transferId,
                    transferRequest,
                    agentTransferRequest,
                    consulKey);
        }
    }