Search in sources :

Example 11 with Action

use of com.netflix.conductor.common.metadata.events.EventHandler.Action in project conductor by Netflix.

the class TestSimpleEventProcessor method testExecuteNonRetriableApplicationException.

@Test
public void testExecuteNonRetriableApplicationException() {
    AtomicInteger executeInvoked = new AtomicInteger(0);
    doAnswer((Answer<Map<String, Object>>) invocation -> {
        executeInvoked.incrementAndGet();
        throw new ApplicationException(ApplicationException.Code.INVALID_INPUT, "some non-retriable error");
    }).when(actionProcessor).execute(any(), any(), any(), any());
    SimpleEventProcessor eventProcessor = new SimpleEventProcessor(executionService, metadataService, actionProcessor, eventQueues, jsonUtils, new TestConfiguration(), objectMapper);
    EventExecution eventExecution = new EventExecution("id", "messageId");
    eventExecution.setStatus(EventExecution.Status.IN_PROGRESS);
    eventExecution.setEvent("event");
    eventExecution.setName("handler");
    Action action = new Action();
    action.setAction(Type.start_workflow);
    eventExecution.setAction(Type.start_workflow);
    eventProcessor.execute(eventExecution, action, "payload");
    assertEquals(1, executeInvoked.get());
    assertEquals(EventExecution.Status.FAILED, eventExecution.getStatus());
    assertNotNull(eventExecution.getOutput().get("exception"));
}
Also used : ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) MetadataService(com.netflix.conductor.service.MetadataService) TestConfiguration(com.netflix.conductor.core.execution.TestConfiguration) ArgumentMatchers.eq(org.mockito.ArgumentMatchers.eq) Action(com.netflix.conductor.common.metadata.events.EventHandler.Action) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) ArgumentMatchers.anyMap(org.mockito.ArgumentMatchers.anyMap) HashMap(java.util.HashMap) Task(com.netflix.conductor.common.metadata.tasks.Task) StartWorkflow(com.netflix.conductor.common.metadata.events.EventHandler.StartWorkflow) Observable(rx.Observable) ParametersUtils(com.netflix.conductor.core.execution.ParametersUtils) JsonUtils(com.netflix.conductor.core.utils.JsonUtils) LinkedHashMap(java.util.LinkedHashMap) Answer(org.mockito.stubbing.Answer) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) Workflow(com.netflix.conductor.common.run.Workflow) Mockito.doAnswer(org.mockito.Mockito.doAnswer) Map(java.util.Map) WorkflowExecutor(com.netflix.conductor.core.execution.WorkflowExecutor) EventExecution(com.netflix.conductor.common.metadata.events.EventExecution) Before(org.junit.Before) ApplicationException(com.netflix.conductor.core.execution.ApplicationException) Message(com.netflix.conductor.core.events.queue.Message) Uninterruptibles(com.google.common.util.concurrent.Uninterruptibles) Assert.assertNotNull(org.junit.Assert.assertNotNull) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) Assert.assertTrue(org.junit.Assert.assertTrue) WorkflowDef(com.netflix.conductor.common.metadata.workflow.WorkflowDef) Test(org.junit.Test) Mockito.when(org.mockito.Mockito.when) EventHandler(com.netflix.conductor.common.metadata.events.EventHandler) UUID(java.util.UUID) Type(com.netflix.conductor.common.metadata.events.EventHandler.Action.Type) Mockito.verify(org.mockito.Mockito.verify) TimeUnit(java.util.concurrent.TimeUnit) Mockito.never(org.mockito.Mockito.never) Assert.assertNull(org.junit.Assert.assertNull) Mockito.atMost(org.mockito.Mockito.atMost) TaskDetails(com.netflix.conductor.common.metadata.events.EventHandler.TaskDetails) ExecutionService(com.netflix.conductor.service.ExecutionService) JsonMapperProvider(com.netflix.conductor.common.utils.JsonMapperProvider) ObservableQueue(com.netflix.conductor.core.events.queue.ObservableQueue) Collections(java.util.Collections) Assert.assertEquals(org.junit.Assert.assertEquals) Mockito.mock(org.mockito.Mockito.mock) Action(com.netflix.conductor.common.metadata.events.EventHandler.Action) ApplicationException(com.netflix.conductor.core.execution.ApplicationException) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) EventExecution(com.netflix.conductor.common.metadata.events.EventExecution) TestConfiguration(com.netflix.conductor.core.execution.TestConfiguration) ArgumentMatchers.anyMap(org.mockito.ArgumentMatchers.anyMap) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) Map(java.util.Map) Test(org.junit.Test)

Example 12 with Action

use of com.netflix.conductor.common.metadata.events.EventHandler.Action in project conductor by Netflix.

the class TestSimpleEventProcessor method testEventProcessorWithNonRetriableError.

