in src/main/java/com/amazonaws/services/neptune/cluster/AddCloneTask.java [71:121]
private NeptuneClusterMetadata cloneCluster() {
System.err.println("Cloning cluster " + sourceClusterId + "...");
System.err.println();
NeptuneClusterMetadata sourceClusterMetadata =
NeptuneClusterMetadata.createFromClusterId(sourceClusterId, amazonNeptuneClientSupplier);
InstanceType instanceType = StringUtils.isEmpty(cloneClusterInstanceType) ?
InstanceType.parse(sourceClusterMetadata.instanceMetadataFor(sourceClusterMetadata.primary()).instanceType()) :
InstanceType.parse(cloneClusterInstanceType);
System.err.println(String.format("Source clusterId : %s", sourceClusterId));
System.err.println(String.format("Target clusterId : %s", targetClusterId));
System.err.println(String.format("Target instance type : %s", instanceType));
NeptuneClient neptune = amazonNeptuneClientSupplier.get();
DBClusterParameterGroup dbClusterParameterGroup = Timer.timedActivity(
"creating DB cluster parameter group",
(Activity.Callable<DBClusterParameterGroup>) () ->
createDbClusterParameterGroup(sourceClusterMetadata, neptune));
DBParameterGroup dbParameterGroup = Timer.timedActivity(
"creating parameter groups",
(Activity.Callable<DBParameterGroup>) () -> createDbParameterGroup(sourceClusterMetadata, neptune));
DBCluster targetDbCluster = Timer.timedActivity(
"creating target cluster",
(Activity.Callable<DBCluster>) () ->
createCluster(sourceClusterMetadata, neptune, dbClusterParameterGroup));
Timer.timedActivity("creating primary", (Activity.Runnable) () ->
createInstance("primary",
neptune,
sourceClusterMetadata,
instanceType,
dbParameterGroup,
targetDbCluster));
if (replicaCount > 0) {
Timer.timedActivity("creating replicas", (Activity.Runnable) () ->
createReplicas(sourceClusterMetadata, instanceType, neptune, dbParameterGroup, targetDbCluster));
}
neptune.close();
return NeptuneClusterMetadata.createFromClusterId(targetClusterId, amazonNeptuneClientSupplier);
}