.append(getScope()).append(",") .append(targetExpr) .toString()); .append(getScope()).append(",") .append(targetExpr) .toString()); .append(getScope()).append(",") .append(getNodeAttributeOpCode()).append(",") .append(targetExpr) .append(getScope()).append(",") .append(targetExpr).append(",") .append(min).append(",")
@Override public int hashCode() { int result = getScope().hashCode(); result = 31 * result + getMinCardinality(); result = 31 * result + getMaxCardinality(); result = 31 * result + getNodeAttributeOpCode().hashCode(); result = 31 * result + getTargetExpressions().hashCode(); return result; }
@Override public boolean equals(Object o) { if (this == o) { return true; } if (!(o instanceof SingleConstraint)) { return false; } SingleConstraint that = (SingleConstraint) o; if (getMinCardinality() != that.getMinCardinality()) { return false; } if (getMaxCardinality() != that.getMaxCardinality()) { return false; } if (!getScope().equals(that.getScope())) { return false; } if (getNodeAttributeOpCode() != null && !getNodeAttributeOpCode() .equals(that.getNodeAttributeOpCode())) { return false; } return getTargetExpressions().equals(that.getTargetExpressions()); }
Assert.assertTrue(constraint instanceof SingleConstraint); single = (SingleConstraint) constraint; Assert.assertEquals("node", single.getScope()); Assert.assertEquals(0, single.getMinCardinality()); Assert.assertEquals(1, single.getMaxCardinality()); Assert.assertTrue(constraint instanceof SingleConstraint); single = (SingleConstraint) constraint; Assert.assertEquals("rack", single.getScope()); Assert.assertEquals(0, single.getMinCardinality()); Assert.assertEquals(1, single.getMaxCardinality());
Assert.assertTrue(constraint instanceof SingleConstraint); single = (SingleConstraint) constraint; Assert.assertEquals("node", single.getScope()); Assert.assertEquals(0, single.getMinCardinality()); Assert.assertEquals(0, single.getMaxCardinality()); Assert.assertTrue(constraint instanceof SingleConstraint); single = (SingleConstraint) constraint; Assert.assertEquals("node", single.getScope()); Assert.assertEquals(0, single.getMinCardinality()); Assert.assertEquals(0, single.getMaxCardinality()); Assert.assertTrue(constraint instanceof SingleConstraint); single = (SingleConstraint) constraint; Assert.assertEquals("node", single.getScope()); Assert.assertEquals(1, single.getMinCardinality()); Assert.assertEquals(Integer.MAX_VALUE, single.getMaxCardinality()); Assert.assertTrue(constraint instanceof SingleConstraint); single = (SingleConstraint) constraint; Assert.assertEquals("node", single.getScope()); Assert.assertEquals(0, single.getMinCardinality()); Assert.assertEquals(0, single.getMaxCardinality());
boolean checkMaxCardinality = desiredMaxCardinality < Integer.MAX_VALUE; if (sc.getScope().equals(PlacementConstraints.NODE)) { if (checkMinCardinality) { minScopeCardinality = tm.getNodeCardinalityByOp(node.getNodeID(), allocationTags, Long::max); } else if (sc.getScope().equals(PlacementConstraints.RACK)) { if (checkMinCardinality) { minScopeCardinality = tm.getRackCardinalityByOp(node.getRackName(),
SimplePlacementConstraintProto sProto = protoConstraint.getSimpleConstraint(); Assert.assertEquals(single.getScope(), sProto.getScope()); Assert.assertEquals(single.getMinCardinality(), sProto.getMinCardinality()); Assert.assertEquals(single.getMaxCardinality(), sProto.getMaxCardinality()); Assert.assertTrue(newConstraintExpr instanceof SingleConstraint); SingleConstraint newSingle = (SingleConstraint) newConstraintExpr; Assert.assertEquals(single.getScope(), newSingle.getScope()); Assert.assertEquals(single.getMinCardinality(), newSingle.getMinCardinality());
Assert.assertEquals(single.getScope(), target.getScope()); Assert.assertEquals(TargetOperator.IN, target.getOp()); Assert.assertEquals(single.getTargetExpressions(), Assert.assertEquals(target.getScope(), single.getScope()); Assert.assertEquals(1, single.getMinCardinality()); Assert.assertEquals(Integer.MAX_VALUE, single.getMaxCardinality());
@Override public GeneratedMessage visit(SingleConstraint constraint) { SimplePlacementConstraintProto.Builder sb = SimplePlacementConstraintProto.newBuilder(); if (constraint.getScope() != null) { sb.setScope(constraint.getScope()); } sb.setMinCardinality(constraint.getMinCardinality()); sb.setMaxCardinality(constraint.getMaxCardinality()); if (constraint.getNodeAttributeOpCode() != null) { sb.setAttributeOpCode( convertToProtoFormat(constraint.getNodeAttributeOpCode())); } if (constraint.getTargetExpressions() != null) { for (TargetExpression target : constraint.getTargetExpressions()) { sb.addTargetExpressions( (PlacementConstraintTargetProto) target.accept(this)); } } SimplePlacementConstraintProto sProto = sb.build(); // Wrap around PlacementConstraintProto object. PlacementConstraintProto.Builder pb = PlacementConstraintProto.newBuilder(); pb.setSimpleConstraint(sProto); return pb.build(); }
@Test public void testCardinalityConstraint() { CardinalityConstraint cardinality = new CardinalityConstraint(RACK, 3, 10, new HashSet<>(Arrays.asList("hb"))); PlacementConstraint cConstraint = PlacementConstraints.build(cardinality); // Transform from specialized CardinalityConstraint to SimpleConstraint SingleConstraintTransformer singleTransformer = new SingleConstraintTransformer(cConstraint); PlacementConstraint sConstraint = singleTransformer.transform(); AbstractConstraint sConstraintExpr = sConstraint.getConstraintExpr(); Assert.assertTrue(sConstraintExpr instanceof SingleConstraint); SingleConstraint single = (SingleConstraint) sConstraintExpr; // Make sure the consistent expression string is consistent // before and after transforming Assert.assertEquals(single.toString(), cardinality.toString()); Assert.assertEquals(cardinality.getScope(), single.getScope()); Assert.assertEquals(cardinality.getMinCardinality(), single.getMinCardinality()); Assert.assertEquals(cardinality.getMaxCardinality(), single.getMaxCardinality()); Assert.assertEquals( new HashSet<>(Arrays.asList(PlacementTargets.allocationTag("hb"))), single.getTargetExpressions()); }
@Test public void testNodeAffinityToTag() { AbstractConstraint constraintExpr = targetIn(NODE, allocationTag("hbase-m")); SingleConstraint sConstraint = (SingleConstraint) constraintExpr; Assert.assertEquals(NODE, sConstraint.getScope()); Assert.assertEquals(1, sConstraint.getMinCardinality()); Assert.assertEquals(Integer.MAX_VALUE, sConstraint.getMaxCardinality()); Assert.assertEquals(1, sConstraint.getTargetExpressions().size()); TargetExpression tExpr = sConstraint.getTargetExpressions().iterator().next(); Assert.assertEquals(AllocationTagNamespaceType.SELF.toString(), tExpr.getTargetKey()); Assert.assertEquals(TargetType.ALLOCATION_TAG, tExpr.getTargetType()); Assert.assertEquals(1, tExpr.getTargetValues().size()); Assert.assertEquals("hbase-m", tExpr.getTargetValues().iterator().next()); PlacementConstraint constraint = PlacementConstraints.build(constraintExpr); Assert.assertNotNull(constraint.getConstraintExpr()); }
@Override public AbstractConstraint visit(SingleConstraint constraint) { AbstractConstraint transformedConstraint = constraint; // Check if it is a target constraint. if (constraint.getMinCardinality() == 1 && constraint.getMaxCardinality() == Integer.MAX_VALUE) { transformedConstraint = new TargetConstraint(TargetOperator.IN, constraint.getScope(), constraint.getTargetExpressions()); } else if (constraint.getMinCardinality() == 0 && constraint.getMaxCardinality() == 0) { transformedConstraint = new TargetConstraint(TargetOperator.NOT_IN, constraint.getScope(), constraint.getTargetExpressions()); } return transformedConstraint; } }
@Test public void testNodeAntiAffinityToAttribute() { AbstractConstraint constraintExpr = targetNotIn(NODE, nodeAttribute("java", "1.8")); SingleConstraint sConstraint = (SingleConstraint) constraintExpr; Assert.assertEquals(NODE, sConstraint.getScope()); Assert.assertEquals(0, sConstraint.getMinCardinality()); Assert.assertEquals(0, sConstraint.getMaxCardinality()); Assert.assertEquals(1, sConstraint.getTargetExpressions().size()); TargetExpression tExpr = sConstraint.getTargetExpressions().iterator().next(); Assert.assertEquals("java", tExpr.getTargetKey()); Assert.assertEquals(TargetType.NODE_ATTRIBUTE, tExpr.getTargetType()); Assert.assertEquals(1, tExpr.getTargetValues().size()); Assert.assertEquals("1.8", tExpr.getTargetValues().iterator().next()); }
private void compareSimpleConstraintToProto(SingleConstraint constraint, PlacementConstraintProto proto) { Assert.assertTrue(proto.hasSimpleConstraint()); Assert.assertFalse(proto.hasCompositeConstraint()); SimplePlacementConstraintProto sProto = proto.getSimpleConstraint(); Assert.assertEquals(constraint.getScope(), sProto.getScope()); Assert.assertEquals(constraint.getMinCardinality(), sProto.getMinCardinality()); Assert.assertEquals(constraint.getMaxCardinality(), sProto.getMaxCardinality()); Assert.assertEquals(constraint.getTargetExpressions().size(), sProto.getTargetExpressionsList().size()); }
private void compareSimpleConstraints(SingleConstraint single, SingleConstraint newSingle) { Assert.assertEquals(single.getScope(), newSingle.getScope()); Assert.assertEquals(single.getMinCardinality(), newSingle.getMinCardinality()); Assert.assertEquals(single.getMaxCardinality(), newSingle.getMaxCardinality()); Assert.assertEquals(single.getTargetExpressions(), newSingle.getTargetExpressions()); }