Search in sources :

Example 16 with Flow

use of com.sequenceiq.flow.core.Flow in project cloudbreak by hortonworks.

the class SdxCreateActions method failedAction.

@Bean(name = "SDX_CREATION_FAILED_STATE")
public Action<?, ?> failedAction() {
    return new AbstractSdxAction<>(SdxCreateFailedEvent.class) {

        @Override
        protected SdxContext createFlowContext(FlowParameters flowParameters, StateContext<FlowState, FlowEvent> stateContext, SdxCreateFailedEvent payload) {
            return SdxContext.from(flowParameters, payload);
        }

        @Override
        protected void doExecute(SdxContext context, SdxCreateFailedEvent payload, Map<Object, Object> variables) throws Exception {
            Exception exception = payload.getException();
            String statusReason = "Datalake creation failed";
            String errorMessage = webApplicationExceptionMessageExtractor.getErrorMessage(exception);
            if (StringUtils.hasText(errorMessage)) {
                statusReason = statusReason + ". " + errorMessage;
            } else if (exception.getMessage() != null) {
                statusReason = statusReason + ". " + exception.getMessage();
            }
            LOGGER.error(statusReason, exception);
            try {
                SdxCluster sdxCluster = sdxStatusService.setStatusForDatalakeAndNotify(DatalakeStatusEnum.PROVISIONING_FAILED, statusReason, payload.getResourceId());
                metricService.incrementMetricCounter(MetricType.SDX_CREATION_FAILED, sdxCluster);
                eventSenderService.notifyEvent(context, ResourceEvent.SDX_CLUSTER_CREATION_FAILED);
            } catch (NotFoundException notFoundException) {
                LOGGER.info("Can not set status to SDX_CREATION_FAILED because data lake was not found");
            } catch (DatalakeStatusUpdateException datalakeStatusUpdateException) {
                LOGGER.info("Status update for data lake failed (possible reason: ongoing parallel deletion flow): {}", exception.getMessage());
            }
            Flow flow = getFlow(context.getFlowParameters().getFlowId());
            flow.setFlowFailed(payload.getException());
            sendEvent(context, SDX_CREATE_FAILED_HANDLED_EVENT.event(), payload);
        }

        @Override
        protected Object getFailurePayload(SdxCreateFailedEvent payload, Optional<SdxContext> flowContext, Exception ex) {
            return null;
        }
    };
}
Also used : Optional(java.util.Optional) StateContext(org.springframework.statemachine.StateContext) NotFoundException(com.sequenceiq.cloudbreak.common.exception.NotFoundException) DatalakeStatusUpdateException(com.sequenceiq.datalake.service.sdx.status.DatalakeStatusUpdateException) DatalakeStatusUpdateException(com.sequenceiq.datalake.service.sdx.status.DatalakeStatusUpdateException) NotFoundException(com.sequenceiq.cloudbreak.common.exception.NotFoundException) SdxContext(com.sequenceiq.datalake.flow.SdxContext) Flow(com.sequenceiq.flow.core.Flow) FlowParameters(com.sequenceiq.flow.core.FlowParameters) AbstractSdxAction(com.sequenceiq.datalake.service.AbstractSdxAction) SdxCreateFailedEvent(com.sequenceiq.datalake.flow.create.event.SdxCreateFailedEvent) SdxCluster(com.sequenceiq.datalake.entity.SdxCluster) Map(java.util.Map) Bean(org.springframework.context.annotation.Bean)

Example 17 with Flow

use of com.sequenceiq.flow.core.Flow in project cloudbreak by hortonworks.

the class ClusterUpgradeValidationActions method clusterUpgradeValidationFailed.

