From c309fabf08bb11893ef42d7716de5189f0672f3d Mon Sep 17 00:00:00 2001 From: David Turanski Date: Sun, 11 Oct 2020 11:30:04 -0400 Subject: [PATCH] Avoid timeout when attemting to connect to AWS --- ...figurationExclusionEnvironmentPostProcessor.java | 13 ++++++++++++- .../consumer/s3/AbstractAwsS3ConsumerMockTests.java | 1 + .../supplier/s3/AbstractAwsS3SupplierMockTests.java | 1 + 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/common/aws-s3-common/src/main/java/org/springframework/cloud/fn/common/aws/s3/AutoConfigurationExclusionEnvironmentPostProcessor.java b/common/aws-s3-common/src/main/java/org/springframework/cloud/fn/common/aws/s3/AutoConfigurationExclusionEnvironmentPostProcessor.java index dd88c880..af2558a1 100644 --- a/common/aws-s3-common/src/main/java/org/springframework/cloud/fn/common/aws/s3/AutoConfigurationExclusionEnvironmentPostProcessor.java +++ b/common/aws-s3-common/src/main/java/org/springframework/cloud/fn/common/aws/s3/AutoConfigurationExclusionEnvironmentPostProcessor.java @@ -18,28 +18,39 @@ package org.springframework.cloud.fn.common.aws.s3; import org.springframework.boot.SpringApplication; import org.springframework.boot.env.EnvironmentPostProcessor; +import org.springframework.cloud.aws.autoconfigure.context.ContextInstanceDataAutoConfiguration; import org.springframework.cloud.aws.autoconfigure.context.ContextResourceLoaderAutoConfiguration; import org.springframework.core.annotation.Order; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.MapPropertySource; import org.springframework.core.env.PropertySource; import org.springframework.core.env.StandardEnvironment; +import org.springframework.util.StringUtils; /** * @author Timo Salm + * @author David Turanski */ @Order public class AutoConfigurationExclusionEnvironmentPostProcessor implements EnvironmentPostProcessor { static final String SPRING_AUTOCONFIGURE_EXCLUDE_PROPERTY = "spring.autoconfigure.exclude"; + static final String S_3_COMMON_ENDPOINT_URL = "s3.common.endpoint-url"; + @Override public void postProcessEnvironment(ConfigurableEnvironment environment, SpringApplication application) { final PropertySource propertySource = environment.getPropertySources() .get(StandardEnvironment.SYSTEM_PROPERTIES_PROPERTY_SOURCE_NAME); if (propertySource instanceof MapPropertySource) { + String excludedAutoConfiguration = ContextResourceLoaderAutoConfiguration.class.getCanonicalName(); + //If an endpoint url is set, avoid the timeout attempting to connect to AWS to retrieve instance data. + if (StringUtils.hasText(environment.getProperty(S_3_COMMON_ENDPOINT_URL))) { + excludedAutoConfiguration = excludedAutoConfiguration + .concat("," + ContextInstanceDataAutoConfiguration.class.getCanonicalName()); + } ((MapPropertySource) propertySource).getSource().put(SPRING_AUTOCONFIGURE_EXCLUDE_PROPERTY, - ContextResourceLoaderAutoConfiguration.class.getCanonicalName()); + excludedAutoConfiguration); } } } diff --git a/consumer/s3-consumer/src/test/java/org/springframework/cloud/fn/consumer/s3/AbstractAwsS3ConsumerMockTests.java b/consumer/s3-consumer/src/test/java/org/springframework/cloud/fn/consumer/s3/AbstractAwsS3ConsumerMockTests.java index b757f8e7..ea1b0f57 100644 --- a/consumer/s3-consumer/src/test/java/org/springframework/cloud/fn/consumer/s3/AbstractAwsS3ConsumerMockTests.java +++ b/consumer/s3-consumer/src/test/java/org/springframework/cloud/fn/consumer/s3/AbstractAwsS3ConsumerMockTests.java @@ -55,6 +55,7 @@ import static org.mockito.Mockito.spy; "cloud.aws.credentials.accessKey=" + AbstractAwsS3ConsumerMockTests.AWS_ACCESS_KEY, "cloud.aws.credentials.secretKey=" + AbstractAwsS3ConsumerMockTests.AWS_SECRET_KEY, "cloud.aws.region.static=" + AbstractAwsS3ConsumerMockTests.AWS_REGION, + "s3.common.endpointUrl=foo", "s3.consumer.bucket=" + AbstractAwsS3ConsumerMockTests.S3_BUCKET }) public abstract class AbstractAwsS3ConsumerMockTests { diff --git a/supplier/s3-supplier/src/test/java/org/springframework/cloud/fn/supplier/s3/AbstractAwsS3SupplierMockTests.java b/supplier/s3-supplier/src/test/java/org/springframework/cloud/fn/supplier/s3/AbstractAwsS3SupplierMockTests.java index ea42103a..6a8e03bd 100644 --- a/supplier/s3-supplier/src/test/java/org/springframework/cloud/fn/supplier/s3/AbstractAwsS3SupplierMockTests.java +++ b/supplier/s3-supplier/src/test/java/org/springframework/cloud/fn/supplier/s3/AbstractAwsS3SupplierMockTests.java @@ -58,6 +58,7 @@ import static org.mockito.Mockito.mock; "cloud.aws.credentials.accessKey=" + AbstractAwsS3SupplierMockTests.AWS_ACCESS_KEY, "cloud.aws.credentials.secretKey=" + AbstractAwsS3SupplierMockTests.AWS_SECRET_KEY, "cloud.aws.region.static=" + AbstractAwsS3SupplierMockTests.AWS_REGION, + "s3.common.endpointUrl=foo", "s3.supplier.remoteDir=" + AbstractAwsS3SupplierMockTests.S3_BUCKET}) @DirtiesContext @SpringIntegrationTest(noAutoStartup = "*")