airavata-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From chath...@apache.org
Subject [01/51] [abbrv] airavata git commit: adding task creation at orchestrartor level
Date Tue, 03 Nov 2015 19:47:26 GMT
Repository: airavata
Updated Branches:
  refs/heads/master e61cb8bbc -> ef332fcba


http://git-wip-us.apache.org/repos/asf/airavata/blob/14b7bcf9/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/utils/OrchestratorUtils.java
----------------------------------------------------------------------
diff --git a/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/utils/OrchestratorUtils.java
b/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/utils/OrchestratorUtils.java
index 5af7f53..9f71288 100644
--- a/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/utils/OrchestratorUtils.java
+++ b/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/core/utils/OrchestratorUtils.java
@@ -21,12 +21,23 @@
 package org.apache.airavata.orchestrator.core.utils;
 
 import java.io.IOException;
-import java.util.Arrays;
+import java.util.*;
 
 import org.apache.airavata.common.exception.ApplicationSettingsException;
 import org.apache.airavata.common.utils.ServerSettings;
+import org.apache.airavata.gfac.core.context.ProcessContext;
+import org.apache.airavata.model.appcatalog.computeresource.*;
+import org.apache.airavata.model.appcatalog.gatewayprofile.ComputeResourcePreference;
+import org.apache.airavata.model.appcatalog.gatewayprofile.DataStoragePreference;
+import org.apache.airavata.model.process.ProcessModel;
 import org.apache.airavata.orchestrator.core.OrchestratorConfiguration;
+import org.apache.airavata.orchestrator.core.context.OrchestratorContext;
 import org.apache.airavata.orchestrator.core.exception.OrchestratorException;
+import org.apache.airavata.registry.core.experiment.catalog.impl.RegistryFactory;
+import org.apache.airavata.registry.cpi.AppCatalog;
+import org.apache.airavata.registry.cpi.AppCatalogException;
+import org.apache.airavata.registry.cpi.GwyResourceProfile;
+import org.apache.airavata.registry.cpi.RegistryException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -48,4 +59,146 @@ public class OrchestratorUtils {
         }
         return orchestratorConfiguration;
     }
