@Override public Set<String> getJobParticipatingNodes(JobSpecification spec) { return spec.getUserConstraints().stream().map(Constraint::getRValue) .filter(ce -> ce.getTag() == ExpressionTag.CONSTANT).map(ConstantExpression.class::cast) .map(ConstantExpression::getValue).map(Object::toString).filter(nodeJobs::containsKey) .collect(Collectors.toSet()); } }
/** * Generates DOT format plan for {@link JobSpecification} that can be visualized using any DOT format visualizer. * * @param jobSpecification The job specification * @return DOT format plan */ public static String generate(final JobSpecification jobSpecification) { final DotFormatBuilder graphBuilder = new DotFormatBuilder(DotFormatBuilder.StringValue.of("JobSpecification")); final Map<ConnectorDescriptorId, IConnectorDescriptor> connectorMap = jobSpecification.getConnectorMap(); final Set<Constraint> constraints = jobSpecification.getUserConstraints(); Map<ConnectorDescriptorId, Pair<Pair<IOperatorDescriptor, Integer>, Pair<IOperatorDescriptor, Integer>>> cOp = jobSpecification.getConnectorOperatorMap(); cOp.forEach((connId, srcAndDest) -> addToGraph(graphBuilder, constraints, connectorMap, connId, srcAndDest)); return graphBuilder.getDotDocument(); }
operatorCounts.clear(); for (Constraint constraint : subJob.getUserConstraints()) { LValueConstraintExpression lexpr = constraint.getLValue(); ConstraintExpression cexpr = constraint.getRValue();
@Test public void testJobLocations() { final String nc1 = "nc1"; final String nc2 = "nc2"; final NodeJobTracker nodeJobTracker = new NodeJobTracker(); nodeJobTracker.notifyNodeJoin(nc1, null); nodeJobTracker.notifyNodeJoin(nc2, null); final JobSpecification jobSpec = new JobSpecification(); // add only nc1 to the job locations final ConstantExpression nc1Location = new ConstantExpression(nc1); final LValueConstraintExpression lValueMock = Mockito.mock(LValueConstraintExpression.class); jobSpec.getUserConstraints().add(new Constraint(lValueMock, nc1Location)); final String[] clusterLocation = new String[] { nc1, nc2 }; final AlgebricksAbsolutePartitionConstraint jobLocations = APIFramework.getJobLocations(jobSpec, nodeJobTracker, new AlgebricksAbsolutePartitionConstraint(clusterLocation)); // ensure nc2 wasn't included Assert.assertEquals(1, jobLocations.getLocations().length); Assert.assertEquals(nc1, jobLocations.getLocations()[0]); } }
constraints.addAll(spec.getUserConstraints()); return new IActivityClusterGraphGenerator() { @Override