/** * @param digest the digest used to retrieve the layer * @return the layer found, or {@code null} if not found * @throws LayerPropertyNotFoundException if getting the layer's blob descriptor fails */ @Nullable public T get(DescriptorDigest digest) throws LayerPropertyNotFoundException { if (!has(digest)) { return null; } for (T layer : layers) { if (layer.getBlobDescriptor().getDigest().equals(digest)) { return layer; } } throw new IllegalStateException("Layer digest exists but layer not found"); }
/** * Two {@link BlobDescriptor} objects are equal if their * * <ol> * <li>{@code digest}s are not null and equal, and * <li>{@code size}s are non-negative and equal * </ol> */ @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (size < 0 || !(obj instanceof BlobDescriptor)) { return false; } BlobDescriptor other = (BlobDescriptor) obj; return size == other.getSize() && digest.equals(other.getDigest()); }
@Override public DescriptorDigest handleResponse(Response response) throws IOException { // Checks if the image digest is as expected. DescriptorDigest expectedDigest = JsonTemplateMapper.toBlob(manifestTemplate) .writeTo(ByteStreams.nullOutputStream()) .getDigest(); List<String> receivedDigests = response.getHeader(RESPONSE_DIGEST_HEADER); if (receivedDigests.size() == 1) { try { DescriptorDigest receivedDigest = DescriptorDigest.fromDigest(receivedDigests.get(0)); if (expectedDigest.equals(receivedDigest)) { return expectedDigest; } } catch (DigestException ex) { // Invalid digest. } } // The received digest is not as expected. Warns about this. eventDispatcher.dispatch( LogEvent.warn(makeUnexpectedImageDigestWarning(expectedDigest, receivedDigests))); return expectedDigest; }
@Override public Void handleResponse(Response response) throws IOException, UnexpectedBlobDigestException { blobSizeConsumer.accept(response.getContentLength()); try (OutputStream outputStream = new ListenableCountingOutputStream( destinationOutputStream, blobProgressListener::handleByteCount, blobProgressListener.getDelayBetweenCallbacks())) { BlobDescriptor receivedBlobDescriptor = response.getBody().writeTo(outputStream); if (!blobDigest.equals(receivedBlobDescriptor.getDigest())) { throw new UnexpectedBlobDigestException( "The pulled BLOB has digest '" + receivedBlobDescriptor.getDigest() + "', but the request digest was '" + blobDigest + "'"); } } return null; }
/** * @param digest the digest used to retrieve the layer * @return the layer found, or {@code null} if not found * @throws LayerPropertyNotFoundException if getting the layer's blob descriptor fails */ @Nullable public T get(DescriptorDigest digest) throws LayerPropertyNotFoundException { if (!has(digest)) { return null; } for (T layer : layers) { if (layer.getBlobDescriptor().getDigest().equals(digest)) { return layer; } } throw new IllegalStateException("Layer digest exists but layer not found"); }
/** * @param digest the digest used to retrieve the layer * @return the layer found, or {@code null} if not found * @throws LayerPropertyNotFoundException if getting the layer's blob descriptor fails */ @Nullable public T get(DescriptorDigest digest) throws LayerPropertyNotFoundException { if (!has(digest)) { return null; } for (T layer : layers) { if (layer.getBlobDescriptor().getDigest().equals(digest)) { return layer; } } throw new IllegalStateException("Layer digest exists but layer not found"); }
/** * Two {@link BlobDescriptor} objects are equal if their * * <ol> * <li>{@code digest}s are not null and equal, and * <li>{@code size}s are non-negative and equal * </ol> */ @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (size < 0 || !(obj instanceof BlobDescriptor)) { return false; } BlobDescriptor other = (BlobDescriptor) obj; return size == other.getSize() && digest.equals(other.getDigest()); }
/** * Two {@link BlobDescriptor} objects are equal if their * * <ol> * <li>{@code digest}s are not null and equal, and * <li>{@code size}s are non-negative and equal * </ol> */ @Override public boolean equals(Object obj) { if (obj == this) { return true; } if (size < 0 || !(obj instanceof BlobDescriptor)) { return false; } BlobDescriptor other = (BlobDescriptor) obj; return size == other.getSize() && digest.equals(other.getDigest()); }
@Override public DescriptorDigest handleResponse(Response response) throws IOException { // Checks if the image digest is as expected. DescriptorDigest expectedDigest = JsonTemplateMapper.toBlob(manifestTemplate) .writeTo(ByteStreams.nullOutputStream()) .getDigest(); List<String> receivedDigests = response.getHeader(RESPONSE_DIGEST_HEADER); if (receivedDigests.size() == 1) { try { DescriptorDigest receivedDigest = DescriptorDigest.fromDigest(receivedDigests.get(0)); if (expectedDigest.equals(receivedDigest)) { return expectedDigest; } } catch (DigestException ex) { // Invalid digest. } } // The received digest is not as expected. Warns about this. eventDispatcher.dispatch( LogEvent.warn(makeUnexpectedImageDigestWarning(expectedDigest, receivedDigests))); return expectedDigest; }
@Override public DescriptorDigest handleResponse(Response response) throws IOException { // Checks if the image digest is as expected. DescriptorDigest expectedDigest = JsonTemplateMapper.toBlob(manifestTemplate) .writeTo(ByteStreams.nullOutputStream()) .getDigest(); List<String> receivedDigests = response.getHeader(RESPONSE_DIGEST_HEADER); if (receivedDigests.size() == 1) { try { DescriptorDigest receivedDigest = DescriptorDigest.fromDigest(receivedDigests.get(0)); if (expectedDigest.equals(receivedDigest)) { return expectedDigest; } } catch (DigestException ex) { // Invalid digest. } } // The received digest is not as expected. Warns about this. eventDispatcher.dispatch( LogEvent.warn(makeUnexpectedImageDigestWarning(expectedDigest, receivedDigests))); return expectedDigest; }
@Override public Void handleResponse(Response response) throws IOException, UnexpectedBlobDigestException { blobSizeConsumer.accept(response.getContentLength()); try (OutputStream outputStream = new ListenableCountingOutputStream( destinationOutputStream, blobProgressListener::handleByteCount, blobProgressListener.getDelayBetweenCallbacks())) { BlobDescriptor receivedBlobDescriptor = response.getBody().writeTo(outputStream); if (!blobDigest.equals(receivedBlobDescriptor.getDigest())) { throw new UnexpectedBlobDigestException( "The pulled BLOB has digest '" + receivedBlobDescriptor.getDigest() + "', but the request digest was '" + blobDigest + "'"); } } return null; }
@Override public Void handleResponse(Response response) throws IOException, UnexpectedBlobDigestException { blobSizeConsumer.accept(response.getContentLength()); try (OutputStream outputStream = new ListenableCountingOutputStream( destinationOutputStream, blobProgressListener::handleByteCount, blobProgressListener.getDelayBetweenCallbacks())) { BlobDescriptor receivedBlobDescriptor = response.getBody().writeTo(outputStream); if (!blobDigest.equals(receivedBlobDescriptor.getDigest())) { throw new UnexpectedBlobDigestException( "The pulled BLOB has digest '" + receivedBlobDescriptor.getDigest() + "', but the request digest was '" + blobDigest + "'"); } } return null; }