.setName(CPU) .setType(Protos.Value.Type.SCALAR) .setScalar(Protos.Value.Scalar.newBuilder().setValue(igniteTask.cpuCores()))) .addResources(Protos.Resource.newBuilder() .setName(MEM) .setType(Protos.Value.Type.SCALAR) .setScalar(Protos.Value.Scalar.newBuilder().setValue(igniteTask.mem()))) .addResources(Protos.Resource.newBuilder() .setName(DISK) .setType(Protos.Value.Type.SCALAR) .setScalar(Protos.Value.Scalar.newBuilder().setValue(igniteTask.disk()))) .build();
.setType(Value.Type.SCALAR) .setRole(cpuRole) .setScalar(Value.Scalar.newBuilder().setValue(containerCpus))) .addResources( Resource .setType(Value.Type.SCALAR) .setRole(memRole) .setScalar(Value.Scalar.newBuilder().setValue(containerMem))) .addResources( Resource .setType(Value.Type.SCALAR) .setRole(diskRole) .setScalar(Value.Scalar.newBuilder().setValue(containerDisk))) .setCommand(commandInfo.build()); .setType(Value.Type.SCALAR) .setRole(cpuRole) .setScalar(Value.Scalar.newBuilder().setValue(taskCpus - containerCpus))) .addResources( Resource .setType(Value.Type.SCALAR) .setRole(memRole) .setScalar(Value.Scalar.newBuilder().setValue(taskMem - containerCpus))) .setData(taskData) .setExecutor(executorBuilder.build())
Resource.newBuilder().setName("cpus").setType(Value.Type.SCALAR) .setRole(offer.cpuRole) .setScalar(Value.Scalar.newBuilder().setValue(taskCpus))) .addResources( Resource.newBuilder().setName("mem").setType(Value.Type.SCALAR) .setRole(offer.memRole) .setScalar(Value.Scalar.newBuilder().setValue(taskMem))) .addResources( Resource.newBuilder().setName("disk").setType(Value.Type.SCALAR) .setRole(offer.diskRole) .setScalar(Value.Scalar.newBuilder().setValue(taskDisk))) .addResources( Resource
.setScalar( Protos.Value.Scalar.newBuilder() .setValue(0.0) .build() .setScalar( Protos.Value.Scalar.newBuilder() .setValue(resource.getIntegerValue().doubleValue() / 1024.0) // CPU is a normalized int, divide by 1024 to get to what Mesos expects .build() .setScalar( Protos.Value.Scalar.newBuilder() .setValue(resource.getIntegerValue().doubleValue()) .build()
.setScalar( Value.Scalar.newBuilder() .setValue(cpus).build()).build()); cpusNeeded -= cpus; } else if (r.getName().equals("mem") && memNeeded > 0) { .setScalar( Value.Scalar.newBuilder() .setValue(mem).build()).build()); memNeeded -= mem; } else if (r.getName().equals("disk") && diskNeeded > 0) { .setScalar( Value.Scalar.newBuilder() .setValue(disk).build()).build());
.setType(Protos.Value.Type.SCALAR) .setScalar(Protos.Value.Scalar.newBuilder() .setValue(1.0)) .build(), TestConstants.ROLE,
.setName("cpus") .setType(Protos.Value.Type.SCALAR) .setScalar(Protos.Value.Scalar.newBuilder().setValue(1))) .addResources(Protos.Resource.newBuilder() .setName("mem") .setType(Protos.Value.Type.SCALAR) .setScalar(Protos.Value.Scalar.newBuilder().setValue(128))) .setContainer(containerInfoBuilder) .setCommand(Protos.CommandInfo.newBuilder().setShell(false))
attrBuilder.getTextBuilder().setValue("foo"); attrBuilder = offerBuilder.addAttributesBuilder().setName("diskspeed").setType(Protos.Value.Type.SCALAR); attrBuilder.getScalarBuilder().setValue(1234.5678);
@Test public void testScalarAttributeString() { Attribute.Builder attr = Attribute.newBuilder().setType(Type.SCALAR).setName("ram"); attr.getScalarBuilder().setValue(0); assertEquals("ram:0.000", AttributeStringUtils.toString(attr.build())); attr.getScalarBuilder().setValue(0.000); assertEquals("ports:0.000", AttributeStringUtils.toString(attr.build())); attr.getScalarBuilder().setValue(0.0001); assertEquals("ports:0.000", AttributeStringUtils.toString(attr.build())); attr.getScalarBuilder().setValue(0.0005); assertEquals("ports:0.001", AttributeStringUtils.toString(attr.build())); attr.getScalarBuilder().setValue(-1.99999); assertEquals("rounddown:-2.000", AttributeStringUtils.toString(attr.build())); attr.getScalarBuilder().setValue(1.99999); assertEquals("roundup1:2.000", AttributeStringUtils.toString(attr.build())); attr.getScalarBuilder().setValue(1.99999); assertEquals(":2.000", AttributeStringUtils.toString(attr.build())); attr.getScalarBuilder().setValue(999999.99999); assertEquals("roundup2:1000000.000", AttributeStringUtils.toString(attr.build()));
@Test public void testSetGetOfferAttributes() { Protos.Offer.Builder offerBuilder = Protos.Offer.newBuilder() .setId(TestConstants.OFFER_ID) .setFrameworkId(TestConstants.FRAMEWORK_ID) .setSlaveId(TestConstants.AGENT_ID) .setHostname(TestConstants.HOSTNAME); Protos.Attribute.Builder attrBuilder = offerBuilder.addAttributesBuilder().setName("1").setType(Protos.Value.Type.RANGES); attrBuilder.getRangesBuilder().addRangeBuilder().setBegin(5).setEnd(6); attrBuilder.getRangesBuilder().addRangeBuilder().setBegin(10).setEnd(12); attrBuilder = offerBuilder.addAttributesBuilder().setName("2").setType(Protos.Value.Type.SCALAR); attrBuilder.getScalarBuilder().setValue(123.4567); attrBuilder = offerBuilder.addAttributesBuilder().setName("3").setType(Protos.Value.Type.SET); attrBuilder.getSetBuilder().addItem("foo").addItem("bar").addItem("baz"); attrBuilder = offerBuilder.addAttributesBuilder().setName("4").setType(Protos.Value.Type.RANGES); attrBuilder.getRangesBuilder().addRangeBuilder().setBegin(7).setEnd(8); attrBuilder.getRangesBuilder().addRangeBuilder().setBegin(10).setEnd(12); Assert.assertTrue(new TaskLabelReader(getTestTaskInfo()).getOfferAttributeStrings().isEmpty()); Protos.TaskInfo.Builder tb = getTestTaskInfo().toBuilder(); tb.setLabels(new TaskLabelWriter(tb).setOfferAttributes(offerBuilder.build()).toProto()); List<String> expectedStrings = new ArrayList<>(); expectedStrings.add("1:[5-6,10-12]"); expectedStrings.add("2:123.457"); expectedStrings.add("3:{foo,bar,baz}"); expectedStrings.add("4:[7-8,10-12]"); Assert.assertEquals(expectedStrings, new TaskLabelReader(tb).getOfferAttributeStrings()); tb.setLabels(new TaskLabelWriter(tb).setOfferAttributes(offerBuilder.clearAttributes().build()).toProto()); Assert.assertTrue(new TaskLabelReader(tb.build()).getOfferAttributeStrings().isEmpty()); }
@SuppressWarnings("unchecked") @Override public boolean matches(Object o) { Collection<Protos.Request> requests = (Collection<Protos.Request>) o; Protos.Resource cpuResource = Protos.Resource.newBuilder() .setName(Resources.RESOURCE_CPUS) .setType(Protos.Value.Type.SCALAR) .setScalar(Protos.Value.Scalar.newBuilder().setValue(cpus).build()) .setRole(frameworkRole) .build(); Protos.Resource memResource = Protos.Resource.newBuilder() .setName(Resources.RESOURCE_MEM) .setType(Protos.Value.Type.SCALAR) .setScalar(Protos.Value.Scalar.newBuilder().setValue(mem).build()) .setRole(frameworkRole) .build(); Protos.Resource diskResource = Protos.Resource.newBuilder() .setName(Resources.RESOURCE_DISK) .setType(Protos.Value.Type.SCALAR) .setScalar(Protos.Value.Scalar.newBuilder().setValue(disk).build()) .setRole(frameworkRole) .build(); Protos.Request request = Protos.Request.newBuilder() .addResources(cpuResource) .addResources(memResource) .addResources(diskResource) .build(); return requests.contains(request); }
@Test public void testUpdateResourcesNoSharedTasksInStateStore() throws TaskException { Protos.Resource targetResource = Protos.Resource.newBuilder() .setName("cpus") .setType(Protos.Value.Type.SCALAR) .setScalar(Protos.Value.Scalar.newBuilder().setValue(1.0)) .build(); String taskName = "pod-0-init"; Protos.TaskInfo taskInfo = baseTaskInfo.toBuilder() .setLabels(new TaskLabelWriter(baseTaskInfo) .setType("pod") .setIndex(0) .toProto()) .setName(taskName) .addAllResources(Arrays.asList(targetResource)) .build(); stateStore.storeTasks(Arrays.asList(taskInfo)); Assert.assertEquals(1, stateStore.fetchTaskNames().size()); persistentLaunchRecorder.updateTaskResourcesWithinResourceSet( persistentLaunchRecorder.getPodInstance(taskInfo).get(), taskInfo); Assert.assertEquals(1, stateStore.fetchTaskNames().size()); Assert.assertEquals(targetResource, stateStore.fetchTask(taskName).get().getResources(0)); }
private Builder addScalarResource(Double r, String resourceId) { DefaultResourceSpec resource = DefaultResourceSpec.newBuilder() .name(resourceId) .role(role) .preReservedRole(preReservedRole) .principal(principal) .value(Protos.Value.newBuilder() .setType(Protos.Value.Type.SCALAR) .setScalar(Protos.Value.Scalar.newBuilder().setValue(r)) .build()) .build(); if (resources .stream() .anyMatch(resourceSpecification -> Objects.equals(resourceSpecification.getName(), resourceId))) { String msg = String.format("Cannot configure multiple %s resources in a single ResourceSet", resourceId); throw new IllegalStateException(msg); } resources.add(resource); return this; }
public static List<Resource> updateResources( final double cpus, final int memoryMb, final List<Resource> resources) { return resources.stream() .map(resource -> { if (isCpus(resource)) { return Resource.newBuilder(resource) .setScalar( Value.Scalar.newBuilder() .setValue(cpus)) .build(); } else if (isMem(resource)) { return Resource.newBuilder(resource) .setScalar( Value.Scalar.newBuilder() .setValue(memoryMb)) .build(); } else { return resource; } }).collect(Collectors.toList()); }
private ResourceRequirement simpleScalarRequirement(String name, double minimumRequirement) { return (requirement, taskId, offer) -> { if (ResourceRequirement.scalarSum(offer, name) > minimumRequirement) { return OfferEvaluation.accept( requirement, taskId, offer, Collections.emptyMap(), Collections.emptyList(), Collections.emptyList(), Protos.Resource.newBuilder() .setType(Protos.Value.Type.SCALAR) .setName(name) .setRole(offer.getResourcesList().stream().filter(resource -> resource.getName().equalsIgnoreCase(name)).findFirst().map(Protos.Resource::getRole).orElse("*")) .setScalar(Protos.Value.Scalar.newBuilder().setValue(minimumRequirement)) .build() ); } return OfferEvaluation.decline(requirement, taskId, offer, "Not enough resources for " + name); }; }
@Test public void testMixedAttributeStrings() { List<Attribute> attrs = new ArrayList<>(); assertEquals("", AttributeStringUtils.toString(attrs)); Attribute.Builder attr = Attribute.newBuilder().setType(Type.TEXT).setName("ram"); attr.getTextBuilder().setValue(""); attrs.add(attr.build()); assertEquals("ram:", AttributeStringUtils.toString(attrs)); attr = Attribute.newBuilder().setType(Type.SET).setName("ports"); attr.getSetBuilder().addItem("a").addItem("b").addItem("c"); attrs.add(attr.build()); assertEquals("ram:;ports:{a,b,c}", AttributeStringUtils.toString(attrs)); attr = Attribute.newBuilder().setType(Type.SCALAR).setName("roundup1"); attr.getScalarBuilder().setValue(1.99999); attrs.add(attr.build()); assertEquals("ram:;ports:{a,b,c};roundup1:2.000", AttributeStringUtils.toString(attrs)); attr = Attribute.newBuilder().setType(Type.RANGES).setName("disk"); attr.getRangesBuilder().addRangeBuilder().setBegin(-321).setEnd(-123); attrs.add(attr.build()); assertEquals("ram:;ports:{a,b,c};roundup1:2.000;disk:[-321--123]", AttributeStringUtils.toString(attrs)); }
public static ResourceSet getResourceSet() { return DefaultResourceSet.newBuilder( TestConstants.ROLE, TestConstants.PRE_RESERVED_ROLE, TestConstants.PRINCIPAL) .id(TestConstants.RESOURCE_SET_ID) .addResource(DefaultResourceSpec.newBuilder() .name(Constants.CPUS_RESOURCE_TYPE) .value(Protos.Value.newBuilder() .setType(Protos.Value.Type.SCALAR) .setScalar(Protos.Value.Scalar.newBuilder() .setValue(1.0)) .build()) .role(TestConstants.ROLE) .preReservedRole(TestConstants.PRE_RESERVED_ROLE) .principal(TestConstants.PRINCIPAL) .build()) .volumes(Collections.emptyList()) .build(); }