Example usage for org.apache.commons.lang3.tuple MutableTriple getMiddle

List of usage examples for org.apache.commons.lang3.tuple MutableTriple getMiddle

Introduction

In this page you can find the example usage for org.apache.commons.lang3.tuple MutableTriple getMiddle.

Prototype

@Override
public M getMiddle() 

Source Link

Usage

From source file:com.pearson.eidetic.driver.threads.subthreads.SnapshotVolumeSyncValidator.java

@Override
public void run() {
    isFinished_ = false;/*from w w  w .java 2  s .c o  m*/
    AmazonEC2Client ec2Client = connect(region_, awsAccessKeyId_, awsSecretKey_);

    for (Volume vol : VolumeSyncValidate_) {
        try {

            JSONParser parser = new JSONParser();

            String inttagvalue = getIntTagValue(vol);
            if (inttagvalue == null) {
                continue;
            }

            JSONObject eideticParameters;
            try {
                Object obj = parser.parse(inttagvalue);
                eideticParameters = (JSONObject) obj;
            } catch (Exception e) {
                logger.error("awsAccountId=\"" + uniqueAwsAccountIdentifier_
                        + "\",Event=Error, Error=\"Malformed Eidetic Tag\", Volume_id=\"" + vol.getVolumeId()
                        + "\", stacktrace=\"" + e.toString() + System.lineSeparator()
                        + StackTrace.getStringFromStackTrace(e) + "\"");
                continue;
            }
            if (eideticParameters == null) {
                continue;
            }

            //Same
            Integer keep = getKeep(eideticParameters, vol);
            if (keep == null) {
                continue;
            }

            JSONObject syncSnapshot = null;
            if (eideticParameters.containsKey("SyncSnapshot")) {
                syncSnapshot = (JSONObject) eideticParameters.get("SyncSnapshot");
            }
            if (syncSnapshot == null) {
                logger.error("awsAccountId=\"" + uniqueAwsAccountIdentifier_
                        + "\",Event=Error, Error=\"Malformed Eidetic Tag\", Volume_id=\"" + vol.getVolumeId()
                        + "\"");
                continue;
            }

            JSONObject validateParameters;
            try {
                validateParameters = (JSONObject) syncSnapshot.get("Validate");
            } catch (Exception e) {
                logger.error("awsAccountId=\"" + uniqueAwsAccountIdentifier_
                        + "\",Event=Error, Error=\"Malformed Eidetic Tag\", Volume_id=\"" + vol.getVolumeId()
                        + "\", stacktrace=\"" + e.toString() + System.lineSeparator()
                        + StackTrace.getStringFromStackTrace(e) + "\"");
                continue;
            }

            Integer createAfter = getCreateAfter(validateParameters, vol);

            String cluster = getCluster(validateParameters, vol);

            if (validateCluster_.containsKey(cluster)) {
                validateCluster_.get(cluster).add(new MutableTriple(vol, createAfter, keep));
            } else {
                validateCluster_.put(cluster, new ArrayList<MutableTriple<Volume, Integer, Integer>>());
                validateCluster_.get(cluster).add(new MutableTriple(vol, createAfter, keep));
            }

        } catch (Exception e) {
            logger.error("awsAccountId=\"" + uniqueAwsAccountIdentifier_
                    + "\",Event=\"Error\", Error=\"error in SnapshotVolumeSync workflow\", stacktrace=\""
                    + e.toString() + System.lineSeparator() + StackTrace.getStringFromStackTrace(e) + "\"");
        }

    }

    for (String cluster : validateCluster_.keySet()) {

        try {
            ArrayList<MutableTriple<Volume, Integer, Integer>> myList = validateCluster_.get(cluster);

            Boolean snapshotCluster = false;
            Integer min = Integer.MAX_VALUE;
            for (MutableTriple trip : myList) {
                if (((Integer) trip.getMiddle()) < min) {
                    min = (Integer) trip.getMiddle();
                }
            }

            for (MutableTriple trip : myList) {
                if (snapshotDecision(ec2Client, (Volume) trip.getLeft(), min)) {
                    snapshotCluster = true;
                }
            }

            if (snapshotCluster) {
                ArrayList<Volume> vols = new ArrayList<>();
                for (MutableTriple trip : myList) {
                    vols.add((Volume) trip.getLeft());
                }

                SnapshotVolumeSync thread = new SnapshotVolumeSync(awsAccessKeyId_, awsSecretKey_,
                        uniqueAwsAccountIdentifier_, maxApiRequestsPerSecond_,
                        ApplicationConfiguration.getAwsCallRetryAttempts(), region_, vols, true);

                try {
                    thread.run();
                } catch (Exception e) {
                    String responseMessage = "Error running cluster validator thread for cluster " + cluster;
                    logger.error("awsAccountId=\"" + uniqueAwsAccountIdentifier_ + "\",Error=\""
                            + responseMessage + "\"" + e.toString() + System.lineSeparator()
                            + StackTrace.getStringFromStackTrace(e) + "\"");
                }

                Integer wait = 0;
                while (!(thread.isFinished()) && (wait <= 200)) {
                    Threads.sleepMilliseconds(250);
                    //break after 50 seconds
                    wait = wait + 1;
                }

            }

        } catch (Exception e) {
            logger.error("awsAccountId=\"" + uniqueAwsAccountIdentifier_
                    + "\",Event=\"Error\", Error=\"error in SnapshotVolumeSync workflow\", stacktrace=\""
                    + e.toString() + System.lineSeparator() + StackTrace.getStringFromStackTrace(e) + "\"");
        }

    }

    ec2Client.shutdown();
    isFinished_ = true;
}