Example usage for com.amazonaws.services.s3.model InitiateMultipartUploadRequest withAccessControlList

List of usage examples for com.amazonaws.services.s3.model InitiateMultipartUploadRequest withAccessControlList

Introduction

In this page you can find the example usage for com.amazonaws.services.s3.model InitiateMultipartUploadRequest withAccessControlList.

Prototype

public InitiateMultipartUploadRequest withAccessControlList(AccessControlList accessControlList) 

Source Link

Document

Sets the optional access control list for the new upload.

Usage

From source file:com.tango.BucketSyncer.KeyJobs.S32S3MultipartKeyCopyJob.java

License:Apache License

@Override
boolean keyCopied(ObjectMetadata sourceMetadata, AccessControlList objectAcl) {
    long objectSize = summary.getSize();
    MirrorOptions options = context.getOptions();
    String sourceBucketName = options.getSourceBucket();
    int maxPartRetries = options.getMaxRetries();
    String targetBucketName = options.getDestinationBucket();
    List<CopyPartResult> copyResponses = new ArrayList<CopyPartResult>();
    if (options.isVerbose()) {
        log.info("Initiating multipart upload request for {}", summary.getKey());
    }//w w  w .j a v  a  2s. c  o m
    InitiateMultipartUploadRequest initiateRequest = new InitiateMultipartUploadRequest(targetBucketName,
            keydest).withObjectMetadata(sourceMetadata);

    if (options.isCrossAccountCopy()) {
        initiateRequest.withCannedACL(CannedAccessControlList.BucketOwnerFullControl);
    } else {
        initiateRequest.withAccessControlList(objectAcl);
    }

    InitiateMultipartUploadResult initResult = client.initiateMultipartUpload(initiateRequest);

    long partSize = options.getUploadPartSize();
    long bytePosition = 0;

    for (int i = 1; bytePosition < objectSize; i++) {
        long lastByte = bytePosition + partSize - 1 >= objectSize ? objectSize - 1
                : bytePosition + partSize - 1;
        String infoMessage = String.format("Copying: %s to %s", bytePosition, lastByte);
        if (options.isVerbose()) {
            log.info(infoMessage);
        }
        CopyPartRequest copyRequest = new CopyPartRequest().withDestinationBucketName(targetBucketName)
                .withDestinationKey(keydest).withSourceBucketName(sourceBucketName)
                .withSourceKey(summary.getKey()).withUploadId(initResult.getUploadId())
                .withFirstByte(bytePosition).withLastByte(lastByte).withPartNumber(i);

        for (int tries = 1; tries <= maxPartRetries; tries++) {
            try {
                if (options.isVerbose()) {
                    log.info("try : {}", tries);
                }
                context.getStats().copyCount.incrementAndGet();
                CopyPartResult copyPartResult = client.copyPart(copyRequest);
                copyResponses.add(copyPartResult);
                if (options.isVerbose()) {
                    log.info("completed {} ", infoMessage);
                }
                break;
            } catch (Exception e) {
                if (tries == maxPartRetries) {
                    client.abortMultipartUpload(new AbortMultipartUploadRequest(targetBucketName, keydest,
                            initResult.getUploadId()));
                    log.error("Exception while doing multipart copy: {}", e);
                    return false;
                }
            }
        }
        bytePosition += partSize;
    }
    CompleteMultipartUploadRequest completeRequest = new CompleteMultipartUploadRequest(targetBucketName,
            keydest, initResult.getUploadId(), getETags(copyResponses));
    client.completeMultipartUpload(completeRequest);
    if (options.isVerbose()) {
        log.info("completed multipart request for : {}", summary.getKey());
    }
    context.getStats().bytesCopied.addAndGet(objectSize);
    return true;
}