/** * Gets a string representation of a collection of ranges. */ public static String toString(Protos.Value.Ranges ranges) { checkNotNull(ranges); return ranges.getRangeList().stream().map(Utils::toString).collect(Collectors.joining(",", "[", "]")); }
private static List<Range> aggregateRangesResource(Map<String, List<Protos.Resource>> resourceMap, String resourceName) { if (resourceMap.get(resourceName) == null) { return Collections.emptyList(); } return resourceMap.get(resourceName).stream() .flatMap(r -> r.getRanges().getRangeList().stream()) .map(r -> new Range((int) r.getBegin(), (int) r.getEnd())) .collect(Collectors.toList()); } }
/** * Gets a stream of values from a collection of range resources. */ public static LongStream rangeValues(Collection<Protos.Resource> resources) { checkNotNull(resources); return resources.stream() .filter(Protos.Resource::hasRanges) .flatMap(r -> r.getRanges().getRangeList().stream()) .flatMapToLong(Utils::rangeValues); }
buf.append(value .getRanges() .getRangeList() .stream() .map(range -> String.format("%d-%d", range.getBegin(), range.getEnd()))
.flatMap(resource -> resource.getRanges().getRangeList().stream()) .flatMapToInt(range -> IntStream.rangeClosed((int) range.getBegin(), (int) range.getEnd())) .sorted()
if (availablePorts != null) { if (spec.getRanges().isEmpty()) { dynamicPort = availablePorts.getRanges().getRangeList().stream() .flatMap(r -> IntStream.rangeClosed((int) r.getBegin(), (int) r.getEnd()).boxed()) .filter(p -> !consumedPorts.contains(p)) .collect(Collectors.toList())); dynamicPort = availablePorts.getRanges().getRangeList().stream() .flatMap(r -> IntStream.rangeClosed((int) r.getBegin(), (int) r.getEnd()).boxed()) .filter(p -> !consumedPorts.contains(p))
.filter(priorTaskPort -> RangeUtils.isInAny(ranges.getRangeList(), priorTaskPort)) .map(ignored -> new ResourceLabels( resourceSpec, ResourceUtils.getNamespace(taskResource), resourceNamespace))); } else if (RangeUtils.isInAny(ranges.getRangeList(), portSpec.getPort())) {
break; case PORTS: for (Protos.Value.Range range : r.getRanges().getRangeList()) { ResourceEntries.RangeResourceEntry rangeResourceEntry = new ResourceEntries.RangeResourceEntry(reservationType, range.getBegin(), range.getEnd()); availableResources.get(resourceType).add(rangeResourceEntry, reservationType);
@VisibleForTesting SortedSet<Long> findPortsToUse(Offer offer, int maxCount) { SortedSet<Long> portsToUse = new TreeSet<Long>(); List<Value.Range> portRangesList = null; // Locate the port resource in the offer for (Resource resource : offer.getResourcesList()) { if (resource.getName().equals(PORT_RESOURCE_NAME)) { portRangesList = resource.getRanges().getRangeList(); break; } } LOGGER.fine("portRangesList=" + portRangesList); /** * We need to find maxCount ports to use. * We are provided a list of port ranges to use * We are assured by the offer check that we have enough ports to use */ // Check this port range for ports that we can use if (portRangesList != null) { for (Value.Range currentPortRange : portRangesList) { // Check each port until we reach the end of the current range long begin = currentPortRange.getBegin(); long end = currentPortRange.getEnd(); for (long candidatePort = begin; candidatePort <= end && portsToUse.size() < maxCount; candidatePort++) { portsToUse.add(candidatePort); } } } return portsToUse; }
@Test public void testGetUpdateOfferRequirement() throws Exception { OfferRequirement requirement = provider.getNewOfferRequirement( CassandraTask.TYPE.CASSANDRA_DAEMON.name(), testTaskInfo); Protos.TaskInfo taskInfo = requirement.getTaskRequirements().iterator().next().getTaskInfo(); Assert.assertEquals(taskInfo.getName(), "test-daemon"); Assert.assertTrue(taskInfo.getTaskId().getValue().contains("test-daemon")); Assert.assertEquals("", taskInfo.getSlaveId().getValue()); List<Protos.Resource> resources = taskInfo.getResourcesList(); Assert.assertEquals(4, resources.size()); Protos.Resource cpusResource = resources.get(0); Assert.assertEquals("cpus", cpusResource.getName()); Assert.assertEquals(testCpus, cpusResource.getScalar().getValue(), 0.0); Protos.Resource memResource = resources.get(1); Assert.assertEquals("mem", memResource.getName()); Assert.assertEquals(testMem, memResource.getScalar().getValue(), 0.0); Protos.Resource diskResource = resources.get(2); Assert.assertEquals("disk", diskResource.getName()); Assert.assertEquals(testDisk, diskResource.getScalar().getValue(), 0.0); Protos.Resource portsResource = resources.get(3); Assert.assertEquals("ports", portsResource.getName()); Assert.assertTrue(portsResource.getRanges().getRangeList().get(0).getBegin() >= testPortBegin); Assert.assertTrue(portsResource.getRanges().getRangeList().get(0).getEnd() >= testPortBegin); }
Assert.assertTrue(portsResource.getRanges().getRangeList().get(0).getBegin() >= testPortBegin); Assert.assertTrue(portsResource.getRanges().getRangeList().get(0).getEnd() >= testPortEnd);
private void parseOffer(Offer offer) { // Pull out the cpus, memory, disk, and 2 ports from the offer. for (Resource resource : offer.getResourcesList()) { if (resource.getName().equals("cpus") && resource.getType() == Value.Type.SCALAR) { cpus = resource.getScalar().getValue(); cpuRole = resource.getRole(); } else if (resource.getName().equals("mem") && resource.getType() == Value.Type.SCALAR) { mem = resource.getScalar().getValue(); memRole = resource.getRole(); } else if (resource.getName().equals("disk") && resource.getType() == Value.Type.SCALAR) { disk = resource.getScalar().getValue(); diskRole = resource.getRole(); } else if (resource.getName().equals("ports") && resource.getType() == Value.Type.RANGES) { portRole = resource.getRole(); ports = resource.getRanges().getRangeList(); } } }
private Iterator<Long> getPortMappingIterator(TaskInfo taskInfo) { List<Resource> list = taskInfo.getResourcesList(); List<Long> ports = new ArrayList<Long>(); for (Resource resource : list) { String name = resource.getName(); if ("ports".equals(name)) { Ranges ranges = resource.getRanges(); for (Range range : ranges.getRangeList()) { long startPort = range.getBegin(); long endPort = range.getEnd(); for (int i = 0; i <= endPort - startPort; i++) { ports.add(startPort + i); } } } } return ports.iterator(); }
@Override public TaskProposal createProposal(OfferEvaluation offerEvaluation) { return new TaskProposal( offerEvaluation.getOffer(), taskInfoFactory.create( offerEvaluation.getTaskId(), offerEvaluation.getOffer(), offerEvaluation.getResources().stream().filter(resource -> resource.getType() != Protos.Value.Type.RANGES || !resource.getRanges().getRangeList().isEmpty()).collect(Collectors.toList()), new ExecutionParameters( offerEvaluation.getEnvironmentVariables(), offerEvaluation.getPortMappings(), offerEvaluation.getVolumeMappings() ) ) ); } }
/** * Pretty-print mesos protobuf Ranges. */ private static String rangesToString(Ranges ranges) { List<String> rangesAsStrings = Lists.transform(ranges.getRangeList(), rangeToStringTransform); return String.format("[%s]", StringUtils.join(rangesAsStrings, ",")); }
private static Value.Ranges subtract(Value.Ranges ranges1, Value.Ranges ranges2) { List<Range> list1 = ranges1.getRangeList(); List<Range> list2 = ranges2.getRangeList(); List<Range> list = RangeUtils.subtractRanges(list1, list2); return Value.Ranges.newBuilder().addAllRange(list).build(); }
private static Set<Integer> getPortsInResource(Protos.Resource resource) { if (!resource.getName().equals(Constants.PORTS_RESOURCE_TYPE)) { return Collections.emptySet(); } return resource.getRanges().getRangeList().stream() .flatMap(r -> IntStream.rangeClosed((int) r.getBegin(), (int) r.getEnd()).boxed()) .filter(p -> p != 0) .collect(Collectors.toSet()); }
private static Value.Ranges add(Value.Ranges ranges1, Value.Ranges ranges2) { List<Range> list1 = ranges1.getRangeList(); List<Range> list2 = ranges2.getRangeList(); List<Range> list = RangeUtils.mergeRanges(list1, list2); return Value.Ranges.newBuilder().addAllRange(list).build(); }
private static Integer compare(Value.Ranges ranges1, Value.Ranges ranges2) { List<Range> list1 = ranges1.getRangeList(); List<Range> list2 = ranges2.getRangeList(); if (RangeUtils.rangesEqual(list1, list2)) { return 0; } else if (RangeUtils.subtractRanges(list1, list2).size() == 0) { return -1; } else { return 1; } }
List<Protos.Value.Range> remainingRanges = new ArrayList<>(available.getRanges().getRangeList()); for (ListIterator<Protos.Value.Range> j = remainingRanges.listIterator(); j.hasNext();) { if (amount <= 0) {