Search in sources :

Example 1 with ExperimentStatusChangeEvent

use of org.apache.airavata.model.messaging.event.ExperimentStatusChangeEvent in project airavata by apache.

the class AiravataServerHandler method createExperiment.

/**
 * Create an experiment for the specified user belonging to the gateway. The gateway identity is not explicitly passed
 * but inferred from the authentication header. This experiment is just a persistent place holder. The client
 * has to subsequently configure and launch the created experiment. No action is taken on Airavata Server except
 * registering the experiment in a persistent store.
 *
 * @param experiment@return The server-side generated.airavata.registry.core.experiment.globally unique identifier.
 * @throws org.apache.airavata.model.error.InvalidRequestException For any incorrect forming of the request itself.
 * @throws org.apache.airavata.model.error.AiravataClientException The following list of exceptions are thrown which Airavata Client can take corrective actions to resolve:
 *                                                               <p/>
 *                                                               UNKNOWN_GATEWAY_ID - If a Gateway is not registered with Airavata as a one time administrative
 *                                                               step, then Airavata Registry will not have a provenance area setup. The client has to follow
 *                                                               gateway registration steps and retry this request.
 *                                                               <p/>
 *                                                               AUTHENTICATION_FAILURE - How Authentication will be implemented is yet to be determined.
 *                                                               For now this is a place holder.
 *                                                               <p/>
 *                                                               INVALID_AUTHORIZATION - This will throw an authorization exception. When a more robust security hand-shake
 *                                                               is implemented, the authorization will be more substantial.
 * @throws org.apache.airavata.model.error.AiravataSystemException This exception will be thrown for any Airavata Server side issues and if the problem cannot be corrected by the client
 *                                                               rather an Airavata Administrator will be notified to take corrective action.
 */
@Override
@SecurityCheck
public String createExperiment(AuthzToken authzToken, String gatewayId, ExperimentModel experiment) throws InvalidRequestException, AiravataClientException, AiravataSystemException, AuthorizationException, TException {
    RegistryService.Client regClient = registryClientPool.getResource();
    SharingRegistryService.Client sharingClient = sharingClientPool.getResource();
    try {
        String experimentId = regClient.createExperiment(gatewayId, experiment);
        if (ServerSettings.isEnableSharing()) {
            try {
                Entity entity = new Entity();
                entity.setEntityId(experimentId);
                entity.setDomainId(experiment.getGatewayId());
                entity.setEntityTypeId(experiment.getGatewayId() + ":" + "EXPERIMENT");
                entity.setOwnerId(experiment.getUserName() + "@" + experiment.getGatewayId());
                entity.setName(experiment.getExperimentName());
                entity.setDescription(experiment.getDescription());
                entity.setParentEntityId(experiment.getProjectId());
                sharingClient.createEntity(entity);
            } catch (Exception ex) {
                logger.error(ex.getMessage(), ex);
                logger.error("Rolling back experiment creation Exp ID : " + experimentId);
                regClient.deleteExperiment(experimentId);
                AiravataSystemException ase = new AiravataSystemException();
                ase.setMessage("Failed to create sharing registry record");
                throw ase;
            }
        }
        ExperimentStatusChangeEvent event = new ExperimentStatusChangeEvent(ExperimentState.CREATED, experimentId, gatewayId);
        String messageId = AiravataUtils.getId("EXPERIMENT");
        MessageContext messageContext = new MessageContext(event, MessageType.EXPERIMENT, messageId, gatewayId);
        messageContext.setUpdatedTime(AiravataUtils.getCurrentTimestamp());
        if (statusPublisher != null) {
            statusPublisher.publish(messageContext);
        }
        logger.debug(experimentId, "Created new experiment with experiment name {}", experiment.getExperimentName());
        registryClientPool.returnResource(regClient);
        sharingClientPool.returnResource(sharingClient);
        return experimentId;
    } catch (Exception e) {
        logger.error("Error while creating the experiment with experiment name {}", experiment.getExperimentName());
        AiravataSystemException exception = new AiravataSystemException();
        exception.setAiravataErrorType(AiravataErrorType.INTERNAL_ERROR);
        exception.setMessage("Error while creating the experiment. More info : " + e.getMessage());
        registryClientPool.returnBrokenResource(regClient);
        sharingClientPool.returnBrokenResource(sharingClient);
        throw exception;
    }
}
Also used : SharingRegistryService(org.apache.airavata.sharing.registry.service.cpi.SharingRegistryService) ExperimentStatusChangeEvent(org.apache.airavata.model.messaging.event.ExperimentStatusChangeEvent) MessageContext(org.apache.airavata.messaging.core.MessageContext) RegistryService(org.apache.airavata.registry.api.RegistryService) SharingRegistryService(org.apache.airavata.sharing.registry.service.cpi.SharingRegistryService) RegistryServiceException(org.apache.airavata.registry.api.exception.RegistryServiceException) CredentialStoreException(org.apache.airavata.credential.store.exception.CredentialStoreException) AiravataException(org.apache.airavata.common.exception.AiravataException) TException(org.apache.thrift.TException) ApplicationSettingsException(org.apache.airavata.common.exception.ApplicationSettingsException) SecurityCheck(org.apache.airavata.service.security.interceptor.SecurityCheck)