@Test
public void testEventProcessorWithNonRetriableError() {
    EventHandler eventHandler = new EventHandler();
    eventHandler.setName(UUID.randomUUID().toString());
    eventHandler.setActive(true);
    eventHandler.setEvent(event);
    Action completeTaskAction = new Action();
    completeTaskAction.setAction(Type.complete_task);
    completeTaskAction.setComplete_task(new TaskDetails());
    completeTaskAction.getComplete_task().setTaskRefName("task_x");
    completeTaskAction.getComplete_task().setWorkflowId(UUID.randomUUID().toString());
    completeTaskAction.getComplete_task().setOutput(new HashMap<>());
    eventHandler.getActions().add(completeTaskAction);
    when(metadataService.getAllEventHandlers()).thenReturn(Collections.singletonList(eventHandler));
    when(metadataService.getEventHandlersForEvent(event, true)).thenReturn(Collections.singletonList(eventHandler));
    when(executionService.addEventExecution(any())).thenReturn(true);
    when(actionProcessor.execute(any(), any(), any(), any())).thenThrow(new ApplicationException(ApplicationException.Code.INVALID_INPUT, "some non-retriable error"));
    SimpleEventProcessor eventProcessor = new SimpleEventProcessor(executionService, metadataService, actionProcessor, eventQueues, jsonUtils, new TestConfiguration(), objectMapper);
    assertNotNull(eventProcessor.getQueues());
    assertEquals(1, eventProcessor.getQueues().size());
    Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
    verify(queue, atMost(1)).ack(any());
    verify(queue, never()).publish(any());
}
Also used : Action(com.netflix.conductor.common.metadata.events.EventHandler.Action) ApplicationException(com.netflix.conductor.core.execution.ApplicationException) TaskDetails(com.netflix.conductor.common.metadata.events.EventHandler.TaskDetails) TestConfiguration(com.netflix.conductor.core.execution.TestConfiguration) EventHandler(com.netflix.conductor.common.metadata.events.EventHandler) Test(org.junit.Test)

Example 13 with Action

use of com.netflix.conductor.common.metadata.events.EventHandler.Action in project conductor by Netflix.

the class SimpleEventProcessor method executeActionsForEventHandler.

/**
 * @param eventHandler the {@link EventHandler} for which the actions are to be executed
 * @param msg          the {@link Message} that triggered the event
 * @return a {@link CompletableFuture} holding a list of {@link EventExecution}s for the {@link Action}s executed in the event handler
 */
protected CompletableFuture<List<EventExecution>> executeActionsForEventHandler(EventHandler eventHandler, Message msg) {
    List<CompletableFuture<EventExecution>> futuresList = new ArrayList<>();
    int i = 0;
    for (Action action : eventHandler.getActions()) {
        String id = msg.getId() + "_" + i++;
        EventExecution eventExecution = new EventExecution(id, msg.getId());
        eventExecution.setCreated(System.currentTimeMillis());
        eventExecution.setEvent(eventHandler.getEvent());
        eventExecution.setName(eventHandler.getName());
        eventExecution.setAction(action.getAction());
        eventExecution.setStatus(Status.IN_PROGRESS);
        if (executionService.addEventExecution(eventExecution)) {
            futuresList.add(CompletableFuture.supplyAsync(() -> execute(eventExecution, action, getPayloadObject(msg.getPayload())), executorService));
        } else {
            logger.warn("Duplicate delivery/execution of message: {}", msg.getId());
        }
    }
    return CompletableFutures.allAsList(futuresList);
}
Also used : CompletableFuture(java.util.concurrent.CompletableFuture) Action(com.netflix.conductor.common.metadata.events.EventHandler.Action) EventExecution(com.netflix.conductor.common.metadata.events.EventExecution) ArrayList(java.util.ArrayList)

Aggregations

Action (com.netflix.conductor.common.metadata.events.EventHandler.Action)13 Test (org.junit.Test)12 StartWorkflow (com.netflix.conductor.common.metadata.events.EventHandler.StartWorkflow)9 TaskDetails (com.netflix.conductor.common.metadata.events.EventHandler.TaskDetails)9 EventHandler (com.netflix.conductor.common.metadata.events.EventHandler)8 Task (com.netflix.conductor.common.metadata.tasks.Task)7 WorkflowDef (com.netflix.conductor.common.metadata.workflow.WorkflowDef)7 ApplicationException (com.netflix.conductor.core.execution.ApplicationException)7 TestConfiguration (com.netflix.conductor.core.execution.TestConfiguration)7 HashMap (java.util.HashMap)7 Map (java.util.Map)7 ArgumentMatchers.anyMap (org.mockito.ArgumentMatchers.anyMap)7 EventExecution (com.netflix.conductor.common.metadata.events.EventExecution)6 Workflow (com.netflix.conductor.common.run.Workflow)6 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)5 Uninterruptibles (com.google.common.util.concurrent.Uninterruptibles)5 Type (com.netflix.conductor.common.metadata.events.EventHandler.Action.Type)5 JsonMapperProvider (com.netflix.conductor.common.utils.JsonMapperProvider)5 Message (com.netflix.conductor.core.events.queue.Message)5 ObservableQueue (com.netflix.conductor.core.events.queue.ObservableQueue)5