@Bean(name = "CLUSTER_UPGRADE_VALIDATION_FAILED_STATE")
public Action<?, ?> clusterUpgradeValidationFailed() {
    return new AbstractAction<ClusterUpgradeValidationState, ClusterUpgradeValidationStateSelectors, ClusterUpgradeContext, ClusterUpgradeValidationFailureEvent>(ClusterUpgradeValidationFailureEvent.class) {

        @Inject
        private CloudbreakMessagesService messagesService;

        @Inject
        private StackUpdater stackUpdater;

        @Override
        protected ClusterUpgradeContext createFlowContext(FlowParameters flowParameters, StateContext<ClusterUpgradeValidationState, ClusterUpgradeValidationStateSelectors> stateContext, ClusterUpgradeValidationFailureEvent payload) {
            StackView stackView = stackService.getViewByIdWithoutAuth(payload.getResourceId());
            MDCBuilder.buildMdcContext(stackView);
            Flow flow = getFlow(flowParameters.getFlowId());
            flow.setFlowFailed(payload.getException());
            return ClusterUpgradeContext.from(flowParameters, payload);
        }

        @Override
        protected void doExecute(ClusterUpgradeContext context, ClusterUpgradeValidationFailureEvent payload, Map<Object, Object> variables) {
            String errorMessage = payload.getException().getMessage();
            Long resourceId = payload.getResourceId();
            LOGGER.debug("Cluster upgrade validation failed with validation error: {}", errorMessage);
            ResourceEvent validationFailedResourceEvent = ResourceEvent.CLUSTER_UPGRADE_VALIDATION_FAILED;
            cloudbreakEventService.fireCloudbreakEvent(resourceId, UPDATE_FAILED.name(), validationFailedResourceEvent, List.of(errorMessage));
            String reason = messagesService.getMessage(validationFailedResourceEvent.getMessage(), List.of(errorMessage));
            stackUpdater.updateStackStatus(resourceId, DetailedStackStatus.AVAILABLE, reason);
            sendEvent(context, HANDLED_FAILED_CLUSTER_UPGRADE_VALIDATION_EVENT.event(), payload);
        }

        @Override
        protected Object getFailurePayload(ClusterUpgradeValidationFailureEvent payload, Optional<ClusterUpgradeContext> flowContext, Exception ex) {
            LOGGER.warn("No failure payload in case of CLUSTER_UPGRADE_VALIDATION_FAILED_STATE. This should not happen.", ex);
            return null;
        }

        @Override
        protected void initPayloadConverterMap(List<PayloadConverter<ClusterUpgradeValidationFailureEvent>> payloadConverters) {
            payloadConverters.add(new ClusterUpgradeUpdateCheckFailedToClusterUpgradeValidationFailureEvent());
        }
    };
}
Also used : StackUpdater(com.sequenceiq.cloudbreak.service.StackUpdater) ClusterUpgradeContext(com.sequenceiq.cloudbreak.core.flow2.cluster.datalake.upgrade.ClusterUpgradeContext) Optional(java.util.Optional) StateContext(org.springframework.statemachine.StateContext) CloudbreakImageCatalogException(com.sequenceiq.cloudbreak.core.CloudbreakImageCatalogException) CloudbreakImageNotFoundException(com.sequenceiq.cloudbreak.core.CloudbreakImageNotFoundException) Flow(com.sequenceiq.flow.core.Flow) FlowParameters(com.sequenceiq.flow.core.FlowParameters) ResourceEvent(com.sequenceiq.cloudbreak.event.ResourceEvent) List(java.util.List) ClusterUpgradeUpdateCheckFailedToClusterUpgradeValidationFailureEvent(com.sequenceiq.cloudbreak.core.flow2.cluster.datalake.upgrade.validation.config.ClusterUpgradeUpdateCheckFailedToClusterUpgradeValidationFailureEvent) CloudbreakMessagesService(com.sequenceiq.cloudbreak.message.CloudbreakMessagesService) StackView(com.sequenceiq.cloudbreak.domain.view.StackView) AbstractAction(com.sequenceiq.flow.core.AbstractAction) Map(java.util.Map) ClusterUpgradeValidationFailureEvent(com.sequenceiq.cloudbreak.core.flow2.cluster.datalake.upgrade.validation.event.ClusterUpgradeValidationFailureEvent) ClusterUpgradeUpdateCheckFailedToClusterUpgradeValidationFailureEvent(com.sequenceiq.cloudbreak.core.flow2.cluster.datalake.upgrade.validation.config.ClusterUpgradeUpdateCheckFailedToClusterUpgradeValidationFailureEvent) Bean(org.springframework.context.annotation.Bean)

