diff --git a/.changes/next-release/bugfix-AWSSDKforJavav2-c9734ed.json b/.changes/next-release/bugfix-AWSSDKforJavav2-c9734ed.json new file mode 100644 index 000000000000..9a73e253204a --- /dev/null +++ b/.changes/next-release/bugfix-AWSSDKforJavav2-c9734ed.json @@ -0,0 +1,6 @@ +{ + "category": "AWS SDK for Java v2", + "contributor": "", + "type": "bugfix", + "description": "Fixed bug where using profile-based credentials could cause the SDK to read the profile file with each request." +} diff --git a/core/sdk-core/src/main/java/software/amazon/awssdk/core/client/builder/SdkDefaultClientBuilder.java b/core/sdk-core/src/main/java/software/amazon/awssdk/core/client/builder/SdkDefaultClientBuilder.java index 67f8295ee49c..c91ad39ad1a3 100644 --- a/core/sdk-core/src/main/java/software/amazon/awssdk/core/client/builder/SdkDefaultClientBuilder.java +++ b/core/sdk-core/src/main/java/software/amazon/awssdk/core/client/builder/SdkDefaultClientBuilder.java @@ -264,9 +264,9 @@ protected SdkClientConfiguration mergeChildDefaults(SdkClientConfiguration confi */ private SdkClientConfiguration mergeGlobalDefaults(SdkClientConfiguration configuration) { // Don't load the default profile file if the customer already gave us one. - Supplier configuredProfileFileSupplier = configuration.option(PROFILE_FILE_SUPPLIER); - Supplier profileFileSupplier = Optional.ofNullable(configuredProfileFileSupplier) - .orElseGet(() -> ProfileFile::defaultProfileFile); + Supplier profileFileSupplier = + Optional.ofNullable(configuration.option(PROFILE_FILE_SUPPLIER)) + .orElseGet(() -> ProfileFileSupplier.fixedProfileFile(ProfileFile.defaultProfileFile())); return configuration.merge(c -> c.option(EXECUTION_INTERCEPTORS, new ArrayList<>()) .option(ADDITIONAL_HTTP_HEADERS, new LinkedHashMap<>()) diff --git a/core/sdk-core/src/test/java/software/amazon/awssdk/core/client/builder/DefaultClientBuilderTest.java b/core/sdk-core/src/test/java/software/amazon/awssdk/core/client/builder/DefaultClientBuilderTest.java index 8bb2455099ba..ec526330cdc9 100644 --- a/core/sdk-core/src/test/java/software/amazon/awssdk/core/client/builder/DefaultClientBuilderTest.java +++ b/core/sdk-core/src/test/java/software/amazon/awssdk/core/client/builder/DefaultClientBuilderTest.java @@ -52,6 +52,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.function.Supplier; import org.assertj.core.api.Assertions; import org.junit.Before; import org.junit.Test; @@ -371,7 +372,19 @@ public void clientBuilderFieldsHaveBeanEquivalents() throws Exception { assertThat(property.getWriteMethod()).as(propertyName + " setter").isNotNull(); }); }); + } + + + @Test + public void defaultProfileFileSupplier_isStaticOrHasIdentityCaching() { + SdkClientConfiguration config = + testClientBuilder().build().clientConfiguration; + + Supplier defaultProfileFileSupplier = config.option(PROFILE_FILE_SUPPLIER); + ProfileFile firstGet = defaultProfileFileSupplier.get(); + ProfileFile secondGet = defaultProfileFileSupplier.get(); + assertThat(secondGet).isSameAs(firstGet); } private SdkDefaultClientBuilder testClientBuilder() {