public boolean tryLaunchingAgent()

in controller/src/main/java/org/apache/airavata/mft/controller/spawner/AgentOrchestrator.java [202:277]


    public boolean tryLaunchingAgent(String transferId,
                                     TransferApiRequest transferRequest,
                                     AgentTransferRequest agentTransferRequest,
                                     String consulKey) {


        List<LaunchedSpawnerMetadata> selectedSpawnerMetadata = new ArrayList<>();

        LaunchedSpawnerMetadata sourceSpawnerMetadata = launchedSpawnersMap.get(getId(transferRequest, true));
        if (sourceSpawnerMetadata != null) {
            selectedSpawnerMetadata.add(sourceSpawnerMetadata);
        }

        LaunchedSpawnerMetadata destSpawnerMetadata = launchedSpawnersMap.get(getId(transferRequest, false));
        if (destSpawnerMetadata != null) {
            selectedSpawnerMetadata.add(destSpawnerMetadata);
        }

        if (selectedSpawnerMetadata.isEmpty()) {
            Optional<AgentSpawner> sourceSpawner = SpawnerSelector.selectSpawner(
                    agentTransferRequest.getSourceStorage(),
                    agentTransferRequest.getSourceSecret());

            Optional<AgentSpawner> destSpawner = SpawnerSelector.selectSpawner(
                    agentTransferRequest.getDestinationStorage(),
                    agentTransferRequest.getDestinationSecret());

            if (sourceSpawner.isPresent()) {
                logger.info("Launching {} spawner in source side for transfer {}",
                        sourceSpawner.get().getClass().getName(), transferId);

                sourceSpawner.get().launch();
                LaunchedSpawnerMetadata lsm = new LaunchedSpawnerMetadata(sourceSpawner.get());
                lsm.transferInfos.put(agentTransferRequest.getRequestId(),
                        new TransferInfo(
                                transferId,
                                agentTransferRequest,
                                transferRequest,
                                consulKey));

                launchedSpawnersMap.put(getId(transferRequest, true), lsm);
                return true;

            } else if (destSpawner.isPresent()) {
                logger.info("Launching {} spawner in destination side for transfer {}",
                        destSpawner.get().getClass().getName(), transferId);

                destSpawner.get().launch();
                LaunchedSpawnerMetadata lsm = new LaunchedSpawnerMetadata(destSpawner.get());
                lsm.transferInfos.put(agentTransferRequest.getRequestId(),
                        new TransferInfo(
                                transferId,
                                agentTransferRequest,
                                transferRequest,
                                consulKey));

                launchedSpawnersMap.put(getId(transferRequest, false), lsm);
                return true;

            } else {
                return false;
            }
        } else {
            logger.info("Reusing already running optimized agents for transfer {}", transferId);

            // Todo select the spawner having least stransfers. Make this thread safe as some case, the spawner might be
            // initiating the termination
            selectedSpawnerMetadata.get(0).transferInfos.put(agentTransferRequest.getRequestId(),
                    new TransferInfo(
                            transferId,
                            agentTransferRequest,
                            transferRequest,
                            consulKey));
            return true;
        }
    }