private DBClusterParameterGroup createDbClusterParameterGroup()

in src/main/java/com/amazonaws/services/neptune/cluster/AddCloneTask.java [267:361]


    private DBClusterParameterGroup createDbClusterParameterGroup(NeptuneClusterMetadata sourceClusterMetadata,
                                                                  NeptuneClient neptune) {
        DBClusterParameterGroup dbClusterParameterGroup;

        dbClusterParameterGroup = neptune.createDBClusterParameterGroup(
                CreateDbClusterParameterGroupRequest.builder()
                        .dbClusterParameterGroupName(String.format("%s-db-cluster-params", targetClusterId))
                        .description(String.format("%s DB Cluster Parameter Group", targetClusterId))
                        .dbParameterGroupFamily(sourceClusterMetadata.dbParameterGroupFamily())
                        .tags(getTags(sourceClusterMetadata.clusterId()))
                        .build()
        ).dbClusterParameterGroup();

        String neptuneStreamsParameterValue = sourceClusterMetadata.isStreamEnabled() ? "1" : "0";

        try {
            ModifyDbClusterParameterGroupRequest.Builder requestBuilder = ModifyDbClusterParameterGroupRequest.builder()
                    .dbClusterParameterGroupName(dbClusterParameterGroup.dbClusterParameterGroupName())
                    .parameters(
                            Parameter.builder()
                                    .parameterName("neptune_enforce_ssl")
                                    .parameterValue("1")
                                    .applyMethod(ApplyMethod.PENDING_REBOOT)
                                    .build(),
                            Parameter.builder()
                                    .parameterName("neptune_query_timeout")
                                    .parameterValue("2147483647")
                                    .applyMethod(ApplyMethod.PENDING_REBOOT)
                                    .build(),
                            Parameter.builder()
                                    .parameterName("neptune_streams")
                                    .parameterValue(neptuneStreamsParameterValue)
                                    .applyMethod(ApplyMethod.PENDING_REBOOT)
                                    .build());

            if (this.enableAuditLogs) {
                requestBuilder = requestBuilder.parameters(Parameter.builder()
                        .parameterName("neptune_enable_audit_log")
                        .parameterValue("1")
                        .applyMethod(ApplyMethod.PENDING_REBOOT)
                        .build());
            }

            neptune.modifyDBClusterParameterGroup(requestBuilder.build());
        } catch (NeptuneException e) {
            ModifyDbClusterParameterGroupRequest.Builder requestBuilder = ModifyDbClusterParameterGroupRequest.builder()
                    .dbClusterParameterGroupName(dbClusterParameterGroup.dbClusterParameterGroupName())
                    .parameters(
                            Parameter.builder()
                                    .parameterName("neptune_query_timeout")
                                    .parameterValue("2147483647")
                                    .applyMethod(ApplyMethod.PENDING_REBOOT)
                                    .build(),
                            Parameter.builder()
                                    .parameterName("neptune_streams")
                                    .parameterValue(neptuneStreamsParameterValue)
                                    .applyMethod(ApplyMethod.PENDING_REBOOT)
                                    .build());

            if (this.enableAuditLogs) {
                requestBuilder = requestBuilder.parameters(Parameter.builder()
                        .parameterName("neptune_enable_audit_log")
                        .parameterValue("1")
                        .applyMethod(ApplyMethod.PENDING_REBOOT)
                        .build());
            }

            neptune.modifyDBClusterParameterGroup(requestBuilder.build());
        }

        List<Parameter> dbClusterParameters = neptune.describeDBClusterParameters(
                        DescribeDbClusterParametersRequest.builder()
                                .dbClusterParameterGroupName(dbClusterParameterGroup.dbClusterParameterGroupName())
                                .build()
                ).parameters();

        while (dbClusterParameters.stream().noneMatch(parameter ->
                parameter.parameterName().equals("neptune_query_timeout") &&
                        parameter.parameterValue().equals("2147483647"))) {
            try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            dbClusterParameters = neptune.describeDBClusterParameters(
                            DescribeDbClusterParametersRequest.builder()
                                    .dbClusterParameterGroupName(dbClusterParameterGroup.dbClusterParameterGroupName())
                                    .build()
                    ).parameters();
        }

        System.err.println(String.format("DB cluster parameter group : %s", dbClusterParameterGroup.dbClusterParameterGroupName()));

        return dbClusterParameterGroup;
    }