Example 2 with ExperimentStatusChangeEvent

use of org.apache.airavata.model.messaging.event.ExperimentStatusChangeEvent in project airavata by apache.

the class MessagingFactory method statusRoutingkey.

private static String statusRoutingkey(MessageContext msgCtx) {
    String gatewayId = msgCtx.getGatewayId();
    String routingKey = null;
    if (msgCtx.getType() == MessageType.EXPERIMENT) {
        ExperimentStatusChangeEvent event = (ExperimentStatusChangeEvent) msgCtx.getEvent();
        routingKey = gatewayId + "." + event.getExperimentId();
    } else if (msgCtx.getType() == MessageType.TASK) {
        TaskStatusChangeEvent event = (TaskStatusChangeEvent) msgCtx.getEvent();
        routingKey = gatewayId + "." + event.getTaskIdentity().getExperimentId() + "." + event.getTaskIdentity().getProcessId() + "." + event.getTaskIdentity().getTaskId();
    } else if (msgCtx.getType() == MessageType.PROCESSOUTPUT) {
        TaskOutputChangeEvent event = (TaskOutputChangeEvent) msgCtx.getEvent();
        routingKey = gatewayId + "." + event.getTaskIdentity().getExperimentId() + "." + event.getTaskIdentity().getProcessId() + "." + event.getTaskIdentity().getTaskId();
    } else if (msgCtx.getType() == MessageType.PROCESS) {
        ProcessStatusChangeEvent event = (ProcessStatusChangeEvent) msgCtx.getEvent();
        ProcessIdentifier processIdentifier = event.getProcessIdentity();
        routingKey = gatewayId + "." + processIdentifier.getExperimentId() + "." + processIdentifier.getProcessId();
    } else if (msgCtx.getType() == MessageType.JOB) {
        JobStatusChangeEvent event = (JobStatusChangeEvent) msgCtx.getEvent();
        JobIdentifier identity = event.getJobIdentity();
        routingKey = gatewayId + "." + identity.getExperimentId() + "." + identity.getProcessId() + "." + identity.getTaskId() + "." + identity.getJobId();
    }
    return routingKey;
}
Also used : TaskStatusChangeEvent(org.apache.airavata.model.messaging.event.TaskStatusChangeEvent) TaskOutputChangeEvent(org.apache.airavata.model.messaging.event.TaskOutputChangeEvent) ExperimentStatusChangeEvent(org.apache.airavata.model.messaging.event.ExperimentStatusChangeEvent) JobStatusChangeEvent(org.apache.airavata.model.messaging.event.JobStatusChangeEvent) ProcessStatusChangeEvent(org.apache.airavata.model.messaging.event.ProcessStatusChangeEvent) JobIdentifier(org.apache.airavata.model.messaging.event.JobIdentifier) ProcessIdentifier(org.apache.airavata.model.messaging.event.ProcessIdentifier)

Example 3 with ExperimentStatusChangeEvent

use of org.apache.airavata.model.messaging.event.ExperimentStatusChangeEvent in project airavata by apache.

