From 1838df45a2a25a142fabfd1ae89a441e22e26d71 Mon Sep 17 00:00:00 2001 From: Jerome Van Der Linden Date: Tue, 15 Mar 2022 23:19:20 +0100 Subject: [PATCH 1/2] do not create DynamoDbClient when idempotency is disabled --- .../persistence/DynamoDBPersistenceStore.java | 17 ++++++++++++----- .../DynamoDBPersistenceStoreTest.java | 9 +++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStore.java b/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStore.java index 6e36c6dc6..8a66b00e2 100644 --- a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStore.java +++ b/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStore.java @@ -78,11 +78,18 @@ private DynamoDBPersistenceStore(String tableName, if (client != null) { this.dynamoDbClient = client; } else { - DynamoDbClientBuilder ddbBuilder = DynamoDbClient.builder() - .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) - .httpClient(UrlConnectionHttpClient.builder().build()) - .region(Region.of(System.getenv(AWS_REGION_ENV))); - this.dynamoDbClient = ddbBuilder.build(); + String idempotencyDisabledEnv = System.getenv().get(Constants.IDEMPOTENCY_DISABLED_ENV); + if (idempotencyDisabledEnv == null || idempotencyDisabledEnv.equals("false")) { + DynamoDbClientBuilder ddbBuilder = DynamoDbClient.builder() + .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) + .httpClient(UrlConnectionHttpClient.builder().build()) + .region(Region.of(System.getenv(AWS_REGION_ENV))); + this.dynamoDbClient = ddbBuilder.build(); + } else { + // we do not want to create a DynamoDbClient if idempotency is disabled + // null is ok as idempotency won't be called + this.dynamoDbClient = null; + } } } diff --git a/powertools-idempotency/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStoreTest.java b/powertools-idempotency/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStoreTest.java index ecf8ad3e0..0da516324 100644 --- a/powertools-idempotency/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStoreTest.java +++ b/powertools-idempotency/src/test/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStoreTest.java @@ -16,7 +16,9 @@ import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.junitpioneer.jupiter.SetEnvironmentVariable; import software.amazon.awssdk.services.dynamodb.model.*; +import software.amazon.lambda.powertools.idempotency.Constants; import software.amazon.lambda.powertools.idempotency.DynamoDBConfig; import software.amazon.lambda.powertools.idempotency.IdempotencyConfig; import software.amazon.lambda.powertools.idempotency.exceptions.IdempotencyItemAlreadyExistsException; @@ -260,6 +262,13 @@ public void endToEndWithCustomAttrNamesAndSortKey() throws IdempotencyItemNotFou } } + @Test + @SetEnvironmentVariable(key = Constants.IDEMPOTENCY_DISABLED_ENV, value = "true") + public void idempotencyDisabled_noClientShouldBeCreated() { + DynamoDBPersistenceStore store = DynamoDBPersistenceStore.builder().withTableName(TABLE_NAME).build(); + assertThatThrownBy(() -> store.getRecord("fake")).isInstanceOf(NullPointerException.class); + } + @BeforeEach public void setup() { dynamoDBPersistenceStore = DynamoDBPersistenceStore.builder() From 148c4023b7d944a47ece497412315c26394ae78e Mon Sep 17 00:00:00 2001 From: Jerome Van Der Linden Date: Tue, 15 Mar 2022 23:22:42 +0100 Subject: [PATCH 2/2] ignoring case for idempotency disable env --- .../powertools/idempotency/internal/IdempotentAspect.java | 2 +- .../idempotency/persistence/DynamoDBPersistenceStore.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotentAspect.java b/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotentAspect.java index b372a34a4..088e81249 100644 --- a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotentAspect.java +++ b/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/internal/IdempotentAspect.java @@ -47,7 +47,7 @@ public Object around(ProceedingJoinPoint pjp, Idempotent idempotent) throws Throwable { String idempotencyDisabledEnv = System.getenv().get(Constants.IDEMPOTENCY_DISABLED_ENV); - if (idempotencyDisabledEnv != null && !idempotencyDisabledEnv.equals("false")) { + if (idempotencyDisabledEnv != null && !idempotencyDisabledEnv.equalsIgnoreCase("false")) { return pjp.proceed(pjp.getArgs()); } diff --git a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStore.java b/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStore.java index 8a66b00e2..4985f845d 100644 --- a/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStore.java +++ b/powertools-idempotency/src/main/java/software/amazon/lambda/powertools/idempotency/persistence/DynamoDBPersistenceStore.java @@ -79,7 +79,7 @@ private DynamoDBPersistenceStore(String tableName, this.dynamoDbClient = client; } else { String idempotencyDisabledEnv = System.getenv().get(Constants.IDEMPOTENCY_DISABLED_ENV); - if (idempotencyDisabledEnv == null || idempotencyDisabledEnv.equals("false")) { + if (idempotencyDisabledEnv == null || idempotencyDisabledEnv.equalsIgnoreCase("false")) { DynamoDbClientBuilder ddbBuilder = DynamoDbClient.builder() .credentialsProvider(EnvironmentVariableCredentialsProvider.create()) .httpClient(UrlConnectionHttpClient.builder().build())