public static List<Resource> replaceDisks(final String path, final List<Resource> resources) { return resources.stream() .map(resource -> { if (isDisk(resource) && resource.hasDisk()) { return Resource.newBuilder(resource) .setDisk(createDiskInfo(path)) .build(); } else { return resource; } }).collect(Collectors.toList()); }
@SuppressWarnings("deprecation") private void freeAtomicResource(MesosResource mesosResource) { Resource.Builder resBuilder = Resource.newBuilder(mesosResource.getResource()); resBuilder.clearReservation(); resBuilder.setRole(Constants.ANY_ROLE); if (resBuilder.hasDisk()) { Resource.DiskInfo.Builder diskBuilder = Resource.DiskInfo.newBuilder(resBuilder.getDisk()); diskBuilder.clearPersistence(); diskBuilder.clearVolume(); resBuilder.setDisk(diskBuilder.build()); } Resource releasedResource = resBuilder.build(); List<MesosResource> resList = unreservedAtomicPool.get(mesosResource.getName()); if (resList == null) { resList = new ArrayList<>(); } resList.add(new MesosResource(releasedResource)); unreservedAtomicPool.put(mesosResource.getName(), resList); }
public UnreserveOfferRecommendation(Offer offer, Resource resource) { this.offer = offer; Resource.Builder resourceBuilder = resource.toBuilder(); Resource resourceR; // If non-root disk resource, we want to clear ALL fields except for the field indicating the disk source. if (resource.hasDisk() && resource.getDisk().hasSource()) { resourceR = resourceBuilder .setDisk(Resource.DiskInfo.newBuilder().setSource(resource.getDisk().getSource())) .build(); } else { resourceR = resourceBuilder.clearDisk().clearRevocable().build(); } this.operation = Operation.newBuilder() .setType(Operation.Type.UNRESERVE) .setUnreserve( Operation.Unreserve.newBuilder().addAllResources(Collections.singletonList(resourceR)) ) .build(); this.resource = resourceR; }
/** * The resource passed in is the fully completed Resource which will be launched. This may include volume/disk * information which is not appropriate for the RESERVE operation. It is filtered out here. */ private static Protos.Resource getReservedResource(Protos.Resource resource) { // The resource passed in is the fully completed Resource which will be launched. This may include volume/disk // information which is not appropriate for the RESERVE operation. It is filtered out here. Protos.Resource.Builder resBuilder = Protos.Resource.newBuilder(resource); if (resBuilder.hasDisk() && resBuilder.getDisk().hasSource()) { // Mount volume: Copy disk, but without 'persistence' nor 'volume' fields resBuilder.setDisk(Protos.Resource.DiskInfo.newBuilder(resBuilder.getDisk()) .clearPersistence() .clearVolume()); } else { // Root volume: Clear the disk. resBuilder.clearDisk(); } resBuilder.clearRevocable(); return resBuilder.build(); }
@Test public void testUnreserveMountDisk() { Protos.Resource resource = ResourceTestUtils.getReservedMountVolume(1, Optional.empty()); Protos.Offer offer = OfferTestUtils.getOffer(resource); UnreserveOfferRecommendation unreserveOfferRecommendation = new UnreserveOfferRecommendation(offer, resource); Protos.Offer.Operation operation = unreserveOfferRecommendation.getOperation().get(); Assert.assertEquals(1, operation.getUnreserve().getResourcesCount()); Protos.Resource opResource = operation.getUnreserve().getResources(0); Assert.assertTrue(opResource.hasDisk()); Assert.assertTrue(opResource.getDisk().hasSource()); Assert.assertFalse(opResource.hasRevocable()); resource = resource.toBuilder().setDisk( Protos.Resource.DiskInfo.newBuilder() .setSource(resource.getDisk().getSource())) .build(); Assert.assertEquals(resource, opResource); } }