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()));
}