Search in sources :

Example 1 with FlowConfiguration

use of com.sequenceiq.cloudbreak.core.flow2.config.FlowConfiguration in project cloudbreak by hortonworks.

the class AbstractFlowConfiguration method createFlow.

@Override
public Flow createFlow(String flowId, Long stackId) {
    StateMachine<S, E> sm = stateMachineFactory.getStateMachine();
    FlowStructuredEventHandler<S, E> fl = applicationContext.getBean(FlowStructuredEventHandler.class, getEdgeConfig().initState, getEdgeConfig().finalState, getClass().getSimpleName(), flowId, stackId);
    Flow flow = new FlowAdapter<>(flowId, sm, new MessageFactory<>(), new StateConverterAdapter<>(stateType), new EventConverterAdapter<>(eventType), (Class<? extends FlowConfiguration<E>>) getClass(), fl);
    sm.addStateListener(fl);
    return flow;
}
Also used : FlowAdapter(com.sequenceiq.cloudbreak.core.flow2.FlowAdapter) Flow(com.sequenceiq.cloudbreak.core.flow2.Flow)

Example 2 with FlowConfiguration

use of com.sequenceiq.cloudbreak.core.flow2.config.FlowConfiguration in project cloudbreak by hortonworks.

the class Flow2Config method flowConfigurationMap.

@Bean
public Map<String, FlowConfiguration<?>> flowConfigurationMap() {
    Map<String, FlowConfiguration<?>> flowConfigMap = new HashMap<>();
    for (FlowConfiguration<?> flowConfig : flowConfigs) {
        for (FlowEvent event : flowConfig.getInitEvents()) {
            String key = event.event();
            if (flowConfigMap.get(key) != null) {
                throw new UnsupportedOperationException("Event already registered: " + key);
            }
            flowConfigMap.put(key, flowConfig);
        }
    }
    return ImmutableMap.copyOf(flowConfigMap);
}
Also used : FlowEvent(com.sequenceiq.cloudbreak.core.flow2.FlowEvent) HashMap(java.util.HashMap) Bean(org.springframework.context.annotation.Bean)

Example 3 with FlowConfiguration

use of com.sequenceiq.cloudbreak.core.flow2.config.FlowConfiguration in project cloudbreak by hortonworks.

the class OfflineStateGenerator method generate.

private void generate() throws Exception {
    StringBuilder builder = new StringBuilder("digraph {\n");
    inject(flowConfiguration, "applicationContext", APP_CONTEXT);
    Flow flow = initializeFlow();
    StateMachine<FlowState, FlowEvent> stateMachine = getStateMachine(flow);
    FlowState init = stateMachine.getInitialState().getId();
    builder.append(generateStartPoint(init, flowConfiguration.getClass().getSimpleName())).append('\n');
    List<Transition<FlowState, FlowEvent>> transitions = (List<Transition<FlowState, FlowEvent>>) stateMachine.getTransitions();
    Map<String, FlowState> transitionsAlreadyDefined = new HashMap<>();
    transitionsAlreadyDefined.put(init.toString(), init);
    while (!transitions.isEmpty()) {
        for (Transition<FlowState, FlowEvent> transition : new ArrayList<>(transitions)) {
            FlowState source = transition.getSource().getId();
            FlowState target = transition.getTarget().getId();
            if (transitionsAlreadyDefined.values().contains(source)) {
                String id = generateTransitionId(source, target, transition.getTrigger().getEvent());
                if (!transitionsAlreadyDefined.keySet().contains(id)) {
                    if (target.action() != null && !transitionsAlreadyDefined.values().contains(target)) {
                        builder.append(generateState(target, target.action().getSimpleName())).append('\n');
                    }
                    builder.append(generateTransition(source, target, transition.getTrigger().getEvent())).append('\n');
                    transitionsAlreadyDefined.put(id, target);
                }
                transitions.remove(transition);
            }
        }
    }
    saveToFile(builder.append('}').toString());
}
Also used : FlowState(com.sequenceiq.cloudbreak.core.flow2.FlowState) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) Flow(com.sequenceiq.cloudbreak.core.flow2.Flow) FlowEvent(com.sequenceiq.cloudbreak.core.flow2.FlowEvent) Transition(org.springframework.statemachine.transition.Transition) List(java.util.List) ArrayList(java.util.ArrayList)

