/** * Create a plan of tasks to be executed in order to perform the cluster operation. Each item in the list represents * a stage of tasks that can be performed. All tasks in a stage may be run in parallel, but every task in a stage * must be successfully completed before moving on to the next stage. * * @return Plan of tasks to be executed in order to perform a cluster operation. */ public List<Set<TaskNode>> linearizeDependentTasks() { TaskDag taskDag = createTaskDag(); long start = System.currentTimeMillis(); List<Set<TaskNode>> linearizedTasks = taskDag.linearize(); long dur = System.currentTimeMillis() - start; LOG.debug("took {} ms to linearize action plan.", dur); return linearizedTasks; }
@Test public void testNoEdgeNodesInDag() { Service s1 = Service.builder().setName("s1").build(); Node node1 = new Node("node1", "1", ImmutableSet.<Service>of(s1), NodeProperties.builder().setHostname("host1").addIPAddress("access_v4", "ip1").build()); Node node2 = new Node("node2", "1", ImmutableSet.<Service>of(s1), NodeProperties.builder().setHostname("host2").addIPAddress("access_v4", "ip2").build()); Set<Node> clusterNodes = ImmutableSet.of(node1, node2); TaskDag expected = new TaskDag(); TaskNode taskNode1 = new TaskNode(node1.getId(), ProvisionerAction.DELETE.name(), ""); TaskNode taskNode2 = new TaskNode(node2.getId(), ProvisionerAction.DELETE.name(), ""); expected.addTaskNode(taskNode1); expected.addTaskNode(taskNode2); ClusterJob job = new ClusterJob(JobId.fromString("123-001"), ClusterAction.CLUSTER_DELETE); JobPlanner planner = new JobPlanner(job, clusterNodes); TaskDag actual = planner.createTaskDag(); Assert.assertEquals(expected, actual); List<Set<TaskNode>> linearizedTasks = actual.linearize(); Assert.assertEquals(1, linearizedTasks.size()); Assert.assertEquals(2, linearizedTasks.get(0).size()); Assert.assertTrue(linearizedTasks.get(0).contains(taskNode1)); Assert.assertTrue(linearizedTasks.get(0).contains(taskNode2)); }
new TaskNode(node1.getId(), ProvisionerAction.START.name(), "s3")); Assert.assertEquals(expected, planner.createTaskDag());
Assert.assertEquals(expected, planner.createTaskDag());
expected.addDependency(new TaskNode(node2.getId(), ProvisionerAction.STOP.name(), s2.getName()), new TaskNode(node1.getId(), ProvisionerAction.STOP.name(), s1.getName())); Assert.assertEquals(expected, planner.createTaskDag()); Assert.assertEquals(expected, planner.createTaskDag()); expected.addDependency(new TaskNode(node2.getId(), ProvisionerAction.STOP.name(), s2.getName()), new TaskNode(node1.getId(), ProvisionerAction.STOP.name(), s1.getName())); Assert.assertEquals(expected, planner.createTaskDag());
expected.addDependency(new TaskNode(node1.getId(), ProvisionerAction.START.name(), s1.getName()), new TaskNode(node2.getId(), ProvisionerAction.START.name(), s2.getName())); Assert.assertEquals(expected, planner.createTaskDag()); expected.addDependency(new TaskNode(node1.getId(), ProvisionerAction.START.name(), s1.getName()), new TaskNode(node2.getId(), ProvisionerAction.START.name(), s2.getName())); Assert.assertEquals(expected, planner.createTaskDag()); Assert.assertEquals(expected, planner.createTaskDag());
expected.addDependency(new TaskNode(node1.getId(), ProvisionerAction.CONFIGURE.name(), "s1"), new TaskNode(node1.getId(), ProvisionerAction.START.name(), "s1")); Assert.assertEquals(expected, planner.createTaskDag()); expected.addDependency(new TaskNode(node1.getId(), ProvisionerAction.START.name(), "s1"), new TaskNode(node2.getId(), ProvisionerAction.START.name(), "s3")); Assert.assertEquals(expected, planner.createTaskDag());
new TaskNode(node2.getId(), ProvisionerAction.START.name(), "s1")); Assert.assertEquals(expected, planner.createTaskDag()); new TaskNode(node2.getId(), ProvisionerAction.START.name(), "s2")); Assert.assertEquals(expected, planner.createTaskDag());
expected.addDependency(new TaskNode(node2.getId(), ProvisionerAction.STOP.name(), s3.getName()), new TaskNode(node2.getId(), ProvisionerAction.START.name(), s3.getName())); Assert.assertEquals(expected, planner.createTaskDag()); expected.addDependency(new TaskNode(node2.getId(), ProvisionerAction.STOP.name(), s3.getName()), new TaskNode(node2.getId(), ProvisionerAction.START.name(), s3.getName())); Assert.assertEquals(expected, planner.createTaskDag());
new TaskNode(node1.getId(), ProvisionerAction.START.name(), "s3")); Assert.assertEquals(expected, planner.createTaskDag());
TaskDag dag = planner.createTaskDag();
Assert.assertEquals(expected, planner.createTaskDag());