private void deleteCluster()

in src/main/java/com/amazonaws/services/neptune/cluster/RemoveCloneTask.java [48:113]


    private void deleteCluster(NeptuneClient neptuneClient) {
        System.err.println();
        System.err.println("Deleting cloned cluster " + clusterMetadata.clusterId() + "...");

        if (!clusterMetadata.isTaggedWithNeptuneExport()) {
            throw new IllegalStateException("Cluster must have an 'application' tag with the value '" +
                    NeptuneClusterMetadata.NEPTUNE_EXPORT_APPLICATION_TAG + "' before it can be deleted");
        }

        ExecutorService taskExecutor = Executors.newFixedThreadPool(1 + clusterMetadata.replicas().size());

        taskExecutor.execute(() -> deleteInstance(neptuneClient, clusterMetadata.primary()));

        for (String replicaId : clusterMetadata.replicas()) {
            taskExecutor.execute(() -> deleteInstance(neptuneClient, replicaId));
        }

        taskExecutor.shutdown();

        try {
            taskExecutor.awaitTermination(30, TimeUnit.MINUTES);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            throw new RuntimeException(e);
        }

        System.err.println("Deleting cluster...");

        neptuneClient.deleteDBCluster(DeleteDbClusterRequest.builder()
                .dbClusterIdentifier(clusterMetadata.clusterId())
                .skipFinalSnapshot(true)
                .build());

        try {

            boolean clusterIsBeingDeleted = neptuneClient.describeDBClusters(
                    DescribeDbClustersRequest.builder()
                            .dbClusterIdentifier(clusterMetadata.clusterId())
                            .build())
                    .dbClusters()
                    .size() > 0;

            while (clusterIsBeingDeleted) {
                try {
                    Thread.sleep(10000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                clusterIsBeingDeleted = neptuneClient.describeDBClusters(
                        DescribeDbClustersRequest.builder().dbClusterIdentifier(clusterMetadata.clusterId()).build())
                        .dbClusters()
                        .size() > 0;
            }
        } catch (DbClusterNotFoundException e) {
            // Do nothing
        }

        System.err.println("Deleting parameter groups...");

        neptuneClient.deleteDBClusterParameterGroup(DeleteDbClusterParameterGroupRequest.builder()
                .dbClusterParameterGroupName(clusterMetadata.dbClusterParameterGroupName()).build());

        neptuneClient.deleteDBParameterGroup(DeleteDbParameterGroupRequest.builder()
                .dbParameterGroupName(
                        clusterMetadata.instanceMetadataFor(clusterMetadata.primary()).dbParameterGroupName()).build());
    }