PlacementConstraint.And andConstraint = PlacementConstraints.and( allConstraints.toArray(new PlacementConstraint .AbstractConstraint[allConstraints.size()]));
@Override public AbstractConstraint parse() throws PlacementConstraintParseException { // do pre-process, validate input. validate(); String op = nextToken(); shouldHaveNext(); List<AbstractConstraint> constraints = new ArrayList<>(); while(hasMoreTokens()) { // each child expression can be any valid form of // constraint expressions. String constraintStr = nextToken(); AbstractConstraint constraint = parseExpression(constraintStr); constraints.add(constraint); } if (AND.equalsIgnoreCase(op)) { return PlacementConstraints.and( constraints.toArray( new AbstractConstraint[constraints.size()])); } else if (OR.equalsIgnoreCase(op)) { return PlacementConstraints.or( constraints.toArray( new AbstractConstraint[constraints.size()])); } else { throw new PlacementConstraintParseException( "Unexpected conjunction operator : " + op + ", expecting " + AND + " or " + OR); } } }
@Test public void testAndConstraint() { AbstractConstraint constraintExpr = and(targetIn(RACK, allocationTag("spark")), maxCardinality(NODE, 3, "spark"), targetCardinality(RACK, 2, 10, allocationTag("zk"))); And andExpr = (And) constraintExpr; Assert.assertEquals(3, andExpr.getChildren().size()); SingleConstraint sConstr = (SingleConstraint) andExpr.getChildren().get(0); TargetExpression tExpr = sConstr.getTargetExpressions().iterator().next(); Assert.assertEquals("spark", tExpr.getTargetValues().iterator().next()); sConstr = (SingleConstraint) andExpr.getChildren().get(1); Assert.assertEquals(0, sConstr.getMinCardinality()); Assert.assertEquals(3, sConstr.getMaxCardinality()); sConstr = (SingleConstraint) andExpr.getChildren().get(2); Assert.assertEquals(2, sConstr.getMinCardinality()); Assert.assertEquals(10, sConstr.getMaxCardinality()); } }
.build(targetNotIn(RACK, allocationTag("hbase-rs"))); c5 = PlacementConstraints .build(and(targetNotIn(NODE, allocationTag("hbase-m")), maxCardinality(NODE, 3, "spark"))); c6 = PlacementConstraints c7 = PlacementConstraints .build(or(targetIn(NODE, allocationTag("hbase-m")), and(targetIn(NODE, allocationTag("hbase-rs")), targetIn(NODE, allocationTag("spark")))));
Assert.assertEquals(1000, tag1.getNumOfAllocations()); actualPc1 = result.values().iterator().next(); expectedPc1 = and(targetNotIn("node", allocationTag("bar")), targetIn("node", allocationTag("foo"))).build(); Assert.assertEquals(expectedPc1, actualPc1); actualPc2 = valueIt.next(); expectedPc1 = and(targetNotIn("node", allocationTag("bar")), or(targetIn("node", allocationTag("foo")), targetIn("node", allocationTag("moo")))).build();
app1Constraints.put(Collections.singleton("bar"), PlacementConstraints.build( PlacementConstraints.and( PlacementConstraints.targetNotIn(NODE, allocationTag("foo")), PlacementConstraints.maxCardinality(NODE, 2, "bar"))));
.allocationRequestId(10L).priority(Priority.newInstance(1)) .placementConstraintExpression( PlacementConstraints.and( PlacementConstraints .targetNodeAttribute(PlacementConstraints.NODE,