Search in sources :

Example 1 with Task

use of org.apache.airavata.gfac.core.task.Task in project airavata by apache.

the class Factory method loadConfiguration.

public static void loadConfiguration() throws GFacException {
    GFacYamlConfigruation config = new GFacYamlConfigruation();
    try {
        for (JobSubmitterTaskConfig jobSubmitterTaskConfig : config.getJobSbumitters()) {
            String taskClass = jobSubmitterTaskConfig.getTaskClass();
            Class<?> aClass = Class.forName(taskClass);
            Constructor<?> constructor = aClass.getConstructor();
            JobSubmissionTask task = (JobSubmissionTask) constructor.newInstance();
            task.init(jobSubmitterTaskConfig.getProperties());
            jobSubmissionTask.put(jobSubmitterTaskConfig.getSubmissionProtocol(), task);
        }
        for (DataTransferTaskConfig dataTransferTaskConfig : config.getFileTransferTasks()) {
            String taskClass = dataTransferTaskConfig.getTaskClass();
            Class<?> aClass = Class.forName(taskClass);
            Constructor<?> constructor = aClass.getConstructor();
            Task task = (Task) constructor.newInstance();
            task.init(dataTransferTaskConfig.getProperties());
            dataMovementTask.put(dataTransferTaskConfig.getTransferProtocol(), task);
        }
        for (ResourceConfig resourceConfig : config.getResourceConfiguration()) {
            resources.put(resourceConfig.getJobManagerType(), resourceConfig);
        }
    } catch (Exception e) {
        throw new GFacException("Gfac config issue", e);
    }
    sessionCache = CacheBuilder.newBuilder().expireAfterAccess(ServerSettings.getSessionCacheAccessTimeout(), TimeUnit.MINUTES).removalListener((RemovalListener<String, Session>) removalNotification -> {
        if (removalNotification.getValue().isConnected()) {
            log.info("Disconnecting ssh session with key: " + removalNotification.getKey());
            removalNotification.getValue().disconnect();
        }
        log.info("Removed ssh session with key: " + removalNotification.getKey());
    }).build();
}
Also used : JobSubmitterTaskConfig(org.apache.airavata.gfac.core.config.JobSubmitterTaskConfig) JobManagerConfiguration(org.apache.airavata.gfac.core.JobManagerConfiguration) ArchiveTask(org.apache.airavata.gfac.impl.task.ArchiveTask) ExperimentCatalog(org.apache.airavata.registry.cpi.ExperimentCatalog) JobMonitor(org.apache.airavata.gfac.core.monitor.JobMonitor) LoggerFactory(org.slf4j.LoggerFactory) CancelRequestWatcherImpl(org.apache.airavata.gfac.impl.watcher.CancelRequestWatcherImpl) ResourceJobManagerType(org.apache.airavata.model.appcatalog.computeresource.ResourceJobManagerType) Credential(org.apache.airavata.credential.store.credential.Credential) ServerSettings(org.apache.airavata.common.utils.ServerSettings) Publisher(org.apache.airavata.messaging.core.Publisher) Map(java.util.Map) CredentialStoreException(org.apache.airavata.credential.store.store.CredentialStoreException) SlurmJobConfiguration(org.apache.airavata.gfac.impl.job.SlurmJobConfiguration) MessagingFactory(org.apache.airavata.messaging.core.MessagingFactory) AppCatalogException(org.apache.airavata.registry.cpi.AppCatalogException) ProcessContext(org.apache.airavata.gfac.core.context.ProcessContext) SSHKeyAuthentication(org.apache.airavata.gfac.core.authentication.SSHKeyAuthentication) RabbitMQPublisher(org.apache.airavata.messaging.core.impl.RabbitMQPublisher) UUID(java.util.UUID) HostScheduler(org.apache.airavata.gfac.core.scheduler.HostScheduler) RedeliveryRequestWatcherImpl(org.apache.airavata.gfac.impl.watcher.RedeliveryRequestWatcherImpl) MessageHandler(org.apache.airavata.messaging.core.MessageHandler) AppCatalog(org.apache.airavata.registry.cpi.AppCatalog) List(java.util.List) AuroraJobMonitor(org.apache.airavata.gfac.monitor.cloud.AuroraJobMonitor) CuratorFramework(org.apache.curator.framework.CuratorFramework) RetryPolicy(org.apache.curator.RetryPolicy) RedeliveryRequestWatcher(org.apache.airavata.gfac.core.watcher.RedeliveryRequestWatcher) CacheBuilder(com.google.common.cache.CacheBuilder) SSHCredential(org.apache.airavata.credential.store.credential.impl.ssh.SSHCredential) DataTransferTaskConfig(org.apache.airavata.gfac.core.config.DataTransferTaskConfig) JobSubmitterTaskConfig(org.apache.airavata.gfac.core.config.JobSubmitterTaskConfig) Task(org.apache.airavata.gfac.core.task.Task) CuratorFrameworkFactory(org.apache.curator.framework.CuratorFrameworkFactory) ForkJobConfiguration(org.apache.airavata.gfac.impl.job.ForkJobConfiguration) PBSJobConfiguration(org.apache.airavata.gfac.impl.job.PBSJobConfiguration) Type(org.apache.airavata.messaging.core.Type) DataMovementProtocol(org.apache.airavata.model.data.movement.DataMovementProtocol) HashMap(java.util.HashMap) UGEJobConfiguration(org.apache.airavata.gfac.impl.job.UGEJobConfiguration) Constructor(java.lang.reflect.Constructor) CancelRequestWatcher(org.apache.airavata.gfac.core.watcher.CancelRequestWatcher) ArrayList(java.util.ArrayList) ExponentialBackoffRetry(org.apache.curator.retry.ExponentialBackoffRetry) CredentialReader(org.apache.airavata.credential.store.store.CredentialReader) ResourceJobManager(org.apache.airavata.model.appcatalog.computeresource.ResourceJobManager) JobSubmissionTask(org.apache.airavata.gfac.core.task.JobSubmissionTask) RegistryException(org.apache.airavata.registry.cpi.RegistryException) MonitorMode(org.apache.airavata.model.appcatalog.computeresource.MonitorMode) AiravataException(org.apache.airavata.common.exception.AiravataException) GFacUtils(org.apache.airavata.gfac.core.GFacUtils) LSFJobConfiguration(org.apache.airavata.gfac.impl.job.LSFJobConfiguration) RegistryFactory(org.apache.airavata.registry.core.experiment.catalog.impl.RegistryFactory) ResourceConfig(org.apache.airavata.gfac.core.config.ResourceConfig) Logger(org.slf4j.Logger) GFacException(org.apache.airavata.gfac.core.GFacException) RemoteCluster(org.apache.airavata.gfac.core.cluster.RemoteCluster) GFacYamlConfigruation(org.apache.airavata.gfac.core.config.GFacYamlConfigruation) JobSubmissionProtocol(org.apache.airavata.model.appcatalog.computeresource.JobSubmissionProtocol) EmailBasedMonitor(org.apache.airavata.gfac.monitor.email.EmailBasedMonitor) TimeUnit(java.util.concurrent.TimeUnit) AuthenticationInfo(org.apache.airavata.gfac.core.authentication.AuthenticationInfo) GFacContext(org.apache.airavata.gfac.core.context.GFacContext) GFacEngine(org.apache.airavata.gfac.core.GFacEngine) RemovalListener(com.google.common.cache.RemovalListener) Cache(com.google.common.cache.Cache) ApplicationSettingsException(org.apache.airavata.common.exception.ApplicationSettingsException) OutputParser(org.apache.airavata.gfac.core.cluster.OutputParser) ServerInfo(org.apache.airavata.gfac.core.cluster.ServerInfo) com.jcraft.jsch(com.jcraft.jsch) Subscriber(org.apache.airavata.messaging.core.Subscriber) ArchiveTask(org.apache.airavata.gfac.impl.task.ArchiveTask) Task(org.apache.airavata.gfac.core.task.Task) JobSubmissionTask(org.apache.airavata.gfac.core.task.JobSubmissionTask) CredentialStoreException(org.apache.airavata.credential.store.store.CredentialStoreException) AppCatalogException(org.apache.airavata.registry.cpi.AppCatalogException) RegistryException(org.apache.airavata.registry.cpi.RegistryException) AiravataException(org.apache.airavata.common.exception.AiravataException) GFacException(org.apache.airavata.gfac.core.GFacException) ApplicationSettingsException(org.apache.airavata.common.exception.ApplicationSettingsException) GFacException(org.apache.airavata.gfac.core.GFacException) JobSubmissionTask(org.apache.airavata.gfac.core.task.JobSubmissionTask) ResourceConfig(org.apache.airavata.gfac.core.config.ResourceConfig) DataTransferTaskConfig(org.apache.airavata.gfac.core.config.DataTransferTaskConfig) GFacYamlConfigruation(org.apache.airavata.gfac.core.config.GFacYamlConfigruation)

