private void deleteCluster()

in neptune-export/src/main/java/com/amazonaws/services/neptune/cluster/RemoveCloneTask.java [50:115]


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

        NeptuneClusterMetadata metadata =
                NeptuneClusterMetadata.createFromClusterId(clusterId, amazonNeptuneClientSupplier);

        if (!metadata.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 + metadata.replicas().size());

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

        for (String replicaId : metadata.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(new DeleteDBClusterRequest()
                .withDBClusterIdentifier(metadata.clusterId())
                .withSkipFinalSnapshot(true));

        try {

            boolean clusterIsBeingDeleted = neptuneClient.describeDBClusters(
                    new DescribeDBClustersRequest().withDBClusterIdentifier(metadata.clusterId()))
                    .getDBClusters()
                    .size() > 0;

            while (clusterIsBeingDeleted) {
                try {
                    Thread.sleep(10000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                clusterIsBeingDeleted = neptuneClient.describeDBClusters(
                        new DescribeDBClustersRequest().withDBClusterIdentifier(metadata.clusterId()))
                        .getDBClusters()
                        .size() > 0;
            }
        } catch (DBClusterNotFoundException e) {
            // Do nothing
        }

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

        neptuneClient.deleteDBClusterParameterGroup(new DeleteDBClusterParameterGroupRequest()
                .withDBClusterParameterGroupName(metadata.dbClusterParameterGroupName()));

        neptuneClient.deleteDBParameterGroup(new DeleteDBParameterGroupRequest()
                .withDBParameterGroupName(
                        metadata.instanceMetadataFor(metadata.primary()).dbParameterGroupName()));
    }