the class StatusConsumer method handleDelivery.

@Override
public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
    Message message = new Message();
    try {
        ThriftUtils.createThriftFromBytes(body, message);
        TBase event = null;
        String gatewayId = null;
        if (message.getMessageType().equals(MessageType.EXPERIMENT)) {
            ExperimentStatusChangeEvent experimentStatusChangeEvent = new ExperimentStatusChangeEvent();
            ThriftUtils.createThriftFromBytes(message.getEvent(), experimentStatusChangeEvent);
            log.debug(" Message Received with message id '" + message.getMessageId() + "' and with message type '" + message.getMessageType() + "'  with status " + experimentStatusChangeEvent.getState());
            event = experimentStatusChangeEvent;
            gatewayId = experimentStatusChangeEvent.getGatewayId();
        } else if (message.getMessageType().equals(MessageType.PROCESS)) {
            ProcessStatusChangeEvent processStatusChangeEvent = new ProcessStatusChangeEvent();
            ThriftUtils.createThriftFromBytes(message.getEvent(), processStatusChangeEvent);
            log.debug("Message Recieved with message id :" + message.getMessageId() + " and with " + "message type " + message.getMessageType() + " with status " + processStatusChangeEvent.getState());
            event = processStatusChangeEvent;
            gatewayId = processStatusChangeEvent.getProcessIdentity().getGatewayId();
        } else if (message.getMessageType().equals(MessageType.TASK)) {
            TaskStatusChangeEvent taskStatusChangeEvent = new TaskStatusChangeEvent();
            ThriftUtils.createThriftFromBytes(message.getEvent(), taskStatusChangeEvent);
            log.debug(" Message Received with message id '" + message.getMessageId() + "' and with message type '" + message.getMessageType() + "'  with status " + taskStatusChangeEvent.getState());
            event = taskStatusChangeEvent;
            gatewayId = taskStatusChangeEvent.getTaskIdentity().getGatewayId();
        } else if (message.getMessageType() == MessageType.PROCESSOUTPUT) {
            TaskOutputChangeEvent taskOutputChangeEvent = new TaskOutputChangeEvent();
            ThriftUtils.createThriftFromBytes(message.getEvent(), taskOutputChangeEvent);
            log.debug(" Message Received with message id '" + message.getMessageId() + "' and with message type '" + message.getMessageType());
            event = taskOutputChangeEvent;
            gatewayId = taskOutputChangeEvent.getTaskIdentity().getGatewayId();
        } else if (message.getMessageType().equals(MessageType.JOB)) {
            JobStatusChangeEvent jobStatusChangeEvent = new JobStatusChangeEvent();
            ThriftUtils.createThriftFromBytes(message.getEvent(), jobStatusChangeEvent);
            log.debug(" Message Received with message id '" + message.getMessageId() + "' and with message type '" + message.getMessageType() + "'  with status " + jobStatusChangeEvent.getState());
            event = jobStatusChangeEvent;
            gatewayId = jobStatusChangeEvent.getJobIdentity().getGatewayId();
        } else if (message.getMessageType().equals(MessageType.LAUNCHPROCESS)) {
            TaskSubmitEvent taskSubmitEvent = new TaskSubmitEvent();
            ThriftUtils.createThriftFromBytes(message.getEvent(), taskSubmitEvent);
            log.debug(" Message Received with message id '" + message.getMessageId() + "' and with message type '" + message.getMessageType() + "'  for experimentId: " + taskSubmitEvent.getExperimentId() + "and taskId: " + taskSubmitEvent.getTaskId());
            event = taskSubmitEvent;
            gatewayId = taskSubmitEvent.getGatewayId();
        } else if (message.getMessageType().equals(MessageType.TERMINATEPROCESS)) {
            TaskTerminateEvent taskTerminateEvent = new TaskTerminateEvent();
            ThriftUtils.createThriftFromBytes(message.getEvent(), taskTerminateEvent);
            log.debug(" Message Received with message id '" + message.getMessageId() + "' and with message type '" + message.getMessageType() + "'  for experimentId: " + taskTerminateEvent.getExperimentId() + "and taskId: " + taskTerminateEvent.getTaskId());
            event = taskTerminateEvent;
            gatewayId = null;
        }
        MessageContext messageContext = new MessageContext(event, message.getMessageType(), message.getMessageId(), gatewayId);
        messageContext.setUpdatedTime(AiravataUtils.getTime(message.getUpdatedTime()));
        messageContext.setIsRedeliver(envelope.isRedeliver());
        handler.onMessage(messageContext);
    } catch (TException e) {
        String msg = "Failed to de-serialize the thrift message, from routing keys: " + envelope.getRoutingKey();
        log.warn(msg, e);
    }
}
Also used : TException(org.apache.thrift.TException) TaskStatusChangeEvent(org.apache.airavata.model.messaging.event.TaskStatusChangeEvent) Message(org.apache.airavata.model.messaging.event.Message) TaskOutputChangeEvent(org.apache.airavata.model.messaging.event.TaskOutputChangeEvent) ExperimentStatusChangeEvent(org.apache.airavata.model.messaging.event.ExperimentStatusChangeEvent) JobStatusChangeEvent(org.apache.airavata.model.messaging.event.JobStatusChangeEvent) ProcessStatusChangeEvent(org.apache.airavata.model.messaging.event.ProcessStatusChangeEvent) TBase(org.apache.thrift.TBase) MessageContext(org.apache.airavata.messaging.core.MessageContext) TaskSubmitEvent(org.apache.airavata.model.messaging.event.TaskSubmitEvent) TaskTerminateEvent(org.apache.airavata.model.messaging.event.TaskTerminateEvent)