Example 18 with Flow

use of com.sequenceiq.flow.core.Flow in project cloudbreak by hortonworks.

the class CmSyncActions method cmSyncFailedAction.

@Bean(name = "CM_SYNC_FAILED_STATE")
public Action<?, ?> cmSyncFailedAction() {
    return new AbstractStackFailureAction<CmSyncState, CmSyncEvent>() {

        @Override
        protected void doExecute(StackFailureContext context, StackFailureEvent payload, Map<Object, Object> variables) {
            LOGGER.warn("Error during executing syncing Cloudera Manager and parcels versions from CM.", payload.getException());
            flowMessageService.fireEventAndLog(context.getStackView().getId(), EVENT_TYPE, ResourceEvent.STACK_SYNC_VERSIONS_FROM_CM_TO_DB_FAILED, payload.getException().getMessage());
            Flow flow = getFlow(context.getFlowParameters().getFlowId());
            flow.setFlowFailed(payload.getException());
            sendEvent(context);
        }

        @Override
        protected Selectable createRequest(StackFailureContext context) {
            return new StackEvent(CmSyncEvent.CM_SYNC_FAIL_HANDLED_EVENT.event(), context.getStackView().getId());
        }
    };
}
Also used : AbstractStackFailureAction(com.sequenceiq.cloudbreak.core.flow2.stack.AbstractStackFailureAction) StackEvent(com.sequenceiq.cloudbreak.reactor.api.event.StackEvent) StackFailureEvent(com.sequenceiq.cloudbreak.reactor.api.event.StackFailureEvent) StackFailureContext(com.sequenceiq.cloudbreak.core.flow2.stack.StackFailureContext) Map(java.util.Map) Flow(com.sequenceiq.flow.core.Flow) Bean(org.springframework.context.annotation.Bean)

Example 19 with Flow

use of com.sequenceiq.flow.core.Flow in project cloudbreak by hortonworks.

the class DatabaseRestoreActions method databaseRestoreFailedAction.

@Bean(name = "DATABASE_RESTORE_FAILED_STATE")
public Action<?, ?> databaseRestoreFailedAction() {
    return new AbstractBackupRestoreActions<>(DatabaseRestoreFailedEvent.class) {

        @Override
        protected BackupRestoreContext createFlowContext(FlowParameters flowParameters, StateContext<FlowState, FlowEvent> stateContext, DatabaseRestoreFailedEvent payload) {
            Flow flow = getFlow(flowParameters.getFlowId());
            flow.setFlowFailed(payload.getException());
            return BackupRestoreContext.from(flowParameters, payload, null, null, true);
        }

        @Override
        protected void doExecute(BackupRestoreContext context, DatabaseRestoreFailedEvent payload, Map<Object, Object> variables) {
            backupRestoreStatusService.handleDatabaseRestoreFailure(context.getStackId(), payload.getException().getMessage(), payload.getDetailedStatus());
            sendEvent(context, DATABASE_RESTORE_FAIL_HANDLED_EVENT.event(), payload);
        }
    };
}
Also used : FlowParameters(com.sequenceiq.flow.core.FlowParameters) DatabaseRestoreFailedEvent(com.sequenceiq.cloudbreak.reactor.api.event.cluster.dr.restore.DatabaseRestoreFailedEvent) StateContext(org.springframework.statemachine.StateContext) AbstractBackupRestoreActions(com.sequenceiq.cloudbreak.core.flow2.cluster.datalake.dr.AbstractBackupRestoreActions) Map(java.util.Map) BackupRestoreContext(com.sequenceiq.cloudbreak.core.flow2.cluster.datalake.dr.BackupRestoreContext) Flow(com.sequenceiq.flow.core.Flow) Bean(org.springframework.context.annotation.Bean)

