.setCommand(builder) .addResources(Protos.Resource.newBuilder() .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();
Protos.Resource taken = available.toBuilder().setRanges(Protos.Value.Ranges.newBuilder().addAllRange(takenRanges)).build(); if (LOG.isDebugEnabled()) { LOG.debug("Taking {} from {}", Utils.toString(taken.getRanges()), Utils.toString(available)); i.set(available.toBuilder().setRanges(Protos.Value.Ranges.newBuilder().addAllRange(remainingRanges)).build());
/** * Construct a range resource. */ public static Protos.Resource ranges(String name, String role, Protos.Value.Range... ranges) { checkNotNull(name); checkNotNull(role); checkNotNull(ranges); return Protos.Resource.newBuilder() .setName(name) .setType(Protos.Value.Type.RANGES) .setRanges(Protos.Value.Ranges.newBuilder().addAllRange(Arrays.asList(ranges)).build()) .setRole(role) .build(); }
Resource .newBuilder() .setName("cpus") .setType(Value.Type.SCALAR) .setRole(cpuRole) .setScalar(Value.Scalar.newBuilder().setValue(containerCpus))) .addResources( Resource .newBuilder() .setName("mem") .setType(Value.Type.SCALAR) .setRole(memRole) .setScalar(Value.Scalar.newBuilder().setValue(containerMem))) .addResources( Resource .newBuilder() .setName("disk") .setType(Value.Type.SCALAR) .setRole(diskRole) .setScalar(Value.Scalar.newBuilder().setValue(containerDisk))) .setCommand(commandInfo.build()); Resource .newBuilder() .setName("ports") .setType(Value.Type.RANGES) .setRole(portsRole) .setRanges( Value.Ranges
.setSlaveId(offer.offer.getSlaveId()) .addResources( 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 .newBuilder() .setName("ports") .setType(Value.Type.RANGES) .setRole(offer.portRole) .setRanges( Value.Ranges .newBuilder()
.setCommand(CommandInfo.newBuilder() .setValue(executorLaunchCommand) .addUris(URI.newBuilder().setValue(reefTarUri).build()) .build()) .build(); .setSlaveId(offer.getSlaveId()) .addResources(Resource.newBuilder() .setName("mem") .setType(Type.SCALAR) .setScalar(Value.Scalar.newBuilder() .setValue(resourceRequestEvent.getMemorySize().get()) .build()) .addResources(Resource.newBuilder() .setName("cpus") .setType(Type.SCALAR) .setScalar(Value.Scalar.newBuilder() .setValue(resourceRequestEvent.getVirtualCores().get()) .build())
.setType(Protos.Value.Type.SCALAR) .setName(MESOS_DISK) // Currently not supported in Amazon ECS .setRole("*") .setScalar( Protos.Value.Scalar.newBuilder() .setValue(0.0) offerBuilder.addResources( Protos.Resource.newBuilder() .setType(Protos.Value.Type.SCALAR) .setName(MESOS_CPU) .setRole("*") .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 offerBuilder.addResources( Protos.Resource.newBuilder() .setType(Protos.Value.Type.SCALAR) .setName(MESOS_MEM) .setRole("*") .setScalar( Protos.Value.Scalar.newBuilder() .setValue(resource.getIntegerValue().doubleValue()) offerBuilder.addResources( Protos.Resource.newBuilder() .setType(Protos.Value.Type.RANGES) .setName(MESOS_PORTS)
.map(mesosResource1 -> mesosResource1.getResource().toBuilder().clearAllocationInfo()) .orElseGet(Protos.Resource::newBuilder); builder.setName(resourceName) .setRole(Constants.ANY_ROLE) .setType(value.getType()); if (role.isPresent() && !ResourceUtils.hasResourceId(builder.build())) { if (preReservedSupported) { if (!preReservedRole.equals(Constants.ANY_ROLE) && !mesosResource.isPresent()) { builder.addReservations(Protos.Resource.ReservationInfo.newBuilder() .setRole(preReservedRole) .setType(Protos.Resource.ReservationInfo.Type.STATIC)); builder.addReservations(getRefinedReservationInfo()); } else { builder.setReservation(getLegacyReservationInfo()); builder.setRole(role.get()); } else if (preReservedSupported && builder.getReservationsCount() > 0) { builder.clearRole(); Protos.Resource.DiskInfo.Builder diskBuilder = builder.getDiskBuilder(); diskBuilder .getVolumeBuilder() return setValue(builder, value).build();
Resource .newBuilder() .setName("cpus") .setType(Value.Type.SCALAR) .setRole(r.getRole()) .setScalar( Value.Scalar.newBuilder() .setValue(cpus).build()).build()); cpusNeeded -= cpus; } else if (r.getName().equals("mem") && memNeeded > 0) { Resource .newBuilder() .setName("mem") .setType(Value.Type.SCALAR) .setRole(r.getRole()) .setScalar( Value.Scalar.newBuilder() .setValue(mem).build()).build()); memNeeded -= mem; } else if (r.getName().equals("disk") && diskNeeded > 0) { Resource .newBuilder() .setName("disk") .setType(Value.Type.SCALAR) .setRole(r.getRole()) .setScalar( Value.Scalar.newBuilder()
.setSlaveId(offer.getSlaveId()) .addResources(Protos.Resource.newBuilder() .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))
!preReservedRole.equals(Constants.ANY_ROLE)) builder.addReservations( Resource.ReservationInfo.newBuilder() .setRole(preReservedRole) return Optional.of(new MesosResource(builder.build())); } else { if (availableValue == null) {
@Test public void testUpdateResourcesOneSharedTaskInStateStore() throws TaskException { Protos.Resource targetResource = Protos.Resource.newBuilder() .setName("cpus") .setType(Protos.Value.Type.SCALAR) .setScalar(Protos.Value.Scalar.newBuilder().setValue(1.0)) .build(); .setName("cpus") .setType(Protos.Value.Type.SCALAR) .setScalar(Protos.Value.Scalar.newBuilder().setValue(2.0)) .build();
ResourceTestUtils.getUnreservedCpus(3.0)).stream() .map(r -> r.toBuilder() .setRole(Constants.ANY_ROLE) .addReservations( Protos.Resource.ReservationInfo.newBuilder() .setRole(TestConstants.PRE_RESERVED_ROLE) .setType(Protos.Resource.ReservationInfo.Type.STATIC)) .build()) .collect(Collectors.toList()));
Resource .newBuilder() .setName("cpus") .setType(Value.Type.SCALAR) .setScalar( Value.Scalar.newBuilder() .setValue(request.request.getCpus()).build()).build()) .addResources( Resource .newBuilder() .setName("mem") .setType(Value.Type.SCALAR) .setScalar( Value.Scalar .newBuilder() .setValue((1 + JVM_MEM_OVERHEAD_FACTOR) * request.request.getMem()) .build()).build()) .setCommand( CommandInfo
@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); }
@SuppressWarnings("deprecated") @Test public void testResourceRefinementFailsForDifferentPreReservation() throws Exception { ResourceRefinementCapabilityContext context = new ResourceRefinementCapabilityContext(Capabilities.getInstance()); try { ServiceSpec serviceSpec = getServiceSpec("resource-refinement.yml"); Assert.assertEquals(TestConstants.PRE_RESERVED_ROLE, serviceSpec.getPods().get(0).getPreReservedRole()); Protos.Offer badOffer = OfferTestUtils.getOffer( Arrays.asList( ResourceTestUtils.getUnreservedCpus(3.0).toBuilder() .setRole(Constants.ANY_ROLE) .addReservations( Protos.Resource.ReservationInfo.newBuilder() .setRole("different-role") .setType(Protos.Resource.ReservationInfo.Type.STATIC)) .build())); PodSpec podSpec = serviceSpec.getPods().get(0); PodInstance podInstance = new DefaultPodInstance(podSpec, 0); List<String> tasksToLaunch = Arrays.asList("test-task"); PodInstanceRequirement podInstanceRequirement = PodInstanceRequirement.newBuilder(podInstance, tasksToLaunch) .build(); List<OfferRecommendation> recommendations = evaluator.evaluate( podInstanceRequirement, Arrays.asList(badOffer)); Assert.assertEquals(0, recommendations.size()); } finally { context.reset(); } }
@SuppressWarnings("deprecation") // for Resource.setRole() private static Protos.Resource toUnreservedResource(String resourceName, Protos.Value value, boolean isMountDisk) { Protos.Resource.Builder resourceBuilder = Protos.Resource.newBuilder() .setRole("*") .setName(resourceName) .setType(value.getType()); switch (value.getType()) { case SCALAR: resourceBuilder.setScalar(value.getScalar()); break; case RANGES: resourceBuilder.setRanges(value.getRanges()); break; case SET: resourceBuilder.setSet(value.getSet()); break; default: throw new IllegalArgumentException("Unsupported value type: " + value); } if (isMountDisk) { resourceBuilder.getDiskBuilder().getSourceBuilder() .setType(Protos.Resource.DiskInfo.Source.Type.MOUNT) .getMountBuilder().setRoot("test-mount-root"); } return resourceBuilder.build(); } }