Example 4 with ExperimentStatusChangeEvent

use of org.apache.airavata.model.messaging.event.ExperimentStatusChangeEvent in project airavata by apache.

the class OrchestratorUtils method updageAndPublishExperimentStatus.

public static void updageAndPublishExperimentStatus(String experimentId, ExperimentStatus status, Publisher publisher, String gatewayId) {
    try {
        RegistryFactory.getDefaultExpCatalog().update(ExperimentCatalogModelType.EXPERIMENT_STATUS, status, experimentId);
        ExperimentStatusChangeEvent event = new ExperimentStatusChangeEvent(status.getState(), experimentId, gatewayId);
        String messageId = AiravataUtils.getId("EXPERIMENT");
        MessageContext messageContext = new MessageContext(event, MessageType.EXPERIMENT, messageId, gatewayId);
        messageContext.setUpdatedTime(AiravataUtils.getCurrentTimestamp());
        publisher.publish(messageContext);
    } catch (RegistryException e) {
        log.error("expId : " + experimentId + " Error while updating experiment status to " + status.toString(), e);
    } catch (AiravataException e) {
        log.error("expId : " + experimentId + " Error while publishing experiment status to " + status.toString(), e);
    }
}
Also used : ExperimentStatusChangeEvent(org.apache.airavata.model.messaging.event.ExperimentStatusChangeEvent) MessageContext(org.apache.airavata.messaging.core.MessageContext) RegistryException(org.apache.airavata.registry.cpi.RegistryException) AiravataException(org.apache.airavata.common.exception.AiravataException)

Example 5 with ExperimentStatusChangeEvent

use of org.apache.airavata.model.messaging.event.ExperimentStatusChangeEvent in project airavata by apache.

the class EventData method process.

