Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,20 @@
# Amazon Neptune Export CHANGELOG

## Neptune Export v2.0.2 (Release Date: TBD):

### New Features and Improvements:



### Bug Fixes:

- Fix --clone-cluster-enable-audit-logs overriding other Neptune cluster parameters

## Neptune Export v2.0.2 (Release Date: June 16, 2025):

### Bug Fixes:

* Fix fallback for finding parameter group families via Neptune engine version
- Fix fallback for finding parameter group families via Neptune engine version

## Neptune Export v2.0.1 (Release Date: June 10, 2025):

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -322,36 +322,60 @@ private DBClusterParameterGroup createDbClusterParameterGroup(NeptuneClusterMeta
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());
Collection<Parameter> parameters = new ArrayList<>(4);
parameters.add(Parameter.builder()
.parameterName("neptune_enforce_ssl")
.parameterValue("1")
.applyMethod(ApplyMethod.PENDING_REBOOT)
.build());
parameters.add(Parameter.builder()
.parameterName("neptune_query_timeout")
.parameterValue("2147483647")
.applyMethod(ApplyMethod.PENDING_REBOOT)
.build());
parameters.add(Parameter.builder()
.parameterName("neptune_streams")
.parameterValue(neptuneStreamsParameterValue)
.applyMethod(ApplyMethod.PENDING_REBOOT)
.build());

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

ModifyDbClusterParameterGroupRequest.Builder requestBuilder = ModifyDbClusterParameterGroupRequest.builder()
.dbClusterParameterGroupName(dbClusterParameterGroup.dbClusterParameterGroupName())
.parameters(parameters);

neptune.modifyDBClusterParameterGroup(requestBuilder.build());
} catch (NeptuneException e) {
Collection<Parameter> parameters = new ArrayList<>(3);
parameters.add(Parameter.builder()
.parameterName("neptune_query_timeout")
.parameterValue("2147483647")
.applyMethod(ApplyMethod.PENDING_REBOOT)
.build());
parameters.add(Parameter.builder()
.parameterName("neptune_streams")
.parameterValue(neptuneStreamsParameterValue)
.applyMethod(ApplyMethod.PENDING_REBOOT)
.build());

if (this.enableAuditLogs) {
logger.debug("Adding neptune_enable_audit_log parameter");
parameters.add(Parameter.builder()
.parameterName("neptune_enable_audit_log")
.parameterValue("1")
.applyMethod(ApplyMethod.PENDING_REBOOT)
.build());
}


ModifyDbClusterParameterGroupRequest.Builder requestBuilder = ModifyDbClusterParameterGroupRequest.builder()
.dbClusterParameterGroupName(dbClusterParameterGroup.dbClusterParameterGroupName())
.parameters(
Expand Down Expand Up @@ -383,9 +407,14 @@ private DBClusterParameterGroup createDbClusterParameterGroup(NeptuneClusterMeta
.build()
).parameters();

int count = 0;
while (dbClusterParameters.stream().noneMatch(parameter ->
parameter.parameterName().equals("neptune_query_timeout") &&
parameter.parameterValue().equals("2147483647"))) {
count++;
if (count >= 30) {
throw new IllegalStateException("Failed to create DB cluster parameter group: " + dbClusterParameterGroup.dbClusterParameterGroupName() + "after 5 minutes");
}
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,9 @@
import software.amazon.awssdk.services.neptune.model.RestoreDbClusterToPointInTimeResponse;

import java.util.Arrays;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;

import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
Expand Down Expand Up @@ -72,6 +74,21 @@ public void shouldNotSetAuditLogsWhenEnableAuditLogsIsFalse() {
// Assert that "neptune_enable_audit_log" parameter has not been set
assertEquals(0, capturedParamsRequest.parameters().stream().filter((p) -> (p.parameterName().equals("neptune_enable_audit_log"))).count());

// Assert that standard parameters have been set
List<Parameter> queryTimeoutParams = capturedParamsRequest.parameters().stream()
.filter((p) -> (p.parameterName().equals("neptune_query_timeout")))
.peek((parameter -> assertEquals("2147483647", parameter.parameterValue())))
.collect(Collectors.toList());
assertEquals(1, queryTimeoutParams.size());

List<Parameter> enforceSslParams = capturedParamsRequest.parameters().stream()
.filter((p) -> (p.parameterName().equals("neptune_enforce_ssl")))
.peek((parameter -> assertEquals("1", parameter.parameterValue())))
.collect(Collectors.toList());
assertEquals(1, queryTimeoutParams.size());

assertEquals(1, capturedParamsRequest.parameters().stream().filter((p) -> (p.parameterName().equals("neptune_streams"))).count());

RestoreDbClusterToPointInTimeRequest capturedCloneRequest = cloneClusterRequestCaptor.getValue();

// Assert that cluster log exports are disabled
Expand Down Expand Up @@ -99,11 +116,26 @@ public void shouldSetAuditLogsWhenEnableAuditLogsIsTrue() {
ModifyDbClusterParameterGroupRequest capturedParamsRequest = clusterParamsCaptor.getValue();

// Assert that "neptune_enable_audit_log" parameter exists and has been set to "1"
assertEquals(1,
capturedParamsRequest.parameters().stream()
.filter((p) -> (p.parameterName().equals("neptune_enable_audit_log")))
.peek((parameter -> assertEquals("1", parameter.parameterValue())))
.count());
List<Parameter> auditLogParams = capturedParamsRequest.parameters().stream()
.filter((p) -> (p.parameterName().equals("neptune_enable_audit_log")))
.peek((parameter -> assertEquals("1", parameter.parameterValue())))
.collect(Collectors.toList());
assertEquals(1, auditLogParams.size());

// Assert that standard parameters have been set
List<Parameter> queryTimeoutParams = capturedParamsRequest.parameters().stream()
.filter((p) -> (p.parameterName().equals("neptune_query_timeout")))
.peek((parameter -> assertEquals("2147483647", parameter.parameterValue())))
.collect(Collectors.toList());
assertEquals(1, queryTimeoutParams.size());

List<Parameter> enforceSslParams = capturedParamsRequest.parameters().stream()
.filter((p) -> (p.parameterName().equals("neptune_enforce_ssl")))
.peek((parameter -> assertEquals("1", parameter.parameterValue())))
.collect(Collectors.toList());
assertEquals(1, queryTimeoutParams.size());

assertEquals(1, capturedParamsRequest.parameters().stream().filter((p) -> (p.parameterName().equals("neptune_streams"))).count());

RestoreDbClusterToPointInTimeRequest capturedCloneRequest = cloneClusterRequestCaptor.getValue();

Expand Down