Example 2 with Task

use of org.apache.airavata.gfac.core.task.Task in project airavata by apache.

the class GFacEngineImpl method outputDataStaging.

/**
 * @param taskContext
 * @param recovery
 * @return <code>true</code> if process execution interrupted , <code>false</code> otherwise.
 * @throws GFacException
 */
private boolean outputDataStaging(TaskContext taskContext, boolean recovery, boolean isArchive) throws GFacException {
    TaskStatus taskStatus = new TaskStatus(TaskState.EXECUTING);
    taskStatus.setTimeOfStateChange(AiravataUtils.getCurrentTimestamp().getTime());
    taskContext.setTaskStatus(taskStatus);
    GFacUtils.saveAndPublishTaskStatus(taskContext);
    ProcessContext processContext = taskContext.getParentProcessContext();
    Task dMoveTask = null;
    if (isArchive) {
        dMoveTask = Factory.getArchiveTask();
    } else {
        dMoveTask = Factory.getDataMovementTask(processContext.getDataMovementProtocol());
    }
    if (null == dMoveTask) {
        throw new GFacException("Unsupported security protocol, Airavata doesn't support " + processContext.getDataMovementProtocol() + " protocol yet.");
    }
    taskStatus = executeTask(taskContext, dMoveTask, recovery);
    taskStatus.setTimeOfStateChange(AiravataUtils.getCurrentTimestamp().getTime());
    taskContext.setTaskStatus(taskStatus);
    GFacUtils.saveAndPublishTaskStatus(taskContext);
    if (taskStatus.getState() == TaskState.FAILED) {
        log.error("expId: {}, processId: {}, taskId: {} type: {},:- output staging failed, " + "reason:" + " {}", taskContext.getParentProcessContext().getExperimentId(), taskContext.getParentProcessContext().getProcessId(), taskContext.getTaskId(), dMoveTask.getType().name(), taskStatus.getReason());
        String errorMsg = new StringBuilder("expId: ").append(processContext.getExperimentId()).append(", processId: ").append(processContext.getProcessId()).append(", taskId: ").append(taskContext.getTaskId()).append(", type: ").append(taskContext.getTaskType().name()).append(" :- Output staging failed. Reason: ").append(taskStatus.getReason()).toString();
        ErrorModel errorModel = new ErrorModel();
        errorModel.setUserFriendlyMessage("Error while staging output data");
        errorModel.setActualErrorMessage(errorMsg);
        GFacUtils.saveTaskError(taskContext, errorModel);
    }
    return false;
}
Also used : DataStreamingTask(org.apache.airavata.gfac.impl.task.DataStreamingTask) Task(org.apache.airavata.gfac.core.task.Task) JobSubmissionTask(org.apache.airavata.gfac.core.task.JobSubmissionTask) EnvironmentSetupTask(org.apache.airavata.gfac.impl.task.EnvironmentSetupTask) GFacException(org.apache.airavata.gfac.core.GFacException) ErrorModel(org.apache.airavata.model.commons.ErrorModel) TaskStatus(org.apache.airavata.model.status.TaskStatus) ProcessContext(org.apache.airavata.gfac.core.context.ProcessContext)

