AppCatalog appCatalog = AppCatalogFactory.getAppCatalog();
//fetch the compute resource, application interface and deployment information from app catalog
ApplicationInterfaceDescription applicationInterface = appCatalog.
getApplicationInterface().getApplicationInterface(applicationInterfaceId);
ApplicationDeploymentDescription applicationDeployment = appCatalog.
getApplicationDeployment().getApplicationDeployement(applicationDeploymentId);
ComputeResourceDescription computeResource = appCatalog.getComputeResource().
getComputeResource(applicationDeployment.getComputeHostId());
ComputeResourcePreference gatewayResourcePreferences = appCatalog.getGatewayProfile().
getComputeResourcePreference(gatewayID, applicationDeployment.getComputeHostId());
if (gatewayResourcePreferences == null) {
List<String> gatewayProfileIds = appCatalog.getGatewayProfile()
.getGatewayProfileIds(gatewayID);
for (String profileId : gatewayProfileIds) {
gatewayID = profileId;
gatewayResourcePreferences = appCatalog.getGatewayProfile().
getComputeResourcePreference(gatewayID, applicationDeployment.getComputeHostId());
if (gatewayResourcePreferences != null) {
break;
}
}
}
//Create the legacy schema docs to fill-in
ServiceDescription legacyServiceDescription = new ServiceDescription();
ServiceDescriptionType legacyServiceDescType = legacyServiceDescription.getType();
ApplicationDescription legacyAppDescription = null;
HostDescription legacyHostDescription = null;
///////////////SERVICE DESCRIPTOR///////////////////////////////
//Fetch the application inputs and outputs from the app interface and create the legacy service description.
legacyServiceDescType.setName(applicationInterface.getApplicationName());
legacyServiceDescType.setDescription(applicationInterface.getApplicationName());
List<InputParameterType> legacyInputParameters = new ArrayList<InputParameterType>();
List<OutputParameterType> legacyOutputParameters = new ArrayList<OutputParameterType>();
List<InputDataObjectType> applicationInputs = applicationInterface.getApplicationInputs();
for (InputDataObjectType dataObjectType : applicationInputs) {
InputParameterType parameter = InputParameterType.Factory.newInstance();
parameter.setParameterName(dataObjectType.getName());
parameter.setParameterDescription(dataObjectType.getUserFriendlyDescription());
ParameterType parameterType = parameter.addNewParameterType();
switch (dataObjectType.getType()) {
case FLOAT:
parameterType.setType(DataType.FLOAT);
break;
case INTEGER:
parameterType.setType(DataType.INTEGER);
break;
case STRING:
parameterType.setType(DataType.STRING);
break;
case URI:
parameterType.setType(DataType.URI);
break;
}
parameterType.setName(parameterType.getType().toString());
parameter.addParameterValue(dataObjectType.getValue());
legacyInputParameters.add(parameter);
}
List<OutputDataObjectType> applicationOutputs = applicationInterface.getApplicationOutputs();
for (OutputDataObjectType dataObjectType : applicationOutputs) {
OutputParameterType parameter = OutputParameterType.Factory.newInstance();
parameter.setParameterName(dataObjectType.getName());
parameter.setParameterDescription(dataObjectType.getName());
ParameterType parameterType = parameter.addNewParameterType();
switch (dataObjectType.getType()) {
case FLOAT:
parameterType.setType(DataType.FLOAT);
break;
case INTEGER:
parameterType.setType(DataType.INTEGER);
break;
case STRING:
parameterType.setType(DataType.STRING);
break;
case URI:
parameterType.setType(DataType.URI);
break;
}
parameterType.setName(parameterType.getType().toString());
legacyOutputParameters.add(parameter);
}
legacyServiceDescType.setInputParametersArray(legacyInputParameters.toArray(new InputParameterType[]{}));
legacyServiceDescType.setOutputParametersArray(legacyOutputParameters.toArray(new OutputParameterType[]{}));
////////////////////----------- HOST DESCRIPTOR -----------------//////////////////////
//Fetch the host description details and fill-in legacy doc
ResourceJobManager resourceJobManager = null;
for (JobSubmissionInterface jobSubmissionInterface : computeResource.getJobSubmissionInterfaces()) {
switch (jobSubmissionInterface.getJobSubmissionProtocol()) {
case LOCAL:
legacyHostDescription = new HostDescription();
LOCALSubmission localSubmission =
appCatalog.getComputeResource().getLocalJobSubmission(jobSubmissionInterface.getJobSubmissionInterfaceId());
resourceJobManager = localSubmission.getResourceJobManager();
break;
case SSH:
SSHJobSubmission sshJobSubmission =
appCatalog.getComputeResource().getSSHJobSubmission(jobSubmissionInterface.getJobSubmissionInterfaceId());
resourceJobManager = sshJobSubmission.getResourceJobManager();
switch (sshJobSubmission.getSecurityProtocol()) {
case GSI:
legacyHostDescription = new HostDescription(GsisshHostType.type);
((GsisshHostType) legacyHostDescription.getType()).setJobManager
(resourceJobManager.getResourceJobManagerType().name());
((GsisshHostType) legacyHostDescription.getType()).setInstalledPath(resourceJobManager.getJobManagerBinPath());
// applicationDescription.setInstalledParentPath(resourceJobManager.getJobManagerBinPath());
((GsisshHostType) legacyHostDescription.getType()).setPort(sshJobSubmission.getSshPort());
break;
case SSH_KEYS:
legacyHostDescription = new HostDescription(SSHHostType.type);
((SSHHostType) legacyHostDescription.getType()).setHpcResource(true);
break;
default:
legacyHostDescription = new HostDescription(SSHHostType.type);
((SSHHostType) legacyHostDescription.getType()).setHpcResource(true);
break;
}
break;
default:
break;
}
}
HostDescriptionType legacyHostDescType = legacyHostDescription.getType();
legacyHostDescType.setHostName(computeResource.getHostName());
String ipAddress = computeResource.getHostName();
if (computeResource.getIpAddresses() != null && computeResource.getIpAddresses().size() > 0) {
ipAddress = computeResource.getIpAddresses().iterator().next();
} else if (computeResource.getHostAliases() != null && computeResource.getHostAliases().size() > 0) {
ipAddress = computeResource.getHostAliases().iterator().next();
}
legacyHostDescType.setHostAddress(ipAddress);
/////////////////////---------------- APPLICATION DESCRIPTOR ---------------------/////////////////////////
//Fetch deployment information and fill-in legacy doc
if ((legacyHostDescType instanceof GsisshHostType) || (legacyHostDescType instanceof SSHHostType)) {
legacyAppDescription = new ApplicationDescription(HpcApplicationDeploymentType.type);
HpcApplicationDeploymentType legacyHPCAppDescType = (HpcApplicationDeploymentType) legacyAppDescription.getType();
switch (applicationDeployment.getParallelism()) {
case SERIAL:
legacyHPCAppDescType.setJobType(JobTypeType.SERIAL);
break;
case MPI:
legacyHPCAppDescType.setJobType(JobTypeType.MPI);
break;
case OPENMP:
legacyHPCAppDescType.setJobType(JobTypeType.OPEN_MP);
break;
default:
break;
}
//Fetch scheduling information from experiment request
ComputationalResourceScheduling taskSchedule = taskData.getTaskScheduling();
QueueType queueType = legacyHPCAppDescType.addNewQueue();
queueType.setQueueName(taskSchedule.getQueueName());
legacyHPCAppDescType.setCpuCount(taskSchedule.getTotalCPUCount());
legacyHPCAppDescType.setNodeCount(taskSchedule.getNodeCount());
legacyHPCAppDescType.setMaxWallTime(taskSchedule.getWallTimeLimit());
if (resourceJobManager != null) {
legacyHPCAppDescType.setInstalledParentPath(resourceJobManager.getJobManagerBinPath());
if (resourceJobManager.getJobManagerCommands() != null) {
legacyHPCAppDescType.setJobSubmitterCommand(resourceJobManager.getJobManagerCommands().get(JobManagerCommand.SUBMISSION));
}
}
ProjectAccountType projectAccountType = legacyHPCAppDescType.addNewProjectAccount();
if (gatewayResourcePreferences != null) {
projectAccountType.setProjectAccountNumber(gatewayResourcePreferences.getAllocationProjectNumber());
}
} else {
legacyAppDescription = new ApplicationDescription();
}
ApplicationDeploymentDescriptionType legacyAppDescType = legacyAppDescription.getType();
legacyAppDescType.addNewApplicationName().setStringValue(applicationInterface.getApplicationName().replaceAll(" ", "_"));
legacyAppDescType.setExecutableLocation(applicationDeployment.getExecutablePath());
if (gatewayResourcePreferences != null) {
legacyAppDescType.setScratchWorkingDirectory(gatewayResourcePreferences.getScratchLocation());
} else {
legacyAppDescType.setScratchWorkingDirectory("/tmp");
log.warn("Missing gateway resource profile for gateway id '" + gatewayID + "'.");