/** * 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(); }
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); }; }
ResourceTestUtils.getUnreservedCpus(3.0)).stream() .map(r -> r.toBuilder() .setRole(Constants.ANY_ROLE) .addReservations( Protos.Resource.ReservationInfo.newBuilder()
@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(); } }
@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("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("deprecation") // for Resource.setRole() private static Protos.Resource getUnreservedResource(String name, Protos.Value value, String role) { Protos.Resource.Builder resBuilder = Protos.Resource.newBuilder() .setName(name) .setType(value.getType()) .setRole(role); if (!role.equals(Constants.ANY_ROLE)) { // Fill in the prereserved role info: resBuilder.addReservationsBuilder() .setRole(role) .setPrincipal(TestConstants.PRINCIPAL); } switch (value.getType()) { case SCALAR: return resBuilder.setScalar(value.getScalar()).build(); case RANGES: return resBuilder.setRanges(value.getRanges()).build(); case SET: return resBuilder.setSet(value.getSet()).build(); default: return null; } } }
@SuppressWarnings("deprecation") private void freeAtomicResource(MesosResource mesosResource) { Resource.Builder resBuilder = Resource.newBuilder(mesosResource.getResource()); resBuilder.clearReservation(); resBuilder.setRole(Constants.ANY_ROLE); if (resBuilder.hasDisk()) { Resource.DiskInfo.Builder diskBuilder = Resource.DiskInfo.newBuilder(resBuilder.getDisk()); diskBuilder.clearPersistence(); diskBuilder.clearVolume(); resBuilder.setDisk(diskBuilder.build()); } Resource releasedResource = resBuilder.build(); List<MesosResource> resList = unreservedAtomicPool.get(mesosResource.getName()); if (resList == null) { resList = new ArrayList<>(); } resList.add(new MesosResource(releasedResource)); unreservedAtomicPool.put(mesosResource.getName(), resList); }
private Resource createMesosRangeResource(ResourceType resourceType, RangeResourceEntry rangeResourceEntry) { Ranges.Builder rangesBuilder = Ranges.newBuilder(); Range rangeBuilder = Range.newBuilder() .setBegin(rangeResourceEntry.getBegin()) .setEnd(rangeResourceEntry.getEnd()).build(); rangesBuilder.addRange(rangeBuilder); Resource.Builder resourceBuilder = Resource.newBuilder() .setName(resourceType.toString()) .setType(Protos.Value.Type.RANGES) .setRanges(rangesBuilder.build()); if (rangeResourceEntry.getReservationType() != null && rangeResourceEntry.getReservationType().equals(ReservationType.STATIC)) { resourceBuilder.setRole(MesosCommon.getRole(mesosStormConf)); } return resourceBuilder.build(); }
public static Resource createRanges( final String name, final Collection<Value.Range> ranges, final String role, final String principal) { return Resource.newBuilder() .setType(Value.Type.RANGES) .setName(name) .setRanges(Value.Ranges.newBuilder().addAllRange(ranges)) .setRole(role) .setReservation(Resource.ReservationInfo.newBuilder() .setPrincipal(principal) .build()) .build(); }
public static Resource createScalar( final String name, final double value, final String role, final String principal) { return Resource.newBuilder() .setName(name) .setRole(role) .setType(Value.Type.SCALAR) .setScalar(Value.Scalar.newBuilder().setValue(value)) .setReservation(Resource.ReservationInfo.newBuilder() .setPrincipal(principal)) .build(); }
@SuppressWarnings("deprecation") // for Resource.setRole() private static Protos.Resource.Builder addReservation( Protos.Resource.Builder builder, String resourceId) { Protos.Resource.ReservationInfo.Builder reservationBuilder; if (Capabilities.getInstance().supportsPreReservedResources()) { reservationBuilder = builder.addReservationsBuilder() .setRole(TestConstants.ROLE) .setPrincipal(TestConstants.PRINCIPAL); } else { builder.setRole(TestConstants.ROLE); reservationBuilder = builder.getReservationBuilder() .setPrincipal(TestConstants.PRINCIPAL); } AuxLabelAccess.setResourceId(reservationBuilder, resourceId); AuxLabelAccess.setResourceNamespace(reservationBuilder, TestConstants.SERVICE_NAME); return builder; }
private List<Resource> createMesosScalarResourceList(ResourceType resourceType, List<ResourceEntry> scalarResourceEntryList) { List<Resource> retVal = new ArrayList<>(); ScalarResourceEntry scalarResourceEntry = null; for (ResourceEntry resourceEntry : scalarResourceEntryList) { scalarResourceEntry = (ScalarResourceEntry) resourceEntry; Resource.Builder resourceBuilder = Resource.newBuilder() .setName(resourceType.toString()) .setType(Protos.Value.Type.SCALAR) .setScalar(Scalar.newBuilder().setValue(scalarResourceEntry.getValue())); if (resourceEntry.getReservationType() != null && resourceEntry.getReservationType().equals(ReservationType.STATIC)) { resourceBuilder.setRole(MesosCommon.getRole(mesosStormConf)); } retVal.add(resourceBuilder.build()); } return retVal; }
@SuppressWarnings("deprecation") @Test public void testFilteredResources() { scheduler.setApiServerStarted(); String resourceId = "unexpected-volume-id-1"; Protos.Resource resourceMatchingRole = ResourceTestUtils.getReservedRootVolume(1000.0, resourceId, resourceId); Protos.Resource resourceOtherRole = resourceMatchingRole.toBuilder().setRole("other-role").build(); Protos.Offer offer = getOffer("foo").toBuilder().addResources(resourceMatchingRole).addResources(resourceOtherRole).build(); Protos.Offer filteredOffer = getOffer("foo").toBuilder().addResources(resourceMatchingRole).build(); // Resource with other role should be filtered out: scheduler.resourceOffers(mockSchedulerDriver, Collections.singletonList(offer)); verify(mockOfferProcessor).enqueue(Collections.singletonList(filteredOffer)); }
@SuppressWarnings("deprecation") @Test public void resourceProcessableForPartialSubsetOfRoles() { Protos.Resource alienResource = UNEXPECTED_RESOURCE_1.toBuilder().setRole("alien-role").build(); Assert.assertFalse(ResourceUtils.isProcessable( alienResource, Arrays.asList(TestConstants.ROLE, "another-role"))); } }
@SuppressWarnings("deprecation") private static Protos.Resource getUnreservedCpus(double cpus) { Protos.Resource.Builder resBuilder = Protos.Resource.newBuilder() .setName("cpus") .setType(Protos.Value.Type.SCALAR) .setRole(Constants.ANY_ROLE); resBuilder.getScalarBuilder().setValue(cpus); return resBuilder.build(); }
@SuppressWarnings("deprecation") private static Protos.Resource getUnreservedCpus(double cpus) { Protos.Resource.Builder resBuilder = Protos.Resource.newBuilder() .setName("cpus") .setType(Protos.Value.Type.SCALAR) .setRole(Constants.ANY_ROLE); resBuilder.getScalarBuilder().setValue(cpus); return resBuilder.build(); } }
/** * Minimum to keep required field errors away. */ public static void addResource(Offer.Builder o, String name, String role) { Resource.Builder b = o.addResourcesBuilder().setType(Value.Type.RANGES).setName(name); if (role != null) { b.setRole(role); } }
/** * Construct a scalar resource. */ public static Protos.Resource scalar(String name, String role, double value) { checkNotNull(name); checkNotNull(role); checkNotNull(value); return Protos.Resource.newBuilder() .setName(name) .setType(Protos.Value.Type.SCALAR) .setScalar(Protos.Value.Scalar.newBuilder().setValue(value)) .setRole(role) .build(); }