public static Optional<Protos.Resource.DiskInfo.Source> getDiskSource(Protos.Resource resource) { if (!isMountVolume(resource)) { return Optional.empty(); } return Optional.of(resource.getDisk().getSource()); }
/** * Converts the provided {@code OfferResources} instances into an ordered list of destroy and/or * unreserve operations. */ private static Collection<OfferRecommendation> toCleanupRecommendations( Collection<OfferResources> offerResourcesList) { // ORDERING IS IMPORTANT: // The resource lifecycle is RESERVE -> CREATE -> DESTROY -> UNRESERVE // Therefore we *must* put any DESTROY calls before any UNRESERVE calls List<OfferRecommendation> destroyRecommendations = new ArrayList<>(); List<OfferRecommendation> unreserveRecommendations = new ArrayList<>(); for (OfferResources offerResources : offerResourcesList) { for (Protos.Resource resource : offerResources.getResources()) { if (resource.hasDisk() && resource.getDisk().hasPersistence()) { // Permanent volume to be DESTROYed (and also UNRESERVEd) destroyRecommendations.add( new DestroyOfferRecommendation(offerResources.getOffer(), resource)); } // Reserved resource OR permanent volume to be UNRESERVEd unreserveRecommendations.add( new UnreserveOfferRecommendation(offerResources.getOffer(), resource)); } } // Order the recommendations as DESTROYs followed by UNRESERVEs, as mentioned above: List<OfferRecommendation> allRecommendations = new ArrayList<>(); allRecommendations.addAll(destroyRecommendations); allRecommendations.addAll(unreserveRecommendations); return allRecommendations; }
String persistenceId = createResource.getDisk().getPersistence().getId();
Assert.assertEquals(36, createResource.getDisk().getPersistence().getId().length()); Assert.assertEquals(TestConstants.PRINCIPAL, createResource.getDisk().getPersistence().getPrincipal()); Assert.assertTrue(createResource.getDisk().hasVolume()); String persistenceId = createResource.getDisk().getPersistence().getId(); Operation launchOperation = recommendations.get(6).getOperation().get(); Resource launchResource = launchOperation.getLaunchGroup().getTaskGroup().getTasks(0).getResources(1); Assert.assertEquals(persistenceId, launchResource.getDisk().getPersistence().getId()); Assert.assertEquals(TestConstants.PRINCIPAL, launchResource.getDisk().getPersistence().getPrincipal());
OfferEvaluatorTest.validateRole(launchResource); Assert.assertEquals(TestConstants.ROLE, ResourceUtils.getRole(launchResource)); Assert.assertEquals(TestConstants.MOUNT_DISK_SOURCE, launchResource.getDisk().getSource()); Assert.assertEquals(persistenceId, launchResource.getDisk().getPersistence().getId()); Assert.assertEquals(TestConstants.PRINCIPAL, launchResource.getDisk().getPersistence().getPrincipal()); validatePrincipal(launchResource); Assert.assertEquals(diskResourceId, getResourceId(launchResource));
Assert.assertEquals(reservationLabel.getKey(), "resource_id"); Assert.assertNotEquals(reservationLabel.getValue(), ""); Assert.assertNotEquals(resource.getDisk().getPersistence().getId(), "");
OfferEvaluatorTest.validateRole(reserveResource); Assert.assertEquals(TestConstants.ROLE, ResourceUtils.getRole(reserveResource)); Assert.assertEquals(TestConstants.MOUNT_DISK_SOURCE, reserveResource.getDisk().getSource()); validatePrincipal(reserveResource); Assert.assertEquals(36, getResourceId(reserveResource).length()); Assert.assertEquals(36, createResource.getDisk().getPersistence().getId().length()); Assert.assertEquals(TestConstants.MOUNT_DISK_SOURCE, createResource.getDisk().getSource()); Assert.assertEquals(TestConstants.PRINCIPAL, createResource.getDisk().getPersistence().getPrincipal()); Assert.assertTrue(createResource.getDisk().hasVolume());
static Optional<ResourceLabels> findMatchingDiskSpec( Protos.Resource taskResource, Collection<ResourceSpec> resourceSpecs, Optional<String> resourceNamespace) { if (!ResourceUtils.getResourceId(taskResource).isPresent()) { LOGGER.error("Failed to find resource ID for resource: {}", taskResource); return Optional.empty(); } return resourceSpecs.stream() .filter(resourceSpec -> resourceSpec instanceof VolumeSpec && taskResource .getDisk() .getVolume() .getContainerPath() .equals(((VolumeSpec) resourceSpec).getContainerPath())) .findFirst() .map(resourceSpec -> new ResourceLabels( resourceSpec, ((VolumeSpec) resourceSpec).withDiskSize(taskResource.getScalar().getValue()), ResourceUtils.getResourceId(taskResource).get(), getNamespaceLabel(ResourceUtils.getNamespace(taskResource), resourceNamespace), ResourceUtils.getPersistenceId(taskResource), ResourceUtils.getProviderId(taskResource), ResourceUtils.getDiskSource(taskResource))); }
private static void testExistingFromMountVolumeSpec(Optional<String> namespace) { VolumeSpec volumeSpec = DefaultVolumeSpec.createMountVolume( 10, TestConstants.CONTAINER_PATH, Collections.emptyList(), TestConstants.ROLE, Constants.ANY_ROLE, TestConstants.PRINCIPAL); Optional<String> resourceId = Optional.of(UUID.randomUUID().toString()); Optional<String> persistenceId = Optional.of(UUID.randomUUID().toString()); ResourceBuilder resourceBuilder = ResourceBuilder.fromSpec( volumeSpec, resourceId, namespace, persistenceId, Optional.empty(), Optional.of(TestConstants.MOUNT_DISK_SOURCE)); Protos.Resource resource = resourceBuilder.build(); validateDisk(resource, resourceId, namespace); Protos.Resource.DiskInfo diskInfo = resource.getDisk(); Assert.assertTrue(diskInfo.hasSource()); Assert.assertEquals(TestConstants.MOUNT_DISK_SOURCE, diskInfo.getSource()); Assert.assertEquals(persistenceId.get(), resource.getDisk().getPersistence().getId()); }
@SuppressWarnings("deprecation") private static VolumeSpec getVolumeSpec(Protos.Resource resource) { return resource.getDisk().hasSource() ? DefaultVolumeSpec.createMountVolume( resource.getScalar().getValue(), resource.getDisk().getVolume().getContainerPath(), resource.getDisk().getSource().hasProfile() ? Collections.singletonList(resource.getDisk().getSource().getProfile()) : Collections.emptyList(), ResourceUtils.getRole(resource), resource.getRole(), resource.getDisk().getPersistence().getPrincipal()) : DefaultVolumeSpec.createRootVolume( resource.getScalar().getValue(), resource.getDisk().getVolume().getContainerPath(), ResourceUtils.getRole(resource), resource.getRole(), resource.getDisk().getPersistence().getPrincipal()); }
private static void testNewFromMountVolumeSpec(Optional<String> namespace) { VolumeSpec volumeSpec = DefaultVolumeSpec.createMountVolume( 10, TestConstants.CONTAINER_PATH, Collections.emptyList(), TestConstants.ROLE, Constants.ANY_ROLE, TestConstants.PRINCIPAL); ResourceBuilder resourceBuilder = ResourceBuilder.fromSpec( volumeSpec, Optional.empty(), namespace, Optional.empty(), Optional.empty(), Optional.of(TestConstants.MOUNT_DISK_SOURCE)); Protos.Resource resource = resourceBuilder.build(); validateDisk(resource, Optional.empty(), namespace); Protos.Resource.DiskInfo diskInfo = resource.getDisk(); Assert.assertTrue(diskInfo.hasSource()); Assert.assertEquals(TestConstants.MOUNT_DISK_SOURCE, diskInfo.getSource()); }
private static void testExistingFromRootVolumeSpec(Optional<String> namespace) { VolumeSpec volumeSpec = DefaultVolumeSpec.createRootVolume( 10, TestConstants.CONTAINER_PATH, TestConstants.ROLE, Constants.ANY_ROLE, TestConstants.PRINCIPAL); Optional<String> resourceId = Optional.of(UUID.randomUUID().toString()); Optional<String> persistenceId = Optional.of(UUID.randomUUID().toString()); ResourceBuilder resourceBuilder = ResourceBuilder.fromSpec( volumeSpec, resourceId, namespace, persistenceId, Optional.empty(), Optional.empty()); Protos.Resource resource = resourceBuilder.build(); validateDisk(resource, resourceId, namespace); Assert.assertEquals(persistenceId.get(), resource.getDisk().getPersistence().getId()); }
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; }
@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); } }
private static void validateDisk(Protos.Resource resource, Optional<String> resourceId, Optional<String> namespace) { Assert.assertTrue(resource.hasDisk()); Protos.Resource.DiskInfo diskInfo = resource.getDisk(); Assert.assertTrue(diskInfo.hasPersistence()); Protos.Resource.DiskInfo.Persistence persistence = diskInfo.getPersistence(); Assert.assertEquals(36, persistence.getId().length()); Assert.assertEquals(TestConstants.PRINCIPAL, persistence.getPrincipal()); Assert.assertTrue(diskInfo.hasVolume()); Protos.Volume volume = diskInfo.getVolume(); Assert.assertEquals(TestConstants.CONTAINER_PATH, volume.getContainerPath()); Assert.assertEquals(Protos.Volume.Mode.RW, volume.getMode()); validateScalarResource(resource, resourceId, namespace); }