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;
}
}