Example 20 with Flow

use of com.sequenceiq.flow.core.Flow in project cloudbreak by hortonworks.

the class DatabaseBackupActions method databaseBackupFailedAction.

@Bean(name = "DATABASE_BACKUP_FAILED_STATE")
public Action<?, ?> databaseBackupFailedAction() {
    return new AbstractBackupRestoreActions<>(DatabaseBackupFailedEvent.class) {

        @Override
        protected BackupRestoreContext createFlowContext(FlowParameters flowParameters, StateContext<FlowState, FlowEvent> stateContext, DatabaseBackupFailedEvent payload) {
            Flow flow = getFlow(flowParameters.getFlowId());
            flow.setFlowFailed(payload.getException());
            return BackupRestoreContext.from(flowParameters, payload, null, null, true);
        }

        @Override
        protected void doExecute(BackupRestoreContext context, DatabaseBackupFailedEvent payload, Map<Object, Object> variables) {
            backupRestoreStatusService.handleDatabaseBackupFailure(context.getStackId(), payload.getException().getMessage(), payload.getDetailedStatus());
            sendEvent(context, DATABASE_BACKUP_FAIL_HANDLED_EVENT.event(), payload);
        }
    };
}
Also used : FlowParameters(com.sequenceiq.flow.core.FlowParameters) StateContext(org.springframework.statemachine.StateContext) AbstractBackupRestoreActions(com.sequenceiq.cloudbreak.core.flow2.cluster.datalake.dr.AbstractBackupRestoreActions) DatabaseBackupFailedEvent(com.sequenceiq.cloudbreak.reactor.api.event.cluster.dr.backup.DatabaseBackupFailedEvent) Map(java.util.Map) BackupRestoreContext(com.sequenceiq.cloudbreak.core.flow2.cluster.datalake.dr.BackupRestoreContext) Flow(com.sequenceiq.flow.core.Flow) Bean(org.springframework.context.annotation.Bean)

Aggregations

Flow (com.sequenceiq.flow.core.Flow)37 Map (java.util.Map)30 Bean (org.springframework.context.annotation.Bean)30 FlowParameters (com.sequenceiq.flow.core.FlowParameters)28 StateContext (org.springframework.statemachine.StateContext)28 Optional (java.util.Optional)12 SdxContext (com.sequenceiq.datalake.flow.SdxContext)8 AbstractSdxAction (com.sequenceiq.datalake.service.AbstractSdxAction)8 StackEvent (com.sequenceiq.cloudbreak.reactor.api.event.StackEvent)7 StackView (com.sequenceiq.cloudbreak.domain.view.StackView)6 Stack (com.sequenceiq.freeipa.entity.Stack)6 ExternalDatabaseContext (com.sequenceiq.cloudbreak.core.flow2.externaldatabase.ExternalDatabaseContext)4 StackFailureContext (com.sequenceiq.cloudbreak.core.flow2.stack.StackFailureContext)4 SdxCluster (com.sequenceiq.datalake.entity.SdxCluster)4 List (java.util.List)4 AbstractStackFailureAction (com.sequenceiq.cloudbreak.core.flow2.stack.AbstractStackFailureAction)3 StackFailureEvent (com.sequenceiq.cloudbreak.reactor.api.event.StackFailureEvent)3 OperationService (com.sequenceiq.freeipa.service.operation.OperationService)3 CloudStack (com.sequenceiq.cloudbreak.cloud.model.CloudStack)2 CancellationException (com.sequenceiq.cloudbreak.cloud.scheduler.CancellationException)2