public static List<Resource> combineResources(List<List<Resource>> resourcesList) { List<Resource> resources = new ArrayList<>(); for (List<Resource> resourcesToAdd : resourcesList) { for (Resource resource : resourcesToAdd) { Optional<Resource> matched = getMatchingResource(resource, resources); if (!matched.isPresent()) { resources.add(resource); } else { int index = resources.indexOf(matched.get()); Resource.Builder resourceBuilder = resource.toBuilder().clone(); if (resource.hasScalar()) { resourceBuilder.setScalar(resource.toBuilder().getScalarBuilder().setValue(resource.getScalar().getValue() + matched.get().getScalar().getValue()).build()); resources.set(index, resourceBuilder.build()); } else if (resource.hasRanges()) { Ranges.Builder newRanges = Ranges.newBuilder(); resource.getRanges().getRangeList().forEach(newRanges::addRange); matched.get().getRanges().getRangeList().forEach(newRanges::addRange); resourceBuilder.setRanges(newRanges); resources.set(index, resourceBuilder.build()); } else { throw new IllegalStateException(String.format("Can't subtract non-scalar or range resources %s", formatForLogging(resource))); } } } } return resources; }
public static List<Resource> subtractResources(List<Resource> resources, List<Resource> subtract) { List<Resource> remaining = Lists.newArrayListWithCapacity(resources.size()); for (Resource resource : resources) { Optional<Resource> matched = getMatchingResource(resource, subtract); if (!matched.isPresent()) { remaining.add(resource.toBuilder().clone().build()); } else { Resource.Builder resourceBuilder = resource.toBuilder().clone(); if (resource.hasScalar()) { resourceBuilder.setScalar(resource.toBuilder().getScalarBuilder().setValue(resource.getScalar().getValue() - matched.get().getScalar().getValue()).build()); } else if (resource.hasRanges()) { resourceBuilder.setRanges(subtractRanges(resource.getRanges(), matched.get().getRanges())); } else { throw new IllegalStateException(String.format("Can't subtract non-scalar or range resources %s", formatForLogging(resource))); } remaining.add(resourceBuilder.build()); } } return remaining; }
private static Ranges getRanges(List<Resource> resources, String name) { for (Resource r : resources) { if (r.hasName() && r.getName().equals(name) && r.hasRanges()) { return r.getRanges(); } } return Ranges.getDefaultInstance(); }
public static List<Resource> combineResources(List<List<Resource>> resourcesList) { List<Resource> resources = new ArrayList<>(); for (List<Resource> resourcesToAdd : resourcesList) { for (Resource resource : resourcesToAdd) { Optional<Resource> matched = getMatchingResource(resource, resources); if (!matched.isPresent()) { resources.add(resource); } else { int index = resources.indexOf(matched.get()); Resource.Builder resourceBuilder = resource.toBuilder().clone(); if (resource.hasScalar()) { resourceBuilder.setScalar(resource.toBuilder().getScalarBuilder().setValue(resource.getScalar().getValue() + matched.get().getScalar().getValue()).build()); resources.set(index, resourceBuilder.build()); } else if (resource.hasRanges()) { Ranges.Builder newRanges = Ranges.newBuilder(); resource.getRanges().getRangeList().forEach(newRanges::addRange); matched.get().getRanges().getRangeList().forEach(newRanges::addRange); resourceBuilder.setRanges(newRanges); resources.set(index, resourceBuilder.build()); } else { throw new IllegalStateException(String.format("Can't subtract non-scalar or range resources %s", formatForLogging(resource))); } } } } return resources; }
public static List<Resource> subtractResources(List<Resource> resources, List<Resource> subtract) { List<Resource> remaining = Lists.newArrayListWithCapacity(resources.size()); for (Resource resource : resources) { Optional<Resource> matched = getMatchingResource(resource, subtract); if (!matched.isPresent()) { remaining.add(resource.toBuilder().clone().build()); } else { Resource.Builder resourceBuilder = resource.toBuilder().clone(); if (resource.hasScalar()) { resourceBuilder.setScalar(resource.toBuilder().getScalarBuilder().setValue(resource.getScalar().getValue() - matched.get().getScalar().getValue()).build()); } else if (resource.hasRanges()) { resourceBuilder.setRanges(subtractRanges(resource.getRanges(), matched.get().getRanges())); } else { throw new IllegalStateException(String.format("Can't subtract non-scalar or range resources %s", formatForLogging(resource))); } remaining.add(resourceBuilder.build()); } } return remaining; }
public static long[] getPorts(Resource portsResource, int numPorts) { long[] ports = new long[numPorts]; if (numPorts == 0) { return ports; } int idx = 0; for (Range r : portsResource.getRanges().getRangeList()) { for (long port = r.getBegin(); port <= r.getEnd(); port++) { ports[idx++] = port; if (idx >= numPorts) { return ports; } } } return ports; }
private static Ranges getRanges(List<Resource> resources, String name) { for (Resource r : resources) { if (r.hasName() && r.getName().equals(name) && r.hasRanges()) { return r.getRanges(); } } return Ranges.getDefaultInstance(); }
public static long[] getPorts(Resource portsResource, int numPorts) { long[] ports = new long[numPorts]; if (numPorts == 0) { return ports; } int idx = 0; for (Range r : portsResource.getRanges().getRangeList()) { for (long port = r.getBegin(); port <= r.getEnd(); port++) { ports[idx++] = port; if (idx >= numPorts) { return ports; } } } return ports; }