Example 3 with Task

use of org.apache.airavata.gfac.core.task.Task in project airavata by apache.

the class GFacEngineImpl method inputDataStaging.

private boolean inputDataStaging(TaskContext taskContext, boolean recover) throws GFacException, TException {
    TaskStatus taskStatus = new TaskStatus(TaskState.EXECUTING);
    taskStatus.setTimeOfStateChange(AiravataUtils.getCurrentTimestamp().getTime());
    taskContext.setTaskStatus(taskStatus);
    GFacUtils.saveAndPublishTaskStatus(taskContext);
    ProcessContext processContext = taskContext.getParentProcessContext();
    // handle URI_COLLECTION input data type
    Task dMoveTask = Factory.getDataMovementTask(processContext.getDataMovementProtocol());
    if (null == dMoveTask) {
        throw new GFacException("Unsupported security protocol, Airavata doesn't support " + processContext.getDataMovementProtocol() + " protocol yet.");
    }
    if (taskContext.getProcessInput().getType() == DataType.URI_COLLECTION) {
        String values = taskContext.getProcessInput().getValue();
        String[] multiple_inputs = values.split(GFacConstants.MULTIPLE_INPUTS_SPLITTER);
        DataStagingTaskModel subTaskModel = (DataStagingTaskModel) taskContext.getSubTaskModel();
        for (String input : multiple_inputs) {
            taskContext.getProcessInput().setValue(input);
            subTaskModel.setSource(input);
            taskStatus = executeTask(taskContext, dMoveTask, false);
        }
        taskContext.getProcessInput().setValue(values);
    } else {
        taskStatus = executeTask(taskContext, dMoveTask, false);
    }
    taskStatus.setTimeOfStateChange(AiravataUtils.getCurrentTimestamp().getTime());
    taskContext.setTaskStatus(taskStatus);
    GFacUtils.saveAndPublishTaskStatus(taskContext);
    checkFailures(taskContext, taskStatus, dMoveTask);
    return false;
}
Also used : DataStreamingTask(org.apache.airavata.gfac.impl.task.DataStreamingTask) Task(org.apache.airavata.gfac.core.task.Task) JobSubmissionTask(org.apache.airavata.gfac.core.task.JobSubmissionTask) EnvironmentSetupTask(org.apache.airavata.gfac.impl.task.EnvironmentSetupTask) GFacException(org.apache.airavata.gfac.core.GFacException) DataStagingTaskModel(org.apache.airavata.model.task.DataStagingTaskModel) TaskStatus(org.apache.airavata.model.status.TaskStatus) ProcessContext(org.apache.airavata.gfac.core.context.ProcessContext)

