use of com.netflix.conductor.common.metadata.tasks.PollData in project conductor by Netflix.
the class PostgresExecutionDAO method getAllPollData.
@Override
public List<PollData> getAllPollData() {
try (Connection tx = dataSource.getConnection()) {
boolean previousAutoCommitMode = tx.getAutoCommit();
tx.setAutoCommit(true);
try {
String GET_ALL_POLL_DATA = "SELECT json_data FROM poll_data ORDER BY queue_name";
return query(tx, GET_ALL_POLL_DATA, q -> q.executeAndFetch(PollData.class));
} catch (Throwable th) {
throw new ApplicationException(BACKEND_ERROR, th.getMessage(), th);
} finally {
tx.setAutoCommit(previousAutoCommitMode);
}
} catch (SQLException ex) {
throw new ApplicationException(BACKEND_ERROR, ex.getMessage(), ex);
}
}
use of com.netflix.conductor.common.metadata.tasks.PollData in project conductor by Netflix.
the class AbstractWorkflowServiceTest method testSimpleWorkflowWithTaskSpecificDomain.
@Test
public void testSimpleWorkflowWithTaskSpecificDomain() throws Exception {
long startTimeTimestamp = System.currentTimeMillis();
clearWorkflows();
createWorkflowWithSubWorkflow();
metadataService.getWorkflowDef(LINEAR_WORKFLOW_T1_T2_SW, 1);
String correlationId = "unit_test_sw";
Map<String, Object> input = new HashMap<>();
String inputParam1 = "p1 value";
input.put("param1", inputParam1);
input.put("param2", "p2 value");
Map<String, String> taskToDomain = new HashMap<>();
taskToDomain.put("junit_task_3", "domain1");
taskToDomain.put("junit_task_2", "domain1");
// Poll before so that a polling for this task is "active"
Task task = workflowExecutionService.poll("junit_task_3", "task1.junit.worker", "domain1");
assertNull(task);
task = workflowExecutionService.poll("junit_task_2", "task1.junit.worker", "domain1");
assertNull(task);
String workflowId = startOrLoadWorkflowExecution("simpleWorkflowWithTaskSpecificDomain", LINEAR_WORKFLOW_T1_T2_SW, 1, correlationId, input, null, taskToDomain);
assertNotNull(workflowId);
Workflow workflow = workflowExecutor.getWorkflow(workflowId, false);
assertNotNull(workflow);
workflow = workflowExecutionService.getExecutionStatus(workflowId, true);
assertNotNull(workflow);
assertEquals(workflow.getReasonForIncompletion(), RUNNING, workflow.getStatus());
assertEquals(RUNNING, workflow.getStatus());
// The very first task is the one that should be scheduled.
assertEquals(1, workflow.getTasks().size());
// Check Size
Map<String, Integer> sizes = workflowExecutionService.getTaskQueueSizes(Arrays.asList("domain1:junit_task_3", "junit_task_3"));
assertEquals(sizes.get("domain1:junit_task_3").intValue(), 1);
assertEquals(sizes.get("junit_task_3").intValue(), 0);
// Polling for the first task
task = workflowExecutionService.poll("junit_task_3", "task1.junit.worker");
assertNull(task);
task = workflowExecutionService.poll("junit_task_3", "task1.junit.worker", "domain1");
assertNotNull(task);
assertEquals("junit_task_3", task.getTaskType());
assertTrue(workflowExecutionService.ackTaskReceived(task.getTaskId()));
assertEquals(workflowId, task.getWorkflowInstanceId());
workflow = workflowExecutionService.getExecutionStatus(workflowId, true);
assertNotNull(workflow);
List<Task> tasks = workflowExecutionService.getTasks(task.getTaskType(), null, 10);
assertNotNull(tasks);
assertEquals(1, tasks.size());
task = tasks.get(0);
assertEquals(workflowId, task.getWorkflowInstanceId());
String task1Op = "task1.Done";
task.getOutputData().put("op", task1Op);
task.setStatus(COMPLETED);
workflowExecutionService.updateTask(task);
workflow = workflowExecutionService.getExecutionStatus(workflowId, true);
assertNotNull(workflow);
assertEquals(RUNNING, workflow.getStatus());
// Simulating SystemTaskWorkerCoordinator to execute async system tasks
String subWorkflowTaskId = workflow.getTaskByRefName("sw1").getTaskId();
workflowExecutor.executeSystemTask(dummySubWorkflowSystemTask, subWorkflowTaskId, 1);
task = workflowExecutionService.poll("junit_task_1", "task1.junit.worker");
assertNotNull(task);
assertEquals("junit_task_1", task.getTaskType());
workflow = workflowExecutionService.getExecutionStatus(workflowId, false);
assertTrue(workflowExecutionService.ackTaskReceived(task.getTaskId()));
assertNotNull(workflow.getTaskToDomain());
assertEquals(workflow.getTaskToDomain().size(), 2);
task.setStatus(COMPLETED);
task.setReasonForIncompletion("unit test failure");
workflowExecutionService.updateTask(task);
task = workflowExecutionService.poll("junit_task_2", "task2.junit.worker", "domain1");
assertNotNull(task);
assertEquals("junit_task_2", task.getTaskType());
assertTrue(workflowExecutionService.ackTaskReceived(task.getTaskId()));
task.setStatus(COMPLETED);
task.setReasonForIncompletion("unit test failure");
workflowExecutionService.updateTask(task);
// Execute again to re-evaluate the Subworkflow task.
workflowExecutor.executeSystemTask(dummySubWorkflowSystemTask, subWorkflowTaskId, 1);
workflow = workflowExecutionService.getExecutionStatus(workflowId, true);
assertNotNull(workflow);
assertEquals(WorkflowStatus.COMPLETED, workflow.getStatus());
tasks = workflow.getTasks();
assertNotNull(tasks);
assertEquals(2, tasks.size());
assertTrue("Found " + workflow.getOutput().toString(), workflow.getOutput().containsKey("o3"));
assertEquals("task1.Done", workflow.getOutput().get("o3"));
Predicate<PollData> pollDataWithinTestTimes = pollData -> pollData.getLastPollTime() != 0 && pollData.getLastPollTime() > startTimeTimestamp;
List<PollData> pollData = workflowExecutionService.getPollData("junit_task_3").stream().filter(pollDataWithinTestTimes).collect(Collectors.toList());
assertEquals(2, pollData.size());
for (PollData pd : pollData) {
assertEquals(pd.getQueueName(), "junit_task_3");
assertEquals(pd.getWorkerId(), "task1.junit.worker");
assertTrue(pd.getLastPollTime() != 0);
if (pd.getDomain() != null) {
assertEquals(pd.getDomain(), "domain1");
}
}
List<PollData> pdList = workflowExecutionService.getAllPollData().stream().filter(pollDataWithinTestTimes).collect(Collectors.toList());
int count = 0;
for (PollData pd : pdList) {
if (pd.getQueueName().equals("junit_task_3")) {
count++;
}
}
assertEquals(2, count);
}
use of com.netflix.conductor.common.metadata.tasks.PollData in project conductor by Netflix.
the class TestWorkflowExecutor method testDefaultDomain.
@Test
public void testDefaultDomain() {
String taskType = "test-task";
String[] domains = new String[] { "domain1", "domain2", "NO_DOMAIN" };
PollData pollData1 = new PollData("queue1", domains[0], "worker1", System.currentTimeMillis() - 99 * 10000);
when(executionDAOFacade.getTaskPollDataByDomain(taskType, domains[0])).thenReturn(pollData1);
when(executionDAOFacade.getTaskPollDataByDomain(taskType, domains[1])).thenReturn(null);
String activeDomain = workflowExecutor.getActiveDomain(taskType, domains);
assertNull(activeDomain);
}
use of com.netflix.conductor.common.metadata.tasks.PollData in project conductor by Netflix.
the class TestWorkflowExecutor method testGetActiveDomain.
@Test
public void testGetActiveDomain() {
String taskType = "test-task";
String[] domains = new String[] { "domain1", "domain2" };
PollData pollData1 = new PollData("queue1", domains[0], "worker1", System.currentTimeMillis() - 99 * 1000);
when(executionDAOFacade.getTaskPollDataByDomain(taskType, domains[0])).thenReturn(pollData1);
String activeDomain = workflowExecutor.getActiveDomain(taskType, domains);
assertEquals(domains[0], activeDomain);
Uninterruptibles.sleepUninterruptibly(2, TimeUnit.SECONDS);
PollData pollData2 = new PollData("queue2", domains[1], "worker2", System.currentTimeMillis() - 99 * 1000);
when(executionDAOFacade.getTaskPollDataByDomain(taskType, domains[1])).thenReturn(pollData2);
activeDomain = workflowExecutor.getActiveDomain(taskType, domains);
assertEquals(domains[1], activeDomain);
Uninterruptibles.sleepUninterruptibly(2, TimeUnit.SECONDS);
activeDomain = workflowExecutor.getActiveDomain(taskType, domains);
assertEquals(domains[1], activeDomain);
domains = new String[] { "" };
when(executionDAOFacade.getTaskPollDataByDomain(any(), any())).thenReturn(new PollData());
activeDomain = workflowExecutor.getActiveDomain(taskType, domains);
assertNotNull(activeDomain);
assertEquals("", activeDomain);
domains = new String[] {};
activeDomain = workflowExecutor.getActiveDomain(taskType, domains);
assertNull(activeDomain);
activeDomain = workflowExecutor.getActiveDomain(taskType, null);
assertNull(activeDomain);
domains = new String[] { "test-domain" };
when(executionDAOFacade.getTaskPollDataByDomain(anyString(), anyString())).thenReturn(null);
activeDomain = workflowExecutor.getActiveDomain(taskType, domains);
assertNotNull(activeDomain);
assertEquals("test-domain", activeDomain);
}
use of com.netflix.conductor.common.metadata.tasks.PollData in project conductor by Netflix.
the class TestWorkflowExecutor method testTaskToDomainOverrides.
@Test
public void testTaskToDomainOverrides() {
Workflow workflow = generateSampleWorkflow();
List<Task> tasks = generateSampleTasks(4);
Map<String, String> taskToDomain = new HashMap<>();
taskToDomain.put("*", "mydomain");
taskToDomain.put("task2", "someInactiveDomain, NO_DOMAIN");
taskToDomain.put("task3", "someActiveDomain, NO_DOMAIN");
taskToDomain.put("task4", "someInactiveDomain, someInactiveDomain2");
workflow.setTaskToDomain(taskToDomain);
PollData pollData1 = new PollData("queue1", "mydomain", "worker1", System.currentTimeMillis() - 99 * 100);
PollData pollData2 = new PollData("queue2", "someActiveDomain", "worker2", System.currentTimeMillis() - 99 * 100);
when(executionDAOFacade.getTaskPollDataByDomain(anyString(), eq("mydomain"))).thenReturn(pollData1);
when(executionDAOFacade.getTaskPollDataByDomain(anyString(), eq("someInactiveDomain"))).thenReturn(null);
when(executionDAOFacade.getTaskPollDataByDomain(anyString(), eq("someActiveDomain"))).thenReturn(pollData2);
when(executionDAOFacade.getTaskPollDataByDomain(anyString(), eq("someInactiveDomain"))).thenReturn(null);
workflowExecutor.setTaskDomains(tasks, workflow);
assertEquals("mydomain", tasks.get(0).getDomain());
assertNull(tasks.get(1).getDomain());
assertEquals("someActiveDomain", tasks.get(2).getDomain());
assertEquals("someInactiveDomain2", tasks.get(3).getDomain());
}
Aggregations