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 Resource newScalar(String name, double value, Optional<String> role) { Resource.Builder builder = Resource.newBuilder().setName(name).setType(Type.SCALAR).setScalar(Scalar.newBuilder().setValue(value).build()); if (role.isPresent()) { builder.setRole(role.get()); } return builder.build(); }
.setRole("*") .setType(org.apache.mesos.v1.Protos.Value.Type.SCALAR) .setScalar(org.apache.mesos.v1.Protos.Value.Scalar.newBuilder().setValue(cpus))) .addResources(org.apache.mesos.v1.Protos.Resource.newBuilder() .setName("mem") .setRole("*") .setType(org.apache.mesos.v1.Protos.Value.Type.SCALAR) .setScalar(org.apache.mesos.v1.Protos.Value.Scalar.newBuilder().setValue(mem))) .addResources(org.apache.mesos.v1.Protos.Resource.newBuilder() .setName("disk") .setRole("*") .setType(org.apache.mesos.v1.Protos.Value.Type.SCALAR) .setScalar(org.apache.mesos.v1.Protos.Value.Scalar.newBuilder().setValue(disk))) .build() ))
.setRole("*") .setType(org.apache.mesos.v1.Protos.Value.Type.SCALAR) .setScalar(org.apache.mesos.v1.Protos.Value.Scalar.newBuilder().setValue(cpus))) .addResources(org.apache.mesos.v1.Protos.Resource.newBuilder() .setName("mem") .setRole("*") .setType(org.apache.mesos.v1.Protos.Value.Type.SCALAR) .setScalar(org.apache.mesos.v1.Protos.Value.Scalar.newBuilder().setValue(mem))) .addResources(org.apache.mesos.v1.Protos.Resource.newBuilder() .setName("disk") .setRole("*") .setType(org.apache.mesos.v1.Protos.Value.Type.SCALAR) .setScalar(org.apache.mesos.v1.Protos.Value.Scalar.newBuilder().setValue(disk))) .build() ))
Resource.Builder cpusResource = Resource.newBuilder().setType(Type.SCALAR).setName(MesosUtils.CPUS).setScalar(Scalar.newBuilder().setValue(cpus)); Resource.Builder memoryResources = Resource.newBuilder().setType(Type.SCALAR).setName(MesosUtils.MEMORY).setScalar(Scalar.newBuilder().setValue(memory)); Resource.Builder diskResources = Resource.newBuilder().setType(Type.SCALAR).setName(MesosUtils.DISK).setScalar(Scalar.newBuilder().setValue(disk)); if(role.isPresent()) { cpusResource = cpusResource.setRole(role.get());
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; }
@Test public void testResourceAddition() { List<List<Resource>> toAdd = ImmutableList.of( ImmutableList.of( Resource.newBuilder().setType(Type.SCALAR).setName(MesosUtils.CPUS).setScalar(Scalar.newBuilder().setValue(1)).build(), Resource.newBuilder().setType(Type.SCALAR).setName(MesosUtils.MEMORY).setScalar(Scalar.newBuilder().setValue(1024)).build() ), ImmutableList.of( Resource.newBuilder().setType(Type.SCALAR).setName(MesosUtils.CPUS).setScalar(Scalar.newBuilder().setValue(2)).build(), Resource.newBuilder().setType(Type.SCALAR).setName(MesosUtils.MEMORY).setScalar(Scalar.newBuilder().setValue(1024)).build() ), ImmutableList.of( Resource.newBuilder().setType(Type.SCALAR).setName(MesosUtils.CPUS).setScalar(Scalar.newBuilder().setValue(3)).build(), Resource.newBuilder().setType(Type.SCALAR).setName(MesosUtils.MEMORY).setScalar(Scalar.newBuilder().setValue(1024)).build() ) ); List<Resource> combined = MesosUtils.combineResources(toAdd); Assert.assertEquals(6, MesosUtils.getNumCpus(combined, Optional.absent()), 0.1); Assert.assertEquals(3072, MesosUtils.getMemory(combined, Optional.absent()), 0.1); }
private List<Resource> createResources(int cpus, int memory, String... ranges) { List<Resource> resources = Lists.newArrayList(); if (cpus > 0) { resources.add(Resource.newBuilder().setType(Type.SCALAR).setName(MesosUtils.CPUS).setScalar(Scalar.newBuilder().setValue(cpus).build()).build()); } if (memory > 0) { resources.add(Resource.newBuilder().setType(Type.SCALAR).setName(MesosUtils.MEMORY).setScalar(Scalar.newBuilder().setValue(memory).build()).build()); } if (ranges.length > 0) { resources.add(buildPortRanges(ranges)); } return resources; }
private static Resource newScalar(String name, double value, Optional<String> role) { Resource.Builder builder = Resource.newBuilder().setName(name).setType(Type.SCALAR).setScalar(Scalar.newBuilder().setValue(value).build()); if (role.isPresent()) { builder.setRole(role.get()); } return builder.build(); }
Resource.Builder cpusResource = Resource.newBuilder().setType(Type.SCALAR).setName(MesosUtils.CPUS).setScalar(Scalar.newBuilder().setValue(cpus)); Resource.Builder memoryResources = Resource.newBuilder().setType(Type.SCALAR).setName(MesosUtils.MEMORY).setScalar(Scalar.newBuilder().setValue(memory)); Resource.Builder diskResources = Resource.newBuilder().setType(Type.SCALAR).setName(MesosUtils.DISK).setScalar(Scalar.newBuilder().setValue(disk)); if(role.isPresent()) { cpusResource = cpusResource.setRole(role.get());
@Test public void testResourceAddition() { List<List<Resource>> toAdd = ImmutableList.of( ImmutableList.of( Resource.newBuilder().setType(Type.SCALAR).setName(MesosUtils.CPUS).setScalar(Scalar.newBuilder().setValue(1)).build(), Resource.newBuilder().setType(Type.SCALAR).setName(MesosUtils.MEMORY).setScalar(Scalar.newBuilder().setValue(1024)).build() ), ImmutableList.of( Resource.newBuilder().setType(Type.SCALAR).setName(MesosUtils.CPUS).setScalar(Scalar.newBuilder().setValue(2)).build(), Resource.newBuilder().setType(Type.SCALAR).setName(MesosUtils.MEMORY).setScalar(Scalar.newBuilder().setValue(1024)).build() ), ImmutableList.of( Resource.newBuilder().setType(Type.SCALAR).setName(MesosUtils.CPUS).setScalar(Scalar.newBuilder().setValue(3)).build(), Resource.newBuilder().setType(Type.SCALAR).setName(MesosUtils.MEMORY).setScalar(Scalar.newBuilder().setValue(1024)).build() ) ); List<Resource> combined = MesosUtils.combineResources(toAdd); Assert.assertEquals(6, MesosUtils.getNumCpus(combined, Optional.absent()), 0.1); Assert.assertEquals(3072, MesosUtils.getMemory(combined, Optional.absent()), 0.1); }
private List<Resource> createResources(int cpus, int memory, String... ranges) { List<Resource> resources = Lists.newArrayList(); if (cpus > 0) { resources.add(Resource.newBuilder().setType(Type.SCALAR).setName(MesosUtils.CPUS).setScalar(Scalar.newBuilder().setValue(cpus).build()).build()); } if (memory > 0) { resources.add(Resource.newBuilder().setType(Type.SCALAR).setName(MesosUtils.MEMORY).setScalar(Scalar.newBuilder().setValue(memory).build()).build()); } if (ranges.length > 0) { resources.add(buildPortRanges(ranges)); } return resources; }