Example 4 with Task

use of org.apache.airavata.gfac.core.task.Task in project airavata by apache.

the class GFacEngineImpl method configureWorkspace.

private boolean configureWorkspace(TaskContext taskContext, boolean recover) throws GFacException {
    try {
        EnvironmentSetupTaskModel subTaskModel = (EnvironmentSetupTaskModel) taskContext.getSubTaskModel();
        Task envSetupTask = null;
        if (subTaskModel.getProtocol() == SecurityProtocol.SSH_KEYS || subTaskModel.getProtocol() == SecurityProtocol.LOCAL) {
            envSetupTask = new EnvironmentSetupTask();
        } else {
            throw new GFacException("Unsupported security protocol, Airavata doesn't support " + subTaskModel.getProtocol().name() + " protocol yet.");
        }
        TaskStatus status = new TaskStatus(TaskState.EXECUTING);
        status.setTimeOfStateChange(AiravataUtils.getCurrentTimestamp().getTime());
        taskContext.setTaskStatus(status);
        GFacUtils.saveAndPublishTaskStatus(taskContext);
        TaskStatus taskStatus = executeTask(taskContext, envSetupTask, recover);
        taskStatus.setTimeOfStateChange(AiravataUtils.getCurrentTimestamp().getTime());
        taskContext.setTaskStatus(taskStatus);
        GFacUtils.saveAndPublishTaskStatus(taskContext);
        if (taskStatus.getState() == TaskState.FAILED) {
            log.error("expId: {}, processId: {}, taskId: {} type: {},:- Input staging failed, " + "reason:" + " {}", taskContext.getParentProcessContext().getExperimentId(), taskContext.getParentProcessContext().getProcessId(), taskContext.getTaskId(), envSetupTask.getType().name(), taskStatus.getReason());
            ProcessContext processContext = taskContext.getParentProcessContext();
            String errorMsg = new StringBuilder("expId: ").append(processContext.getExperimentId()).append(", processId: ").append(processContext.getProcessId()).append(", taskId: ").append(taskContext.getTaskId()).append(", type: ").append(taskContext.getTaskType().name()).append(" :- Environment Setup failed. Reason: ").append(taskStatus.getReason()).toString();
            ErrorModel errorModel = new ErrorModel();
            errorModel.setUserFriendlyMessage("Error while environment setup");
            errorModel.setActualErrorMessage(errorMsg);
            GFacUtils.saveTaskError(taskContext, errorModel);
            throw new GFacException("Error while environment setup");
        }
    } catch (TException e) {
        throw new GFacException("Couldn't get environment setup task model", e);
    }
    return false;
}
Also used : TException(org.apache.thrift.TException) EnvironmentSetupTaskModel(org.apache.airavata.model.task.EnvironmentSetupTaskModel) DataStreamingTask(org.apache.airavata.gfac.impl.task.DataStreamingTask) Task(org.apache.airavata.gfac.core.task.Task) JobSubmissionTask(org.apache.airavata.gfac.core.task.JobSubmissionTask) EnvironmentSetupTask(org.apache.airavata.gfac.impl.task.EnvironmentSetupTask) GFacException(org.apache.airavata.gfac.core.GFacException) ErrorModel(org.apache.airavata.model.commons.ErrorModel) TaskStatus(org.apache.airavata.model.status.TaskStatus) EnvironmentSetupTask(org.apache.airavata.gfac.impl.task.EnvironmentSetupTask) ProcessContext(org.apache.airavata.gfac.core.context.ProcessContext)

Aggregations

GFacException (org.apache.airavata.gfac.core.GFacException)4 ProcessContext (org.apache.airavata.gfac.core.context.ProcessContext)4 JobSubmissionTask (org.apache.airavata.gfac.core.task.JobSubmissionTask)4 Task (org.apache.airavata.gfac.core.task.Task)4 DataStreamingTask (org.apache.airavata.gfac.impl.task.DataStreamingTask)3 EnvironmentSetupTask (org.apache.airavata.gfac.impl.task.EnvironmentSetupTask)3 TaskStatus (org.apache.airavata.model.status.TaskStatus)3 Cache (com.google.common.cache.Cache)1 CacheBuilder (com.google.common.cache.CacheBuilder)1 RemovalListener (com.google.common.cache.RemovalListener)1 com.jcraft.jsch (com.jcraft.jsch)1 Constructor (java.lang.reflect.Constructor)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1 UUID (java.util.UUID)1 TimeUnit (java.util.concurrent.TimeUnit)1 AiravataException (org.apache.airavata.common.exception.AiravataException)1 ApplicationSettingsException (org.apache.airavata.common.exception.ApplicationSettingsException)1