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