@Override public boolean blobExists(String container, String name) { return blobMetadata(container, name) != null; }
@Override public boolean createContainerInLocation(Location location, String container) { return createContainerInLocation(location, container, CreateContainerOptions.NONE); }
@Override @Beta public void downloadBlob(String container, String name, File destination) { downloadBlob(container, name, destination, userExecutor); }
@Override public void abortMultipartUpload(MultipartUpload mpu) { ImmutableList.Builder<String> names = ImmutableList.builder(); for (MultipartPart part : listMultipartUpload(mpu)) { names.add(getMPUPartName(mpu, part.partNumber())); } removeBlobs(mpu.containerName(), names.build()); }
@Beta protected String putMultipartBlob(String container, Blob blob, PutOptions overrides, ListeningExecutorService executor) { ArrayList<ListenableFuture<MultipartPart>> parts = new ArrayList<ListenableFuture<MultipartPart>>(); long contentLength = checkNotNull(blob.getMetadata().getContentMetadata().getContentLength(), "must provide content-length to use multi-part upload"); MultipartUploadSlicingAlgorithm algorithm = new MultipartUploadSlicingAlgorithm( getMinimumMultipartPartSize(), getMaximumMultipartPartSize(), getMaximumNumberOfParts()); long partSize = algorithm.calculateChunkSize(contentLength); MultipartUpload mpu = initiateMultipartUpload(container, blob.getMetadata(), partSize, overrides); int partNumber = 0; for (Payload payload : slicer.slice(blob.getPayload(), partSize)) { BlobUploader b = new BlobUploader(mpu, partNumber++, payload); parts.add(executor.submit(b)); } return completeMultipartUpload(mpu, Futures.getUnchecked(Futures.allAsList(parts))); }
@Override public String completeMultipartUpload(MultipartUpload mpu, List<MultipartPart> parts) { ImmutableList.Builder<Segment> builder = ImmutableList.builder(); for (MultipartPart part : parts) { String path = mpu.containerName() + "/" + getMPUPartName(mpu, part.partNumber()); builder.add(Segment.builder().path(path).etag(part.partETag()).sizeBytes(part.partSize()).build()); } return api.getStaticLargeObjectApi(regionId, mpu.containerName()).replaceManifest(mpu.blobName(), builder.build(), mpu.blobMetadata().getUserMetadata(), getContentMetadataForManifest(mpu.blobMetadata().getContentMetadata())); }
@Override public void clearContainer(String containerName) { clearContainer(containerName, recursive()); }
@Override public MultipartPart uploadMultipartPart(MultipartUpload mpu, int partNumber, Payload payload) { String partName = getMPUPartName(mpu, partNumber); String eTag = api.getObjectApi(regionId, mpu.containerName()).put(partName, payload); long partSize = payload.getContentMetadata().getContentLength(); Date lastModified = null; // Swift does not return Last-Modified return MultipartPart.create(partNumber, partSize, eTag, lastModified); }
@Override public Blob getBlob(String container, String key) { return getBlob(container, key, GetOptions.NONE); }
@Beta protected String putMultipartBlob(String container, Blob blob, PutOptions overrides, ListeningExecutorService executor) { ArrayList<ListenableFuture<MultipartPart>> parts = new ArrayList<ListenableFuture<MultipartPart>>(); long contentLength = checkNotNull(blob.getMetadata().getContentMetadata().getContentLength(), "must provide content-length to use multi-part upload"); MultipartUploadSlicingAlgorithm algorithm = new MultipartUploadSlicingAlgorithm( getMinimumMultipartPartSize(), getMaximumMultipartPartSize(), getMaximumNumberOfParts()); long partSize = algorithm.calculateChunkSize(contentLength); MultipartUpload mpu = initiateMultipartUpload(container, blob.getMetadata(), partSize, overrides); int partNumber = 0; for (Payload payload : slicer.slice(blob.getPayload(), partSize)) { BlobUploader b = new BlobUploader(mpu, partNumber++, payload); parts.add(executor.submit(b)); } return completeMultipartUpload(mpu, Futures.getUnchecked(Futures.allAsList(parts))); }
@Override public void abortMultipartUpload(MultipartUpload mpu) { ImmutableList.Builder<String> names = ImmutableList.builder(); for (MultipartPart part : listMultipartUpload(mpu)) { names.add(getMPUPartName(mpu, part.partNumber())); } removeBlobs(mpu.containerName(), names.build()); }
@Override public String completeMultipartUpload(MultipartUpload mpu, List<MultipartPart> parts) { ImmutableList.Builder<Segment> builder = ImmutableList.builder(); for (MultipartPart part : parts) { String path = mpu.containerName() + "/" + getMPUPartName(mpu, part.partNumber()); builder.add(Segment.builder().path(path).etag(part.partETag()).sizeBytes(part.partSize()).build()); } return api.getStaticLargeObjectApi(regionId, mpu.containerName()).replaceManifest(mpu.blobName(), builder.build(), mpu.blobMetadata().getUserMetadata(), getContentMetadataForManifest(mpu.blobMetadata().getContentMetadata())); }
@Override public void clearContainer(String containerName) { clearContainer(containerName, recursive()); }
@Override public MultipartPart uploadMultipartPart(MultipartUpload mpu, int partNumber, Payload payload) { String partName = getMPUPartName(mpu, partNumber); String eTag = api.getObjectApi(regionId, mpu.containerName()).put(partName, payload); long partSize = payload.getContentMetadata().getContentLength(); Date lastModified = null; // Swift does not return Last-Modified return MultipartPart.create(partNumber, partSize, eTag, lastModified); }
@Override public Blob getBlob(String container, String key) { return getBlob(container, key, GetOptions.NONE); }
@Beta protected String putMultipartBlob(String container, Blob blob, PutOptions overrides, ListeningExecutorService executor) { ArrayList<ListenableFuture<MultipartPart>> parts = new ArrayList<ListenableFuture<MultipartPart>>(); long contentLength = checkNotNull(blob.getMetadata().getContentMetadata().getContentLength(), "must provide content-length to use multi-part upload"); MultipartUploadSlicingAlgorithm algorithm = new MultipartUploadSlicingAlgorithm( getMinimumMultipartPartSize(), getMaximumMultipartPartSize(), getMaximumNumberOfParts()); long partSize = algorithm.calculateChunkSize(contentLength); MultipartUpload mpu = initiateMultipartUpload(container, blob.getMetadata(), partSize, overrides); int partNumber = 0; for (Payload payload : slicer.slice(blob.getPayload(), partSize)) { BlobUploader b = new BlobUploader(mpu, partNumber++, payload); parts.add(executor.submit(b)); } return completeMultipartUpload(mpu, Futures.getUnchecked(Futures.allAsList(parts))); }
@Override public void abortMultipartUpload(MultipartUpload mpu) { ImmutableList.Builder<String> names = ImmutableList.builder(); for (MultipartPart part : listMultipartUpload(mpu)) { names.add(getMPUPartName(mpu, part.partNumber())); } removeBlobs(mpu.containerName(), names.build()); }
@Override public String completeMultipartUpload(MultipartUpload mpu, List<MultipartPart> parts) { ImmutableList.Builder<Segment> builder = ImmutableList.builder(); for (MultipartPart part : parts) { String path = mpu.containerName() + "/" + getMPUPartName(mpu, part.partNumber()); builder.add(Segment.builder().path(path).etag(part.partETag()).sizeBytes(part.partSize()).build()); } return api.getStaticLargeObjectApi(regionId, mpu.containerName()).replaceManifest(mpu.blobName(), builder.build(), mpu.blobMetadata().getUserMetadata(), getContentMetadataForManifest(mpu.blobMetadata().getContentMetadata())); }
@Override public boolean blobExists(String container, String name) { return blobMetadata(container, name) != null; }
@Override public void clearContainer(String containerName) { clearContainer(containerName, recursive()); }