Example 4 with FlowConfiguration

use of com.sequenceiq.cloudbreak.core.flow2.config.FlowConfiguration in project cloudbreak by hortonworks.

the class OfflineStateGenerator method initializeFlow.

private Flow initializeFlow() throws Exception {
    ((AbstractFlowConfiguration<?, ?>) flowConfiguration).init();
    Flow flow = flowConfiguration.createFlow("", 0L);
    flow.initialize();
    return flow;
}
Also used : AbstractFlowConfiguration(com.sequenceiq.cloudbreak.core.flow2.config.AbstractFlowConfiguration) Flow(com.sequenceiq.cloudbreak.core.flow2.Flow)

Example 5 with FlowConfiguration

use of com.sequenceiq.cloudbreak.core.flow2.config.FlowConfiguration in project cloudbreak by hortonworks.

the class Flow2ConfigTest method testFlowConfigurationMapInit.

@Test
public void testFlowConfigurationMapInit() {
    List<FlowConfiguration<?>> flowConfigs = new ArrayList<>();
    flowConfigs.add(new StackSyncFlowConfig());
    flowConfigs.add(new StackTerminationFlowConfig());
    given(this.flowConfigs.iterator()).willReturn(flowConfigs.iterator());
    Map<String, FlowConfiguration<?>> flowConfigMap = underTest.flowConfigurationMap();
    assertEquals("Not all flow type appeared in map!", countEvents(flowConfigs), flowConfigMap.size());
}
Also used : StackSyncFlowConfig(com.sequenceiq.cloudbreak.core.flow2.stack.sync.StackSyncFlowConfig) StackTerminationFlowConfig(com.sequenceiq.cloudbreak.core.flow2.stack.termination.StackTerminationFlowConfig) ArrayList(java.util.ArrayList) Test(org.junit.Test)

Aggregations

StackSyncFlowConfig (com.sequenceiq.cloudbreak.core.flow2.stack.sync.StackSyncFlowConfig)4 ArrayList (java.util.ArrayList)4 Flow (com.sequenceiq.cloudbreak.core.flow2.Flow)3 StackTerminationFlowConfig (com.sequenceiq.cloudbreak.core.flow2.stack.termination.StackTerminationFlowConfig)3 Test (org.junit.Test)3 FlowEvent (com.sequenceiq.cloudbreak.core.flow2.FlowEvent)2 HashMap (java.util.HashMap)2 List (java.util.List)2 Consumer (reactor.fn.Consumer)2 JsonReader (com.cedarsoftware.util.io.JsonReader)1 Acceptable (com.sequenceiq.cloudbreak.cloud.Acceptable)1 Payload (com.sequenceiq.cloudbreak.cloud.event.Payload)1 FlowAdapter (com.sequenceiq.cloudbreak.core.flow2.FlowAdapter)1 FlowState (com.sequenceiq.cloudbreak.core.flow2.FlowState)1 FlowChainHandler (com.sequenceiq.cloudbreak.core.flow2.chain.FlowChainHandler)1 FlowChains (com.sequenceiq.cloudbreak.core.flow2.chain.FlowChains)1 ClusterDownscaleFlowConfig (com.sequenceiq.cloudbreak.core.flow2.cluster.downscale.ClusterDownscaleFlowConfig)1 ClusterCreationFlowConfig (com.sequenceiq.cloudbreak.core.flow2.cluster.provision.ClusterCreationFlowConfig)1 ChangePrimaryGatewayFlowConfig (com.sequenceiq.cloudbreak.core.flow2.cluster.repair.ChangePrimaryGatewayFlowConfig)1 ClusterResetFlowConfig (com.sequenceiq.cloudbreak.core.flow2.cluster.reset.ClusterResetFlowConfig)1