private void process(MessageContext event) {
    this.messageId = event.getMessageId();
    if (event.getType() == MessageType.EXPERIMENT) {
        ExperimentStatusChangeEvent experimentStatusChangeEvent = (ExperimentStatusChangeEvent) event.getEvent();
        this.status = experimentStatusChangeEvent.getState().toString();
        this.experimentId = experimentStatusChangeEvent.getExperimentId();
        this.workflowNodeId = "";
        this.message = "Received experiment event , expId : " + experimentStatusChangeEvent.getExperimentId() + ", status : " + experimentStatusChangeEvent.getState().toString();
    } else if (event.getType() == MessageType.WORKFLOWNODE) {
        WorkflowNodeStatusChangeEvent wfnStatusChangeEvent = (WorkflowNodeStatusChangeEvent) event.getEvent();
        WorkflowIdentifier wfIdentifier = wfnStatusChangeEvent.getWorkflowNodeIdentity();
        this.status = wfnStatusChangeEvent.getState().toString();
        this.experimentId = wfIdentifier.getExperimentId();
        this.workflowNodeId = wfIdentifier.getWorkflowNodeId();
        this.message = "Received workflow status change event, expId : " + wfIdentifier.getExperimentId() + ", nodeId : " + wfIdentifier.getWorkflowNodeId() + " , status : " + wfnStatusChangeEvent.getState().toString();
    } else if (event.getType() == MessageType.TASK) {
        TaskStatusChangeEvent taskStatusChangeEvent = (TaskStatusChangeEvent) event.getEvent();
        TaskIdentifier taskIdentifier = taskStatusChangeEvent.getTaskIdentity();
        this.status = taskStatusChangeEvent.getState().toString();
        this.experimentId = taskIdentifier.getExperimentId();
        this.workflowNodeId = taskIdentifier.getWorkflowNodeId();
        this.message = "Received task event , expId : " + taskIdentifier.getExperimentId() + ",taskId : " + taskIdentifier.getTaskId() + ", wfNodeId : " + taskIdentifier.getWorkflowNodeId() + ", status : " + taskStatusChangeEvent.getState().toString();
    } else if (event.getType() == MessageType.JOB) {
        JobStatusChangeEvent jobStatusChangeEvent = (JobStatusChangeEvent) event.getEvent();
        JobIdentifier jobIdentifier = jobStatusChangeEvent.getJobIdentity();
        this.status = jobStatusChangeEvent.getState().toString();
        this.experimentId = jobIdentifier.getExperimentId();
        this.workflowNodeId = jobIdentifier.getWorkflowNodeId();
        this.message = "Received task event , expId : " + jobIdentifier.getExperimentId() + " ,taskId : " + jobIdentifier.getTaskId() + ", wfNodeId : " + jobIdentifier.getWorkflowNodeId() + ", status : " + jobStatusChangeEvent.getState().toString();
    }
}
Also used : TaskStatusChangeEvent(org.apache.airavata.model.messaging.event.TaskStatusChangeEvent) WorkflowIdentifier(org.apache.airavata.model.messaging.event.WorkflowIdentifier) TaskIdentifier(org.apache.airavata.model.messaging.event.TaskIdentifier) ExperimentStatusChangeEvent(org.apache.airavata.model.messaging.event.ExperimentStatusChangeEvent) JobStatusChangeEvent(org.apache.airavata.model.messaging.event.JobStatusChangeEvent) JobIdentifier(org.apache.airavata.model.messaging.event.JobIdentifier) WorkflowNodeStatusChangeEvent(org.apache.airavata.model.messaging.event.WorkflowNodeStatusChangeEvent)

Aggregations

ExperimentStatusChangeEvent (org.apache.airavata.model.messaging.event.ExperimentStatusChangeEvent)7 JobStatusChangeEvent (org.apache.airavata.model.messaging.event.JobStatusChangeEvent)5 TaskStatusChangeEvent (org.apache.airavata.model.messaging.event.TaskStatusChangeEvent)4 TException (org.apache.thrift.TException)4 MessageContext (org.apache.airavata.messaging.core.MessageContext)3 TBase (org.apache.thrift.TBase)3 AiravataException (org.apache.airavata.common.exception.AiravataException)2 ApplicationSettingsException (org.apache.airavata.common.exception.ApplicationSettingsException)2 JobIdentifier (org.apache.airavata.model.messaging.event.JobIdentifier)2 ProcessStatusChangeEvent (org.apache.airavata.model.messaging.event.ProcessStatusChangeEvent)2 TaskOutputChangeEvent (org.apache.airavata.model.messaging.event.TaskOutputChangeEvent)2 BufferedWriter (java.io.BufferedWriter)1 File (java.io.File)1 FileOutputStream (java.io.FileOutputStream)1 IOException (java.io.IOException)1 OutputStreamWriter (java.io.OutputStreamWriter)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 ServerSettings (org.apache.airavata.common.utils.ServerSettings)1 ThriftUtils (org.apache.airavata.common.utils.ThriftUtils)1