long amountToTake = Math.min(availableRange.getEnd() - availableRange.getBegin() + 1, amount); Protos.Value.Range takenRange = availableRange.toBuilder().setEnd(availableRange.getBegin() + amountToTake - 1).build(); amount -= amountToTake; takenRanges.add(takenRange); long remaining = availableRange.getEnd() - takenRange.getEnd(); if (remaining > 0) { j.set(availableRange.toBuilder().setBegin(takenRange.getEnd() + 1).build());
portsRole = resource.getRole(); for (Value.Range range : resource.getRanges().getRangeList()) { Integer begin = (int) range.getBegin(); Integer end = (int) range.getEnd(); if (end < begin) { LOG.warn("Ignoring invalid port range: begin=" + begin + " end=" + end); Value.Ranges .newBuilder() .addRange(Value.Range.newBuilder() .setBegin(httpAddress.getPort()) .setEnd(httpAddress.getPort())) .addRange(Value.Range.newBuilder() .setBegin(reportAddress.getPort()) .setEnd(reportAddress.getPort()))))
.newBuilder() .addRange( Value.Range.newBuilder().setBegin(ports.get(0)) .setEnd(ports.get(0))) .addRange( Value.Range.newBuilder().setBegin(ports.get(1)) .setEnd(ports.get(1))))) .setExecutor(
.newBuilder() .setBegin(portToUse) .setEnd(portToUse)
PodInfoBuilder podInfoBuilder) long requestedPort = portSpec.getValue().getRanges().getRange(0).getBegin(); long assignedPort = requestedPort; if (requestedPort == 0) {
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());
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)) .findFirst(); .flatMap(r -> IntStream.rangeClosed((int) r.getBegin(), (int) r.getEnd()).boxed()) .filter(p -> !consumedPorts.contains(p)) .filter(constrainedPorts::contains)
Long.toString(r.getRanges().getRange(0).getBegin()) : dynamicPortAssignment;
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;
testPrincipal); Protos.Value.Range range = Protos.Value.Range.newBuilder().setBegin(testPortBegin).setEnd(testPortEnd).build(); Protos.Resource ports = ResourceUtils.getExpectedRanges( "ports",
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;
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(); } }