public JobPlanner(ClusterJob job, Set<Node> clusterNodes) { this.clusterAction = job.getClusterAction(); this.nodesToPlan = job.getPlannedNodes(); this.serviceNodeMap = ArrayListMultimap.create(); this.serviceMap = Maps.newHashMap(); this.nodeMap = Maps.newHashMap(); for (Node node : clusterNodes) { for (Service service : node.getServices()) { serviceNodeMap.put(service.getName(), node); serviceMap.put(service.getName(), service); } nodeMap.put(node.getId(), node); } this.dependencyResolver = new ServiceDependencyResolver(actions, serviceMap); if (job.getPlannedServices() != null) { this.servicesToPlan = ImmutableSet.copyOf(expandServices(job.getPlannedServices(), clusterAction)); } else { this.servicesToPlan = null; } }
@Test public void testServiceUsesDependency() { ServiceAction sAction = new ServiceAction("shell", TestHelper.actionMapOf(null, null)); Map<ProvisionerAction, ServiceAction> installActions = ImmutableMap.of(ProvisionerAction.INSTALL, sAction); Service s1 = Service.builder().setName("s1").setProvisionerActions(installActions).build(); Service s2 = Service.builder() .setName("s2") .setDependencies( ServiceDependencies.builder().setInstallDependencies( new ServiceStageDependencies(null, ImmutableSet.<String>of("s1", "s3"))).build()) .setProvisionerActions(installActions) .build(); Map<String, Service> serviceMap = Maps.newHashMap(); serviceMap.put(s1.getName(), s1); serviceMap.put(s2.getName(), s2); SetMultimap<ActionOnService, ActionOnService> expected = HashMultimap.create(); // s2 depends on s1 expected.put(new ActionOnService(ProvisionerAction.INSTALL, "s2"), new ActionOnService(ProvisionerAction.INSTALL, "s1")); ServiceDependencyResolver resolver = new ServiceDependencyResolver(Actions.getInstance(), serviceMap); SetMultimap<ActionOnService, ActionOnService> actual = resolver.getClusterDependencies(); Assert.assertEquals(expected, actual); } }
expected.put("s5", "s3"); expected.put("s5", "s4"); ServiceDependencyResolver resolver = new ServiceDependencyResolver(Actions.getInstance(), serviceMap); SetMultimap<String, String> actual = resolver.getRuntimeServiceDependencies(); Assert.assertEquals(expected, actual);
expected.put("s3", "s2-v1"); expected.put("s3", "s2-v2"); ServiceDependencyResolver resolver = new ServiceDependencyResolver(Actions.getInstance(), serviceMap); SetMultimap<String, String> actual = resolver.getRuntimeServiceDependencies(); Assert.assertEquals(expected, actual);
new ActionOnService(ProvisionerAction.START, "s5")); ServiceDependencyResolver resolver = new ServiceDependencyResolver(Actions.getInstance(), serviceMap); SetMultimap<ActionOnService, ActionOnService> actual = resolver.getClusterDependencies(); Assert.assertEquals(expected, actual);
new ActionOnService(ProvisionerAction.INSTALL, "s5")); ServiceDependencyResolver resolver = new ServiceDependencyResolver(Actions.getInstance(), serviceMap); SetMultimap<ActionOnService, ActionOnService> actual = resolver.getClusterDependencies(); Assert.assertEquals(expected, actual);