Example usage for com.amazonaws.services.ec2 AmazonEC2Client copySnapshot

List of usage examples for com.amazonaws.services.ec2 AmazonEC2Client copySnapshot

Introduction

In this page you can find the example usage for com.amazonaws.services.ec2 AmazonEC2Client copySnapshot.

Prototype

@Override
public CopySnapshotResult copySnapshot(CopySnapshotRequest request) 

Source Link

Document

Copies a point-in-time snapshot of an EBS volume and stores it in Amazon S3.

Usage

From source file:com.pearson.eidetic.aws.EC2ClientMethods.java

public static CopySnapshotResult copySnapshot(AmazonEC2Client ec2Client, CopySnapshotRequest snapshotRequest,
        Integer numRetries, Integer maxApiRequestsPerSecond, String uniqueAwsAccountIdentifier) {
    CopySnapshotResult copySnapshotResult = null;

    if (numRetries >= 3) {
        numRetries = 3;// ww w  .  ja  va2s  .co  m
    }

    for (int i = 0; i <= numRetries; i++) {
        try {
            // if the initial download attempt failed, wait for i * 500ms 
            if (i > 0) {
                long sleepTimeInMilliseconds = 500 * i;
                Threads.sleepMilliseconds(sleepTimeInMilliseconds);
            }

            AtomicLong requestAttemptCounter = GlobalVariables.apiRequestAttemptCountersByAwsAccount
                    .get(uniqueAwsAccountIdentifier);
            long currentRequestCount = requestAttemptCounter.incrementAndGet();

            while (currentRequestCount > maxApiRequestsPerSecond) {
                Threads.sleepMilliseconds(50);
                currentRequestCount = requestAttemptCounter.incrementAndGet();
            }

            copySnapshotResult = ec2Client.copySnapshot(snapshotRequest);

            if (copySnapshotResult != null) {
                GlobalVariables.apiRequestCountersByAwsAccount.get(uniqueAwsAccountIdentifier)
                        .incrementAndGet();
                break;
            }
        } catch (Exception e) {
            if (e.toString().contains("20109") || e.toString().contains("Too many snapshot")
                    || e.toString().contains("retired")) {
                return copySnapshotResult;
            }

            logger.error("awsAccountNickname=\"" + uniqueAwsAccountIdentifier + "\","
                    + snapshotRequest.toString() + System.lineSeparator() + e.toString()
                    + System.lineSeparator() + StackTrace.getStringFromStackTrace(e));
        }
    }
    logger.info("awsAccountNickname=\"" + uniqueAwsAccountIdentifier
            + "\",Event=\"Snapshot Copied\", source_region=\"" + snapshotRequest.getSourceRegion()
            + "\", destination_region=\"" + snapshotRequest.getDestinationRegion() + "\", source_snapshot_id=\""
            + snapshotRequest.getSourceSnapshotId() + "\"");
    return copySnapshotResult;

}