use of org.apache.gobblin.service.modules.spec.JobExecutionPlan in project incubator-gobblin by apache.
the class MultiHopFlowCompilerTest method testMissingDestinationNodeError.
@Test(dependsOnMethods = "testMissingSourceNodeError")
public void testMissingDestinationNodeError() throws Exception {
FlowSpec spec = createFlowSpec("flow/flow5.conf", "HDFS-1", "HDFS-NULL", false, false);
Dag<JobExecutionPlan> dag = specCompiler.compileFlow(spec);
Assert.assertNull(dag);
Assert.assertEquals(spec.getCompilationErrors().size(), 1);
spec.getCompilationErrors().stream().anyMatch(s -> s.errorMessage.contains("Flowgraph does not have a node with id"));
}
use of org.apache.gobblin.service.modules.spec.JobExecutionPlan in project incubator-gobblin by apache.
the class MockedDagManager method slaConfigCheck.
@Test
void slaConfigCheck() throws Exception {
Dag<JobExecutionPlan> dag = DagManagerTest.buildDag("5", 123456783L, "FINISH_RUNNING", 1);
Assert.assertEquals(DagManagerUtils.getFlowSLA(dag.getStartNodes().get(0)), DagManagerUtils.DEFAULT_FLOW_SLA_MILLIS);
Config jobConfig = dag.getStartNodes().get(0).getValue().getJobSpec().getConfig();
jobConfig = jobConfig.withValue(ConfigurationKeys.GOBBLIN_FLOW_SLA_TIME, ConfigValueFactory.fromAnyRef("7")).withValue(ConfigurationKeys.GOBBLIN_FLOW_SLA_TIME_UNIT, ConfigValueFactory.fromAnyRef(TimeUnit.SECONDS.name()));
dag.getStartNodes().get(0).getValue().getJobSpec().setConfig(jobConfig);
Assert.assertEquals(DagManagerUtils.getFlowSLA(dag.getStartNodes().get(0)), TimeUnit.SECONDS.toMillis(7L));
jobConfig = jobConfig.withValue(ConfigurationKeys.GOBBLIN_FLOW_SLA_TIME, ConfigValueFactory.fromAnyRef("8")).withValue(ConfigurationKeys.GOBBLIN_FLOW_SLA_TIME_UNIT, ConfigValueFactory.fromAnyRef(TimeUnit.MINUTES.name()));
dag.getStartNodes().get(0).getValue().getJobSpec().setConfig(jobConfig);
Assert.assertEquals(DagManagerUtils.getFlowSLA(dag.getStartNodes().get(0)), TimeUnit.MINUTES.toMillis(8L));
}
use of org.apache.gobblin.service.modules.spec.JobExecutionPlan in project incubator-gobblin by apache.
the class MockedDagManager method testOrphanFlowKill.
@Test()
void testOrphanFlowKill() throws Exception {
Long flowExecutionId = System.currentTimeMillis() - TimeUnit.SECONDS.toMillis(10);
Dag<JobExecutionPlan> dag = DagManagerTest.buildDag("6", flowExecutionId, "FINISH_RUNNING", 1);
String dagId = DagManagerUtils.generateDagId(dag);
int queue = DagManagerUtils.getDagQueueId(dag, dagNumThreads);
// change config to set a small sla
Config jobConfig = dag.getStartNodes().get(0).getValue().getJobSpec().getConfig();
jobConfig = jobConfig.withValue(ConfigurationKeys.GOBBLIN_JOB_START_SLA_TIME, ConfigValueFactory.fromAnyRef("7")).withValue(ConfigurationKeys.GOBBLIN_JOB_START_SLA_TIME_UNIT, ConfigValueFactory.fromAnyRef(TimeUnit.SECONDS.name()));
dag.getStartNodes().get(0).getValue().getJobSpec().setConfig(jobConfig);
// mock add spec
dagManager.addDag(dag, true, true);
// check existence of dag in dagToSLA map
AssertWithBackoff.create().maxSleepMs(5000).backoffFactor(1).assertTrue(input -> dagManager.dagManagerThreads[queue].dagToSLA.containsKey(dagId), ERROR_MESSAGE);
Mockito.doReturn(DagManagerTest.getMockJobStatus("flow6", "group6", flowExecutionId, "group6", "job0", String.valueOf(ExecutionStatus.ORCHESTRATED))).when(dagManager.getJobStatusRetriever()).getJobStatusesForFlowExecution("flow6", "group6", flowExecutionId, "job0", "group6");
// check existence of dag in dagToJobs map
AssertWithBackoff.create().maxSleepMs(5000).backoffFactor(1).assertTrue(input -> dagManager.dagManagerThreads[queue].dagToJobs.containsKey(dagId), ERROR_MESSAGE);
// verify cancelJob() of specProducer is called once
// which means job cancellation was triggered
AssertWithBackoff.create().maxSleepMs(5000).backoffFactor(1).assertTrue(new CancelPredicate(dag), ERROR_MESSAGE);
// check removal of dag from dagToSLA map
AssertWithBackoff.create().maxSleepMs(5000).backoffFactor(1).assertTrue(input -> !dagManager.dagManagerThreads[queue].dagToSLA.containsKey(dagId), ERROR_MESSAGE);
}
use of org.apache.gobblin.service.modules.spec.JobExecutionPlan in project incubator-gobblin by apache.
the class MysqlDagStateStoreTest method testWriteCheckpointAndGet.
@Test
public void testWriteCheckpointAndGet() throws Exception {
Dag<JobExecutionPlan> dag_0 = DagTestUtils.buildDag("random_0", 123L);
Dag<JobExecutionPlan> dag_1 = DagTestUtils.buildDag("random_1", 456L);
_dagStateStore.writeCheckpoint(dag_0);
_dagStateStore.writeCheckpoint(dag_1);
// Verify get one dag
Dag<JobExecutionPlan> dag = _dagStateStore.getDag(DagManagerUtils.generateDagId(dag_0));
Assert.assertEquals(dag.getNodes().get(0), dag_0.getNodes().get(0));
Assert.assertEquals(dag.getNodes().get(1), dag_0.getNodes().get(1));
// Verify get dagIds
Set<String> dagIds = _dagStateStore.getDagIds();
Assert.assertEquals(dagIds.size(), 2);
Assert.assertTrue(dagIds.contains(DagManagerUtils.generateDagId(dag_0)));
Assert.assertTrue(dagIds.contains(DagManagerUtils.generateDagId(dag_1)));
// Verify get all dags
List<Dag<JobExecutionPlan>> dags = _dagStateStore.getDags();
Assert.assertEquals(dags.size(), 2);
// Verify dag contents
Dag<JobExecutionPlan> dagDeserialized = dags.get(0);
Assert.assertEquals(dagDeserialized.getNodes().size(), 2);
Assert.assertEquals(dagDeserialized.getStartNodes().size(), 1);
Assert.assertEquals(dagDeserialized.getEndNodes().size(), 1);
Dag.DagNode<JobExecutionPlan> child = dagDeserialized.getEndNodes().get(0);
Dag.DagNode<JobExecutionPlan> parent = dagDeserialized.getStartNodes().get(0);
Assert.assertEquals(dagDeserialized.getParentChildMap().size(), 1);
Assert.assertTrue(dagDeserialized.getParentChildMap().get(parent).contains(child));
for (int i = 0; i < 2; i++) {
JobExecutionPlan plan = dagDeserialized.getNodes().get(i).getValue();
Config jobConfig = plan.getJobSpec().getConfig();
Assert.assertEquals(jobConfig.getString(ConfigurationKeys.FLOW_GROUP_KEY), "group" + "random_0");
Assert.assertEquals(jobConfig.getString(ConfigurationKeys.FLOW_NAME_KEY), "flow" + "random_0");
Assert.assertEquals(jobConfig.getLong(ConfigurationKeys.FLOW_EXECUTION_ID_KEY), 123L);
Assert.assertEquals(plan.getExecutionStatus(), ExecutionStatus.RUNNING);
Assert.assertTrue(Boolean.parseBoolean(plan.getJobFuture().get().get().toString()));
Assert.assertTrue(Boolean.parseBoolean(plan.getJobFuture().get().get().toString()));
}
dagDeserialized = dags.get(1);
Assert.assertEquals(dagDeserialized.getNodes().size(), 2);
Assert.assertEquals(dagDeserialized.getStartNodes().size(), 1);
Assert.assertEquals(dagDeserialized.getEndNodes().size(), 1);
child = dagDeserialized.getEndNodes().get(0);
parent = dagDeserialized.getStartNodes().get(0);
Assert.assertEquals(dagDeserialized.getParentChildMap().size(), 1);
Assert.assertTrue(dagDeserialized.getParentChildMap().get(parent).contains(child));
for (int i = 0; i < 2; i++) {
JobExecutionPlan plan = dagDeserialized.getNodes().get(i).getValue();
Config jobConfig = plan.getJobSpec().getConfig();
Assert.assertEquals(jobConfig.getString(ConfigurationKeys.FLOW_GROUP_KEY), "group" + "random_1");
Assert.assertEquals(jobConfig.getString(ConfigurationKeys.FLOW_NAME_KEY), "flow" + "random_1");
Assert.assertEquals(jobConfig.getLong(ConfigurationKeys.FLOW_EXECUTION_ID_KEY), 456L);
Assert.assertEquals(plan.getExecutionStatus(), ExecutionStatus.RUNNING);
}
}
use of org.apache.gobblin.service.modules.spec.JobExecutionPlan in project incubator-gobblin by apache.
the class DagManagerTest method buildDag.
static Dag<JobExecutionPlan> buildDag(String id, Long flowExecutionId, String flowFailureOption, int numNodes) throws URISyntaxException {
List<JobExecutionPlan> jobExecutionPlans = new ArrayList<>();
for (int i = 0; i < numNodes; i++) {
String suffix = Integer.toString(i);
Config jobConfig = ConfigBuilder.create().addPrimitive(ConfigurationKeys.FLOW_GROUP_KEY, "group" + id).addPrimitive(ConfigurationKeys.FLOW_NAME_KEY, "flow" + id).addPrimitive(ConfigurationKeys.FLOW_EXECUTION_ID_KEY, flowExecutionId).addPrimitive(ConfigurationKeys.JOB_GROUP_KEY, "group" + id).addPrimitive(ConfigurationKeys.JOB_NAME_KEY, "job" + suffix).addPrimitive(ConfigurationKeys.FLOW_FAILURE_OPTION, flowFailureOption).build();
if ((i == 1) || (i == 2)) {
jobConfig = jobConfig.withValue(ConfigurationKeys.JOB_DEPENDENCIES, ConfigValueFactory.fromAnyRef("job0"));
} else if (i == 3) {
jobConfig = jobConfig.withValue(ConfigurationKeys.JOB_DEPENDENCIES, ConfigValueFactory.fromAnyRef("job1"));
} else if (i == 4) {
jobConfig = jobConfig.withValue(ConfigurationKeys.JOB_DEPENDENCIES, ConfigValueFactory.fromAnyRef("job2"));
}
JobSpec js = JobSpec.builder("test_job" + suffix).withVersion(suffix).withConfig(jobConfig).withTemplate(new URI("job" + suffix)).build();
SpecExecutor specExecutor = MockedSpecExecutor.createDummySpecExecutor(new URI("job" + i));
JobExecutionPlan jobExecutionPlan = new JobExecutionPlan(js, specExecutor);
jobExecutionPlans.add(jobExecutionPlan);
}
return new JobExecutionPlanDagFactory().createDag(jobExecutionPlans);
}
Aggregations