List<Protos.Value.Range> remainingRanges = new ArrayList<>(available.getRanges().getRangeList()); for (ListIterator<Protos.Value.Range> j = remainingRanges.listIterator(); j.hasNext();) { if (amount <= 0) { 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());
&& resource.getType() == Value.Type.RANGES) { portsRole = resource.getRole(); for (Value.Range range : resource.getRanges().getRangeList()) { Integer begin = (int) range.getBegin(); Integer end = (int) range.getEnd(); .setRanges( Value.Ranges .newBuilder() .addRange(Value.Range.newBuilder() .setBegin(httpAddress.getPort())
.setRanges( Value.Ranges .newBuilder() .addRange( Value.Range.newBuilder().setBegin(ports.get(0))
String roleToUse = findRoleForPorts(offer); Iterator<Long> iterator = portsToUse.iterator(); Value.Ranges.Builder portRangesBuilder = Value.Ranges.newBuilder();
PodInfoBuilder podInfoBuilder) long requestedPort = portSpec.getValue().getRanges().getRange(0).getBegin(); long assignedPort = requestedPort; if (requestedPort == 0) {
} else if (resource.getName().equals("ports")) { if (resource.getType().equals(Value.Type.RANGES)) { ports = resource.getRanges().getRangeList(); } else { LOGGER.severe("Ports resource was not a range: " + resource.getType().toString());
long port = resource.getRanges().getRange(0).getBegin();
Assert.assertEquals("ports", portsResource.getName()); Assert.assertEquals(Protos.Value.Type.RANGES, portsResource.getType()); Assert.assertTrue(portsResource.getRanges().getRangeList().get(0).getBegin() >= testPortBegin); Assert.assertTrue(portsResource.getRanges().getRangeList().get(0).getEnd() >= testPortBegin); Assert.assertEquals(testRole, portsResource.getRole()); Assert.assertEquals(testPrincipal, portsResource.getReservation().getPrincipal());
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() .setType(Protos.Value.Type.RANGES) .setName("ports") .setRanges(Protos.Value.Ranges.newBuilder().addAllRange( portMappings.stream().map(PortMapping::toRange).collect(Collectors.toList()) ))
Long.toString(r.getRanges().getRange(0).getBegin()) : dynamicPortAssignment;
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))
Assert.assertEquals(10000, fulfilledPortResource1.getRanges().getRange(0).getBegin()); Assert.assertEquals(10000, fulfilledPortResource1.getRanges().getRange(0).getEnd()); Assert.assertEquals(10001, fulfilledPortResource2.getRanges().getRange(0).getBegin()); Assert.assertEquals(10001, fulfilledPortResource2.getRanges().getRange(0).getEnd()); Assert.assertEquals(String.valueOf(10001), envvars.get(portenv1).getValue()); Assert.assertEquals(10000, taskInfo.getResources(0).getRanges().getRange(0).getBegin()); Assert.assertEquals(10000, taskInfo.getResources(0).getRanges().getRange(0).getEnd()); Assert.assertEquals(10001, taskInfo.getResources(1).getRanges().getRange(0).getBegin()); Assert.assertEquals(10001, taskInfo.getResources(1).getRanges().getRange(0).getEnd());
Protos.Resource resource = recommendation.getOperation().get().getReserve().getResources(0); Assert.assertEquals( 10000, resource.getRanges().getRange(0).getBegin(), resource.getRanges().getRange(0).getEnd()); Protos.TaskInfo.Builder taskBuilder = podInfoBuilder.getTaskBuilders().stream().findFirst().get(); boolean portInTaskEnv = false;
Protos.Resource resource = recommendation.getOperation().get().getReserve().getResources(0); Assert.assertEquals( 10000, resource.getRanges().getRange(0).getBegin(), resource.getRanges().getRange(0).getEnd()); Protos.TaskInfo.Builder taskBuilder = podInfoBuilder.getTaskBuilders().stream().findFirst().get(); boolean portInTaskEnv = false;
boolean hasMultiplePorts = ranges.getRangeCount() != 1 || ranges.getRange(0).getEnd() - ranges.getRange(0).getBegin() != 0; .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);
private Protos.Value.Ranges portRanges(final Resource portResource) { final Protos.Value.Ranges.Builder rangeBuilder = Protos.Value.Ranges.newBuilder(); final List<Integer> reservedPorts = new ArrayList<Integer>(); //Bottom end of any port range is 0 + 1. We add it manually to get things started. reservedPorts.add(0); for (final String port : portResource.getStringSetValue()) { reservedPorts.add(Integer.valueOf(port)); } // We need the list of reserved ports sorted to properly turn them into the Mesos expected port ranges. Collections.sort(reservedPorts); for (int i = 0; i < reservedPorts.size(); i++) { Integer realStart = reservedPorts.get(i) + 1; // Don't allow port usage past the maximum Integer realEnd = AWS_ECS_MAX_PORT; if (i + 1 < reservedPorts.size()) { realEnd = Math.min(reservedPorts.get(i + 1) - 1, realEnd); } if (realEnd >= realStart) { rangeBuilder.addRange( Protos.Value.Range.newBuilder() .setBegin(realStart.longValue()) .setEnd(realEnd.longValue()) .build() ); } } return rangeBuilder.build(); } }