+
+    public static JobSubmissionProtocol getPreferredJobSubmissionProtocol(OrchestratorContext
context, ProcessModel model, String gatewayId) throws RegistryException {
+        try {
+            GwyResourceProfile gatewayProfile = context.getRegistry().getAppCatalog().getGatewayProfile();
+            String resourceHostId = model.getComputeResourceId();
+            ComputeResourcePreference preference = gatewayProfile.getComputeResourcePreference(gatewayId
+                    , resourceHostId);
+            return preference.getPreferredJobSubmissionProtocol();
+        } catch (AppCatalogException e) {
+            logger.error("Error occurred while initializing app catalog", e);
+            throw new RegistryException("Error occurred while initializing app catalog",
e);
+        }
+    }
+
+    public static ComputeResourcePreference getComputeResourcePreference(OrchestratorContext
context, ProcessModel processModel, String gatewayId) throws RegistryException {
+        try {
+            GwyResourceProfile gatewayProfile = context.getRegistry().getAppCatalog().getGatewayProfile();
+            String resourceHostId = processModel.getComputeResourceId();
+            return gatewayProfile.getComputeResourcePreference(gatewayId, resourceHostId);
+        } catch (AppCatalogException e) {
+            logger.error("Error occurred while initializing app catalog", e);
+            throw new RegistryException("Error occurred while initializing app catalog",
e);
+        }
+    }
+
+    public static DataStoragePreference getDateStoragePreference(OrchestratorContext context,
ProcessModel processModel, String gatewayId) throws RegistryException {
+        try {
+            GwyResourceProfile gatewayProfile = context.getRegistry().getAppCatalog().getGatewayProfile();
+            String resourceHostId = processModel.getComputeResourceId();
+            return gatewayProfile.getDataStoragePreference(gatewayId, resourceHostId);
+        } catch (AppCatalogException e) {
+            logger.error("Error occurred while initializing app catalog", e);
+            throw new RegistryException("Error occurred while initializing app catalog",
e);
+        }
+    }
+
+    public static JobSubmissionInterface getPreferredJobSubmissionInterface(OrchestratorContext
context, ProcessModel processModel, String gatewayId) throws RegistryException {
+        try {
+            String resourceHostId = processModel.getComputeResourceId();
+            ComputeResourcePreference resourcePreference = getComputeResourcePreference(context,
processModel, gatewayId);
+            JobSubmissionProtocol preferredJobSubmissionProtocol = resourcePreference.getPreferredJobSubmissionProtocol();
+            ComputeResourceDescription resourceDescription = context.getRegistry().getAppCatalog().getComputeResource().getComputeResource(resourceHostId);
+            List<JobSubmissionInterface> jobSubmissionInterfaces = resourceDescription.getJobSubmissionInterfaces();
+            Map<JobSubmissionProtocol, List<JobSubmissionInterface>> orderedInterfaces
= new HashMap<>();
+            List<JobSubmissionInterface> interfaces = new ArrayList<>();
+            if (jobSubmissionInterfaces != null && !jobSubmissionInterfaces.isEmpty())
{
+                for (JobSubmissionInterface submissionInterface : jobSubmissionInterfaces){
+
+                    if (preferredJobSubmissionProtocol != null){
+                        if (preferredJobSubmissionProtocol.toString().equals(submissionInterface.getJobSubmissionProtocol().toString())){
+                            if (orderedInterfaces.containsKey(submissionInterface.getJobSubmissionProtocol())){
+                                List<JobSubmissionInterface> interfaceList = orderedInterfaces.get(submissionInterface.getJobSubmissionProtocol());
+                                interfaceList.add(submissionInterface);
+                            }else {
+                                interfaces.add(submissionInterface);
+                                orderedInterfaces.put(submissionInterface.getJobSubmissionProtocol(),
interfaces);
+                            }
+                        }
+                    }else {
+                        Collections.sort(jobSubmissionInterfaces, new Comparator<JobSubmissionInterface>()
{
+                            @Override
+                            public int compare(JobSubmissionInterface jobSubmissionInterface,
JobSubmissionInterface jobSubmissionInterface2) {
+                                return jobSubmissionInterface.getPriorityOrder() - jobSubmissionInterface2.getPriorityOrder();
+                            }
+                        });
+                    }
+                }
+                interfaces = orderedInterfaces.get(preferredJobSubmissionProtocol);
+                Collections.sort(interfaces, new Comparator<JobSubmissionInterface>()
{
+                    @Override
+                    public int compare(JobSubmissionInterface jobSubmissionInterface, JobSubmissionInterface
jobSubmissionInterface2) {
+                        return jobSubmissionInterface.getPriorityOrder() - jobSubmissionInterface2.getPriorityOrder();
+                    }
+                });
+            } else {
+                throw new RegistryException("Compute resource should have at least one job
submission interface defined...");
+            }
+            return interfaces.get(0);
+        } catch (AppCatalogException e) {
+            throw new RegistryException("Error occurred while retrieving data from app catalog",
e);
+        }
+    }
+
+    public static SecurityProtocol getSecurityProtocol(OrchestratorContext context, ProcessModel
processModel, String gatewayId) throws RegistryException{
+        try {
+            JobSubmissionProtocol submissionProtocol = getPreferredJobSubmissionProtocol(context,
processModel, gatewayId);
+            JobSubmissionInterface jobSubmissionInterface = getPreferredJobSubmissionInterface(context,
processModel, gatewayId);
+            if (submissionProtocol == JobSubmissionProtocol.SSH ) {
+                SSHJobSubmission sshJobSubmission = getSSHJobSubmission(context, jobSubmissionInterface.getJobSubmissionInterfaceId());
+                if (sshJobSubmission != null) {
+                    return sshJobSubmission.getSecurityProtocol();
+                }
+            } else if (submissionProtocol == JobSubmissionProtocol.LOCAL) {
+                LOCALSubmission localJobSubmission = getLocalJobSubmission(context, jobSubmissionInterface.getJobSubmissionInterfaceId());
+                if (localJobSubmission != null) {
+                    return localJobSubmission.getSecurityProtocol();
+                }
+            } else if (submissionProtocol == JobSubmissionProtocol.SSH_FORK){
+                SSHJobSubmission sshJobSubmission = getSSHJobSubmission(context, jobSubmissionInterface.getJobSubmissionInterfaceId());
+                if (sshJobSubmission != null) {
+                    return sshJobSubmission.getSecurityProtocol();
+                }
+            }
+        } catch (RegistryException e) {
+            logger.error("Error occurred while retrieving security protocol", e);
+        }
+        return null;
+    }
+
+    public static LOCALSubmission getLocalJobSubmission(OrchestratorContext context, String
submissionId) throws RegistryException {
+        try {
+            AppCatalog appCatalog = context.getRegistry().getAppCatalog();
+            return appCatalog.getComputeResource().getLocalJobSubmission(submissionId);
+        } catch (Exception e) {
+            String errorMsg = "Error while retrieving local job submission with submission
id : " + submissionId;
+            logger.error(errorMsg, e);
+            throw new RegistryException(errorMsg, e);
+        }
+    }
+
+    public static UnicoreJobSubmission getUnicoreJobSubmission(OrchestratorContext context,
String submissionId) throws RegistryException {
+        try {
+            AppCatalog appCatalog = context.getRegistry().getAppCatalog();
+            return appCatalog.getComputeResource().getUNICOREJobSubmission(submissionId);
+        } catch (Exception e) {
+            String errorMsg = "Error while retrieving UNICORE job submission with submission
id : " + submissionId;
+            logger.error(errorMsg, e);
+            throw new RegistryException(errorMsg, e);
+        }
+    }
+
+    public static SSHJobSubmission getSSHJobSubmission(OrchestratorContext context, String
submissionId) throws RegistryException {
+        try {
+            AppCatalog appCatalog = context.getRegistry().getAppCatalog();
+            return appCatalog.getComputeResource().getSSHJobSubmission(submissionId);
+        } catch (Exception e) {
+            String errorMsg = "Error while retrieving SSH job submission with submission
id : " + submissionId;
+            logger.error(errorMsg, e);
+            throw new RegistryException(errorMsg, e);
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/14b7bcf9/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/cpi/impl/SimpleOrchestratorImpl.java
----------------------------------------------------------------------
diff --git a/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/cpi/impl/SimpleOrchestratorImpl.java
b/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/cpi/impl/SimpleOrchestratorImpl.java
index c0fcd70..b892a00 100644
--- a/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/cpi/impl/SimpleOrchestratorImpl.java
+++ b/modules/orchestrator/orchestrator-core/src/main/java/org/apache/airavata/orchestrator/cpi/impl/SimpleOrchestratorImpl.java
@@ -20,8 +20,21 @@
 */
 package org.apache.airavata.orchestrator.cpi.impl;
 
-import org.apache.airavata.model.appcatalog.computeresource.BatchQueue;
-import org.apache.airavata.model.appcatalog.computeresource.ComputeResourceDescription;
+import org.apache.airavata.common.utils.AiravataUtils;
+import org.apache.airavata.common.utils.ThriftUtils;
+import org.apache.airavata.gfac.core.GFacException;
+import org.apache.airavata.gfac.core.GFacUtils;
+import org.apache.airavata.gfac.core.cluster.ServerInfo;
+import org.apache.airavata.gfac.core.context.ProcessContext;
+import org.apache.airavata.gfac.core.context.TaskContext;
+import org.apache.airavata.gfac.core.task.Task;
+import org.apache.airavata.gfac.core.task.TaskException;
+import org.apache.airavata.model.appcatalog.computeresource.*;
+import org.apache.airavata.model.appcatalog.gatewayprofile.ComputeResourcePreference;
+import org.apache.airavata.model.appcatalog.gatewayprofile.DataStoragePreference;
+import org.apache.airavata.model.application.io.DataType;
+import org.apache.airavata.model.application.io.InputDataObjectType;
+import org.apache.airavata.model.application.io.OutputDataObjectType;
 import org.apache.airavata.model.commons.ErrorModel;
 import org.apache.airavata.model.error.LaunchValidationException;
 import org.apache.airavata.model.error.ValidationResults;
@@ -29,20 +42,27 @@ import org.apache.airavata.model.error.ValidatorResult;
 import org.apache.airavata.model.process.ProcessModel;
 import org.apache.airavata.model.experiment.*;
 import org.apache.airavata.model.scheduling.ComputationalResourceSchedulingModel;
-import org.apache.airavata.model.task.TaskModel;
+import org.apache.airavata.model.status.ProcessState;
+import org.apache.airavata.model.status.ProcessStatus;
+import org.apache.airavata.model.status.TaskState;
+import org.apache.airavata.model.status.TaskStatus;
+import org.apache.airavata.model.task.*;
 import org.apache.airavata.model.util.ExperimentModelUtil;
 import org.apache.airavata.orchestrator.core.exception.OrchestratorException;
 import org.apache.airavata.orchestrator.core.impl.GFACPassiveJobSubmitter;
 import org.apache.airavata.orchestrator.core.job.JobSubmitter;
+import org.apache.airavata.orchestrator.core.utils.OrchestratorUtils;
 import org.apache.airavata.orchestrator.core.validator.JobMetadataValidator;
 import org.apache.airavata.registry.cpi.*;
 import org.apache.airavata.registry.cpi.utils.Constants;
+import org.apache.thrift.TException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.List;
+import java.io.File;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.*;
 import java.util.concurrent.ExecutorService;
 
 public class SimpleOrchestratorImpl extends AbstractOrchestrator{
@@ -234,7 +254,7 @@ public class SimpleOrchestratorImpl extends AbstractOrchestrator{
 
     }
 
-    public List<ProcessModel> createProcesses (String experimentId) throws OrchestratorException
{
+    public List<ProcessModel> createProcesses (String experimentId, String gatewayId)
throws OrchestratorException {
         List<ProcessModel> processModels = new ArrayList<ProcessModel>();
         try {
             Registry registry = orchestratorContext.getRegistry();
@@ -257,13 +277,10 @@ public class SimpleOrchestratorImpl extends AbstractOrchestrator{
         return processModels;
     }
 
-    public List<TaskModel> createTasks (String experimentId, String processId) throws
OrchestratorException {
-        List<TaskModel> taskModels = new ArrayList<TaskModel>();
+    public void createAndSaveTasks (String gatewayId, ExperimentModel experimentModel, ProcessModel
processModel) throws OrchestratorException {
         try {
             ExperimentCatalog experimentCatalog = orchestratorContext.getRegistry().getExperimentCatalog();
             AppCatalog appCatalog = orchestratorContext.getRegistry().getAppCatalog();
-            ExperimentModel experimentModel = (ExperimentModel)experimentCatalog.get(ExperimentCatalogModelType.EXPERIMENT,
experimentId);
-            ProcessModel processModel = (ProcessModel)experimentCatalog.get(ExperimentCatalogModelType.PROCESS,
processId);
             boolean autoSchedule = experimentModel.getUserConfigurationData().isAiravataAutoSchedule();
             ComputationalResourceSchedulingModel resourceSchedule = processModel.getResourceSchedule();
             String userGivenQueueName = resourceSchedule.getQueueName();
@@ -273,21 +290,123 @@ public class SimpleOrchestratorImpl extends AbstractOrchestrator{
                 throw new OrchestratorException("Compute Resource Id cannot be null at this
point");
             }
             ComputeResourceDescription computeResource = appCatalog.getComputeResource().getComputeResource(resourceHostId);
-            List<BatchQueue> definedBatchQueues = computeResource.getBatchQueues();
-            for (BatchQueue batchQueue : definedBatchQueues){
-                if (batchQueue.getQueueName().equals(userGivenQueueName)){
-                    int maxRunTime = batchQueue.getMaxRunTime();
-                    if (maxRunTime < userGivenWallTime){
-                        // need to create more job submissions
+
+            createAndSaveEnvSetupTask(gatewayId, processModel, experimentCatalog);
+            createAndSaveDataStagingTasks(processModel);
+            if (autoSchedule){
+                List<BatchQueue> definedBatchQueues = computeResource.getBatchQueues();
+                for (BatchQueue batchQueue : definedBatchQueues){
+                    if (batchQueue.getQueueName().equals(userGivenQueueName)){
+                        int maxRunTime = batchQueue.getMaxRunTime();
+                        if (maxRunTime < userGivenWallTime){
+                            // need to create more job submissions
+                            int i = (int)maxRunTime / userGivenWallTime;
+                            for (int k=0; k < i; i++){
+                                createAndSaveJobSubmissionTask(processModel);
+                            }
+                        }else {
+                            createAndSaveJobSubmissionTask(processModel);
+                        }
                     }
                 }
             }
-
-
         } catch (Exception e) {
             throw new OrchestratorException("Error during creating process");
         }
-        return taskModels;
     }
 
+    private void createAndSaveEnvSetupTask(String gatewayId, ProcessModel processModel, ExperimentCatalog
experimentCatalog) throws RegistryException, TException {
+        TaskModel envSetupTask = new TaskModel();
+        envSetupTask.setTaskType(TaskTypes.ENV_SETUP);
+        envSetupTask.setTaskStatus(new TaskStatus(TaskState.CREATED));
+        envSetupTask.setCreationTime(AiravataUtils.getCurrentTimestamp().getTime());
+        envSetupTask.setParentProcessId(processModel.getProcessId());
+        EnvironmentSetupTaskModel envSetupSubModel = new EnvironmentSetupTaskModel();
+        envSetupSubModel.setProtocol(OrchestratorUtils.getSecurityProtocol(orchestratorContext,
processModel, gatewayId));
+        ComputeResourcePreference computeResourcePreference = OrchestratorUtils.getComputeResourcePreference(orchestratorContext,
processModel, gatewayId);
+        String scratchLocation = computeResourcePreference.getScratchLocation();
+        String workingDir = scratchLocation + File.separator + processModel.getProcessId();
+        envSetupSubModel.setLocation(workingDir);
+        byte[] envSetupSub = ThriftUtils.serializeThriftObject(envSetupSubModel);
+        envSetupTask.setSubTaskModel(envSetupSub);
+        String envSetupTaskId = (String)experimentCatalog.add(ExpCatChildDataType.TASK, envSetupTask,
processModel.getProcessId());
+        envSetupTask.setTaskId(envSetupTaskId);
+    }
+
+    public void createAndSaveDataStagingTasks (ProcessModel processModel) throws RegistryException{
+        List<InputDataObjectType> processInputs = processModel.getProcessInputs();
+        sortByInputOrder(processInputs);
+        if (processInputs != null) {
+            for (InputDataObjectType processInput : processInputs) {
+                DataType type = processInput.getType();
+                switch (type) {
+                    case STDERR:
+                        break;
+                    case STDOUT:
+                        break;
+                    case URI:
+                        try {
+                            TaskModel inputDataStagingTask = getInputDataStagingTask(processModel,
processInput);
+                            orchestratorContext.getRegistry().getExperimentCatalog().add(ExpCatChildDataType.TASK,
inputDataStagingTask,
+                                    processModel.getProcessId());
+                        } catch (TException e) {
+                            throw new RegistryException("Error while serializing data staging
sub task model");
+                        }
+                        break;
+                    default:
+                        // nothing to do
+                        break;
+                }
+            }
+        }
+    }
+
+    private void createAndSaveJobSubmissionTask(ProcessModel processModel) throws TException,
RegistryException {
+        TaskModel taskModel = new TaskModel();
+        taskModel.setParentProcessId(processModel.getProcessId());
+        taskModel.setCreationTime(new Date().getTime());
+        taskModel.setLastUpdateTime(taskModel.getCreationTime());
+        TaskStatus taskStatus = new TaskStatus(TaskState.CREATED);
+        taskStatus.setTimeOfStateChange(AiravataUtils.getCurrentTimestamp().getTime());
+        taskModel.setTaskStatus(taskStatus);
+        taskModel.setTaskType(TaskTypes.JOB_SUBMISSION);
+        JobSubmissionTaskModel submissionSubTask = new JobSubmissionTaskModel();
+        submissionSubTask.setMonitorMode(MonitorMode.JOB_EMAIL_NOTIFICATION_MONITOR);
+        byte[] bytes = ThriftUtils.serializeThriftObject(submissionSubTask);
+        taskModel.setSubTaskModel(bytes);
+        orchestratorContext.getRegistry().getExperimentCatalog().add(ExpCatChildDataType.TASK,
taskModel,
+                processModel.getProcessId());
+    }
+
+    private void sortByInputOrder(List<InputDataObjectType> processInputs) {
+        Collections.sort(processInputs, new Comparator<InputDataObjectType>() {
+            @Override
+            public int compare(InputDataObjectType inputDT_1, InputDataObjectType inputDT_2)
{
+                return inputDT_1.getInputOrder() - inputDT_2.getInputOrder();
+            }
+        });
+    }
+
+    private TaskModel getInputDataStagingTask(ProcessModel processModel, InputDataObjectType
processInput) throws RegistryException, TException {
+        // create new task model for this task
+        TaskModel taskModel = new TaskModel();
+        taskModel.setParentProcessId(processModel.getProcessId());
+        taskModel.setCreationTime(AiravataUtils.getCurrentTimestamp().getTime());
+        taskModel.setLastUpdateTime(taskModel.getCreationTime());
+        TaskStatus taskStatus = new TaskStatus(TaskState.CREATED);
+        taskStatus.setTimeOfStateChange(AiravataUtils.getCurrentTimestamp().getTime());
+        taskModel.setTaskStatus(taskStatus);
+        taskModel.setTaskType(TaskTypes.DATA_STAGING);
+        // create data staging sub task model
+        DataStagingTaskModel submodel = new DataStagingTaskModel();
+        submodel.setType(DataStageType.INPUT);
+        submodel.setSource(processInput.getValue());
+        // We don't know destination location at this time, data staging task will set this.
+        // because destination is required field we set dummy destination
+        submodel.setDestination("dummy://temp/file/location");
+        taskModel.setSubTaskModel(ThriftUtils.serializeThriftObject(submodel));
+        return taskModel;
+    }
+
+
 }

http://git-wip-us.apache.org/repos/asf/airavata/blob/14b7bcf9/modules/orchestrator/orchestrator-service/src/main/java/org/apache/airavata/orchestrator/server/OrchestratorServerHandler.java
----------------------------------------------------------------------
diff --git a/modules/orchestrator/orchestrator-service/src/main/java/org/apache/airavata/orchestrator/server/OrchestratorServerHandler.java
b/modules/orchestrator/orchestrator-service/src/main/java/org/apache/airavata/orchestrator/server/OrchestratorServerHandler.java
index 7d158fd..4eb4736 100644
--- a/modules/orchestrator/orchestrator-service/src/main/java/org/apache/airavata/orchestrator/server/OrchestratorServerHandler.java
+++ b/modules/orchestrator/orchestrator-service/src/main/java/org/apache/airavata/orchestrator/server/OrchestratorServerHandler.java
@@ -137,8 +137,12 @@ public class OrchestratorServerHandler implements OrchestratorService.Iface
{
 	public boolean launchExperiment(String experimentId, String gatewayId) throws TException
{
         ExperimentModel experiment = null;
         try {
-            List<ProcessModel> processes = orchestrator.createProcesses(experimentId);
+
+            List<ProcessModel> processes = orchestrator.createProcesses(experimentId,
gatewayId);
             experiment = (ExperimentModel) experimentCatalog.get(ExperimentCatalogModelType.EXPERIMENT,
experimentId);
+            for (ProcessModel processModel : processes){
+                orchestrator.createAndSaveTasks(gatewayId, experiment, processModel);
+            }
             if (experiment == null) {
                 log.error(experimentId, "Error retrieving the Experiment by the given experimentID:
{} ", experimentId);
                 return false;
@@ -268,7 +272,7 @@ public class OrchestratorServerHandler implements OrchestratorService.Iface
{
 	}
 
 	@Override
-	public boolean launchProcess(String processId, String airavataCredStoreToken) throws TException
{
+	public boolean launchProcess(String processId, String airavataCredStoreToken, String gatewayId)
throws TException {
 		try {
 			ProcessModel processModel = (ProcessModel) experimentCatalog.get(
 					ExperimentCatalogModelType.PROCESS, processId);
@@ -392,7 +396,7 @@ public class OrchestratorServerHandler implements OrchestratorService.Iface
{
             try {
                 List<String> processIds = experimentCatalog.getIds(ExperimentCatalogModelType.PROCESS,
AbstractExpCatResource.ProcessConstants.EXPERIMENT_ID, experimentId);
                 for (String processId : processIds) {
-                    launchProcess(processId, airavataCredStoreToken);
+                    launchProcess(processId, airavataCredStoreToken, gatewayId);
                 }
 
             } catch (Exception e) {

http://git-wip-us.apache.org/repos/asf/airavata/blob/14b7bcf9/thrift-interface-descriptions/airavata-api/compute_resource_model.thrift
----------------------------------------------------------------------
diff --git a/thrift-interface-descriptions/airavata-api/compute_resource_model.thrift b/thrift-interface-descriptions/airavata-api/compute_resource_model.thrift
index 163ff97..6517fe8 100644
--- a/thrift-interface-descriptions/airavata-api/compute_resource_model.thrift
+++ b/thrift-interface-descriptions/airavata-api/compute_resource_model.thrift
@@ -173,7 +173,8 @@ enum SecurityProtocol {
     SSH_KEYS,
     GSI,
     KERBEROS,
-    OAUTH
+    OAUTH,
+    LOCAL
 }
 
 /**
@@ -293,7 +294,8 @@ struct UnicoreDataMovement {
 */
 struct LOCALSubmission {
     1: required string jobSubmissionInterfaceId = airavata_commons.DEFAULT_ID,
-    2: required ResourceJobManager resourceJobManager
+    2: required SecurityProtocol securityProtocol,
+    3: required ResourceJobManager resourceJobManager
 }
 
 /**

http://git-wip-us.apache.org/repos/asf/airavata/blob/14b7bcf9/thrift-interface-descriptions/orchestrator-cpi/orchestrator.cpi.service.thrift
----------------------------------------------------------------------
diff --git a/thrift-interface-descriptions/orchestrator-cpi/orchestrator.cpi.service.thrift
b/thrift-interface-descriptions/orchestrator-cpi/orchestrator.cpi.service.thrift
index 94ccec9..f775306 100644
--- a/thrift-interface-descriptions/orchestrator-cpi/orchestrator.cpi.service.thrift
+++ b/thrift-interface-descriptions/orchestrator-cpi/orchestrator.cpi.service.thrift
@@ -55,7 +55,7 @@ service OrchestratorService {
      * @return sucess/failure
      *
     **/
-  bool launchProcess (1: required string processId, 2: required string airavataCredStoreToken),
+  bool launchProcess (1: required string processId, 2: required string airavataCredStoreToken,
3: required string gatewayId),
 
     /**
      *


Mime
View raw message