Skip to content

Commit 2bddb0c

Browse files
authored
Add initial architecture rules (#5741)
* Add initial architecture tests * Address feedback * Update version * Allowlist new violations * Update test code to log error message
1 parent d6296b2 commit 2bddb0c

File tree

63 files changed

+1548
-106
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+1548
-106
lines changed

.brazil.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,8 @@
109109
"third-party-slf4j-api": { "skipImport": true },
110110
"v2-migration-tests": {"skipImport": true},
111111
"crt-unavailable-tests": { "skipImport": true },
112-
"bundle-shading-tests": { "skipImport": true }
112+
"bundle-shading-tests": { "skipImport": true },
113+
"architecture-tests": {"skipImport": true}
113114
},
114115

115116
"dependencies": {

bom-internal/pom.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,18 @@
354354
<version>${reactive-streams.version}</version>
355355
<scope>test</scope>
356356
</dependency>
357+
<dependency>
358+
<groupId>com.tngtech.archunit</groupId>
359+
<artifactId>archunit</artifactId>
360+
<version>${archunit.version}</version>
361+
<scope>test</scope>
362+
</dependency>
363+
<dependency>
364+
<groupId>com.tngtech.archunit</groupId>
365+
<artifactId>archunit-junit5</artifactId>
366+
<version>${archunit.version}</version>
367+
<scope>test</scope>
368+
</dependency>
357369
<dependency>
358370
<groupId>com.google.jimfs</groupId>
359371
<artifactId>jimfs</artifactId>

buildspecs/release-javadoc.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ phases:
1818
commands:
1919
- python ./scripts/doc_crosslinks/generate_cross_link_data.py --apiDefinitionsBasePath ./services/ --apiDefinitionsRelativeFilePath src/main/resources/codegen-resources/service-2.json --templateFilePath ./scripts/doc_crosslinks/crosslink_redirect.html --outputFilePath ./scripts/crosslink_redirect.html
2020
- mvn install -P quick -T1C
21-
- mvn clean install javadoc:aggregate -B -Ppublic-javadoc -Dcheckstyle.skip -Dspotbugs.skip -DskipTests -Ddoclint=none -pl '!:protocol-tests,!:protocol-tests-core,!:codegen-generated-classes-test,!:sdk-benchmarks,!:s3-benchmarks,!:module-path-tests,!:test-utils,!:http-client-tests,!:tests-coverage-reporting,!:sdk-native-image-test,!:ruleset-testing-core,!:old-client-version-compatibility-test,!:crt-unavailable-tests,!:bundle-shading-tests,!:v2-migration,!:v2-migration-tests'
21+
- mvn clean install javadoc:aggregate -B -Ppublic-javadoc -Dcheckstyle.skip -Dspotbugs.skip -DskipTests -Ddoclint=none -pl '!:protocol-tests,!:protocol-tests-core,!:codegen-generated-classes-test,!:sdk-benchmarks,!:s3-benchmarks,!:module-path-tests,!:test-utils,!:http-client-tests,!:tests-coverage-reporting,!:sdk-native-image-test,!:ruleset-testing-core,!:old-client-version-compatibility-test,!:crt-unavailable-tests,!:bundle-shading-tests,!:v2-migration,!:v2-migration-tests,!:architecture-tests'
2222
- RELEASE_VERSION=`mvn -q -Dexec.executable=echo -Dexec.args='${project.version}' --non-recursive exec:exec`
2323
-
2424
- aws s3 sync target/site/apidocs/ $DOC_PATH/$RELEASE_VERSION/ --acl="public-read"

buildspecs/release-to-maven.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ phases:
3737
awk 'BEGIN { var=ENVIRON["SDK_SIGNING_GPG_KEYNAME"] } { gsub("\\$SDK_SIGNING_GPG_KEYNAME", var, $0); print }' > \
3838
$SETTINGS_XML
3939
40-
mvn clean deploy -B -s $SETTINGS_XML -Ppublishing -DperformRelease -Dspotbugs.skip -DskipTests -Dcheckstyle.skip -Djapicmp.skip -Ddoclint=none -pl !:protocol-tests,!:protocol-tests-core,!:codegen-generated-classes-test,!:sdk-benchmarks,!:module-path-tests,!:tests-coverage-reporting,!:stability-tests,!:sdk-native-image-test,!:auth-tests,!:s3-benchmarks,!:region-testing,!:old-client-version-compatibility-test,!:crt-unavailable-tests,!:bundle-shading-tests,!:v2-migration-tests -DautoReleaseAfterClose=true -DstagingProgressTimeoutMinutes=30 -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -Dmaven.wagon.http.retryHandler.requestSentEnabled=true
40+
mvn clean deploy -B -s $SETTINGS_XML -Ppublishing -DperformRelease -Dspotbugs.skip -DskipTests -Dcheckstyle.skip -Djapicmp.skip -Ddoclint=none -pl !:protocol-tests,!:protocol-tests-core,!:codegen-generated-classes-test,!:sdk-benchmarks,!:module-path-tests,!:tests-coverage-reporting,!:stability-tests,!:sdk-native-image-test,!:auth-tests,!:s3-benchmarks,!:region-testing,!:old-client-version-compatibility-test,!:crt-unavailable-tests,!:bundle-shading-tests,!:v2-migration-tests,!:architecture-tests -DautoReleaseAfterClose=true -DstagingProgressTimeoutMinutes=30 -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -Dmaven.wagon.http.retryHandler.requestSentEnabled=true
4141
else
4242
echo "This version was already released."
4343
fi

core/aws-core/src/main/java/software/amazon/awssdk/awscore/endpoints/AccountIdEndpointModeResolver.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@
1717

1818
import java.util.Optional;
1919
import java.util.function.Supplier;
20-
import software.amazon.awssdk.annotations.SdkInternalApi;
20+
import software.amazon.awssdk.annotations.SdkProtectedApi;
2121
import software.amazon.awssdk.core.SdkSystemSetting;
2222
import software.amazon.awssdk.profiles.ProfileFile;
2323
import software.amazon.awssdk.profiles.ProfileProperty;
2424
import software.amazon.awssdk.utils.OptionalUtils;
2525

26-
@SdkInternalApi
26+
@SdkProtectedApi
2727
public final class AccountIdEndpointModeResolver {
2828

2929
private static final AccountIdEndpointMode SDK_DEFAULT_MODE = AccountIdEndpointMode.PREFERRED;

core/aws-core/src/main/java/software/amazon/awssdk/awscore/interceptor/HelpfulUnknownHostExceptionInterceptor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import java.util.List;
2020
import java.util.Optional;
2121
import java.util.stream.Collectors;
22-
import software.amazon.awssdk.annotations.SdkInternalApi;
22+
import software.amazon.awssdk.annotations.SdkProtectedApi;
2323
import software.amazon.awssdk.awscore.AwsExecutionAttribute;
2424
import software.amazon.awssdk.core.exception.SdkClientException;
2525
import software.amazon.awssdk.core.interceptor.Context;
@@ -35,7 +35,7 @@
3535
* This interceptor will monitor for {@link UnknownHostException}s and provide the customer with additional information they can
3636
* use to debug or fix the problem.
3737
*/
38-
@SdkInternalApi
38+
@SdkProtectedApi
3939
public final class HelpfulUnknownHostExceptionInterceptor implements ExecutionInterceptor {
4040
@Override
4141
public Throwable modifyException(Context.FailedExecution context, ExecutionAttributes executionAttributes) {

core/aws-core/src/main/java/software/amazon/awssdk/awscore/interceptor/TraceIdExecutionInterceptor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
package software.amazon.awssdk.awscore.interceptor;
1717

1818
import java.util.Optional;
19-
import software.amazon.awssdk.annotations.SdkInternalApi;
19+
import software.amazon.awssdk.annotations.SdkProtectedApi;
2020
import software.amazon.awssdk.awscore.internal.interceptor.TracingSystemSetting;
2121
import software.amazon.awssdk.core.interceptor.Context;
2222
import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
@@ -28,7 +28,7 @@
2828
* The {@code TraceIdExecutionInterceptor} copies the trace details to the {@link #TRACE_ID_HEADER} header, assuming we seem to
2929
* be running in a lambda environment.
3030
*/
31-
@SdkInternalApi
31+
@SdkProtectedApi
3232
public class TraceIdExecutionInterceptor implements ExecutionInterceptor {
3333
private static final String TRACE_ID_HEADER = "X-Amzn-Trace-Id";
3434
private static final String LAMBDA_FUNCTION_NAME_ENVIRONMENT_VARIABLE = "AWS_LAMBDA_FUNCTION_NAME";

core/aws-core/src/main/java/software/amazon/awssdk/awscore/internal/AwsProtocolMetadata.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,20 @@
1515

1616
package software.amazon.awssdk.awscore.internal;
1717

18-
import software.amazon.awssdk.annotations.SdkInternalApi;
18+
import software.amazon.awssdk.annotations.SdkProtectedApi;
1919
import software.amazon.awssdk.core.SdkProtocolMetadata;
2020
import software.amazon.awssdk.utils.ToString;
2121
import software.amazon.awssdk.utils.builder.CopyableBuilder;
2222
import software.amazon.awssdk.utils.builder.ToCopyableBuilder;
2323

2424
/**
2525
* Contains AWS-specific protocol metadata. Implementation of {@link SdkProtocolMetadata}.
26+
*
27+
* <p>
28+
* Implementation notes: this class should've been outside internal package,
29+
* but we can't fix it due to backwards compatibility reasons.
2630
*/
27-
@SdkInternalApi
31+
@SdkProtectedApi
2832
public final class AwsProtocolMetadata implements SdkProtocolMetadata, ToCopyableBuilder<AwsProtocolMetadata.Builder,
2933
AwsProtocolMetadata> {
3034

core/aws-core/src/main/java/software/amazon/awssdk/awscore/internal/AwsServiceProtocol.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,13 @@
1515

1616
package software.amazon.awssdk.awscore.internal;
1717

18-
import software.amazon.awssdk.annotations.SdkInternalApi;
18+
import software.amazon.awssdk.annotations.SdkProtectedApi;
1919

20-
@SdkInternalApi
20+
/**
21+
* Implementation notes: this class should've been outside internal package,
22+
* but we can't fix it due to backwards compatibility reasons.
23+
*/
24+
@SdkProtectedApi
2125
public enum AwsServiceProtocol {
2226
EC2("ec2"),
2327
AWS_JSON("json"),

core/aws-core/src/main/java/software/amazon/awssdk/awscore/internal/defaultsmode/AutoDefaultsModeDiscovery.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
package software.amazon.awssdk.awscore.internal.defaultsmode;
1717

1818
import java.util.Optional;
19-
import software.amazon.awssdk.annotations.SdkInternalApi;
19+
import software.amazon.awssdk.annotations.SdkProtectedApi;
2020
import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode;
2121
import software.amazon.awssdk.core.SdkSystemSetting;
2222
import software.amazon.awssdk.regions.Region;
@@ -29,8 +29,12 @@
2929
/**
3030
* This class attempts to discover the appropriate {@link DefaultsMode} by inspecting the environment. It falls
3131
* back to the {@link DefaultsMode#STANDARD} mode if the target mode cannot be determined.
32+
*
33+
* <p>
34+
* Implementation notes: this class should've been outside internal package,
35+
* but we can't fix it due to backwards compatibility reasons.
3236
*/
33-
@SdkInternalApi
37+
@SdkProtectedApi
3438
public class AutoDefaultsModeDiscovery {
3539
private static final String EC2_METADATA_REGION_PATH = "/latest/meta-data/placement/region";
3640
private static final DefaultsMode FALLBACK_DEFAULTS_MODE = DefaultsMode.STANDARD;

core/aws-core/src/main/java/software/amazon/awssdk/awscore/internal/useragent/BusinessMetricsUtils.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,15 @@
1616
package software.amazon.awssdk.awscore.internal.useragent;
1717

1818
import java.util.Optional;
19-
import software.amazon.awssdk.annotations.SdkInternalApi;
19+
import software.amazon.awssdk.annotations.SdkProtectedApi;
2020
import software.amazon.awssdk.awscore.endpoints.AccountIdEndpointMode;
2121
import software.amazon.awssdk.core.useragent.BusinessMetricFeatureId;
2222

23-
@SdkInternalApi
23+
/**
24+
* Implementation notes: this class should've been outside internal package,
25+
* but we can't fix it due to backwards compatibility reasons.
26+
*/
27+
@SdkProtectedApi
2428
public final class BusinessMetricsUtils {
2529
private BusinessMetricsUtils() {
2630
}

core/protocols/aws-json-protocol/src/main/java/software/amazon/awssdk/protocols/json/JsonContent.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,13 @@
1616
package software.amazon.awssdk.protocols.json;
1717

1818
import java.io.IOException;
19-
import org.slf4j.Logger;
20-
import org.slf4j.LoggerFactory;
2119
import software.amazon.awssdk.annotations.SdkProtectedApi;
2220
import software.amazon.awssdk.http.SdkHttpFullResponse;
2321
import software.amazon.awssdk.protocols.jsoncore.JsonNode;
2422
import software.amazon.awssdk.protocols.jsoncore.JsonNodeParser;
2523
import software.amazon.awssdk.thirdparty.jackson.core.JsonFactory;
2624
import software.amazon.awssdk.utils.IoUtils;
25+
import software.amazon.awssdk.utils.Logger;
2726

2827
/**
2928
* Simple struct like class to hold both the raw json string content and it's parsed JsonNode
@@ -32,7 +31,7 @@
3231
//TODO Do we need this? It isn't well encapsulated because of storing non-copied arrays.
3332
public class JsonContent {
3433

35-
private static final Logger LOG = LoggerFactory.getLogger(JsonContent.class);
34+
private static final Logger LOG = Logger.loggerFor(JsonContent.class);
3635

3736
private final byte[] rawContent;
3837
private final JsonNode jsonNode;
@@ -58,7 +57,7 @@ public static JsonContent createJsonContent(SdkHttpFullResponse httpResponse,
5857
try {
5958
return IoUtils.toByteArray(c);
6059
} catch (IOException e) {
61-
LOG.debug("Unable to read HTTP response content", e);
60+
LOG.debug(() -> "Unable to read HTTP response content", e);
6261
}
6362
return null;
6463
}).orElse(null);
@@ -73,7 +72,7 @@ private static JsonNode parseJsonContent(byte[] rawJsonContent, JsonFactory json
7372
JsonNodeParser parser = JsonNodeParser.builder().jsonFactory(jsonFactory).build();
7473
return parser.parse(rawJsonContent);
7574
} catch (Exception e) {
76-
LOG.debug("Unable to parse HTTP response content", e);
75+
LOG.debug(() -> "Unable to parse HTTP response content", e);
7776
return JsonNode.emptyObjectNode();
7877
}
7978
}

core/protocols/aws-xml-protocol/src/main/java/software/amazon/awssdk/protocols/xml/internal/unmarshall/AwsXmlPredicatedResponseHandler.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919

2020
import java.util.Optional;
2121
import java.util.function.Function;
22-
import org.slf4j.Logger;
23-
import org.slf4j.LoggerFactory;
2422
import software.amazon.awssdk.annotations.SdkInternalApi;
2523
import software.amazon.awssdk.core.Response;
2624
import software.amazon.awssdk.core.SdkPojo;
@@ -32,6 +30,7 @@
3230
import software.amazon.awssdk.http.SdkHttpFullResponse;
3331
import software.amazon.awssdk.protocols.query.unmarshall.XmlElement;
3432
import software.amazon.awssdk.utils.IoUtils;
33+
import software.amazon.awssdk.utils.Logger;
3534

3635
/**
3736
* Unmarshalls an HTTP response into either a successful response POJO, or into a (possibly modeled) exception based
@@ -42,7 +41,7 @@
4241
*/
4342
@SdkInternalApi
4443
public class AwsXmlPredicatedResponseHandler<OutputT> implements HttpResponseHandler<Response<OutputT>> {
45-
private static final Logger log = LoggerFactory.getLogger(AwsXmlPredicatedResponseHandler.class);
44+
private static final Logger log = Logger.loggerFor(AwsXmlPredicatedResponseHandler.class);
4645

4746
private final Function<SdkHttpFullResponse, SdkPojo> pojoSupplier;
4847
private final Function<AwsXmlUnmarshallingContext, OutputT> successResponseTransformer;
@@ -173,7 +172,7 @@ private void closeInputStreamIfNeeded(SdkHttpFullResponse httpResponse,
173172
if (didRequestFail || !needsConnectionLeftOpen) {
174173
Optional.ofNullable(httpResponse)
175174
.flatMap(SdkHttpFullResponse::content) // If no content, no need to close
176-
.ifPresent(s -> IoUtils.closeQuietly(s, log));
175+
.ifPresent(s -> IoUtils.closeQuietlyV2(s, log));
177176
}
178177
}
179178
}

core/retries/src/main/java/software/amazon/awssdk/retries/internal/DefaultAwareRetryStrategy.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@
2020

2121
/**
2222
* Identify a {@link RetryStrategy} that has the capacity to work with sets of default retry predicates.
23+
*
24+
* <p>
25+
* Implementation notes: this class should've been outside internal package,
26+
* but we can't fix it due to backwards compatibility reasons.
2327
*/
2428
@SdkProtectedApi
2529
public interface DefaultAwareRetryStrategy extends RetryStrategy {

core/retries/src/main/java/software/amazon/awssdk/retries/internal/RetryStrategyDefaults.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@
2020

2121
/**
2222
* The set of retry predicates that are by default added to a retry strategy.
23+
*
24+
* <p>
25+
* Implementation notes: this class should've been outside internal package,
26+
* but we can't fix it due to backwards compatibility reasons.
2327
*/
2428
@SdkProtectedApi
2529
public interface RetryStrategyDefaults {

core/sdk-core/src/main/java/software/amazon/awssdk/core/endpointdiscovery/EndpointDiscoveryEndpoint.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@
1717

1818
import java.net.URI;
1919
import java.time.Instant;
20-
import software.amazon.awssdk.annotations.SdkInternalApi;
20+
import software.amazon.awssdk.annotations.SdkProtectedApi;
2121
import software.amazon.awssdk.utils.builder.CopyableBuilder;
2222
import software.amazon.awssdk.utils.builder.ToCopyableBuilder;
2323

24-
@SdkInternalApi
24+
@SdkProtectedApi
2525
public final class EndpointDiscoveryEndpoint implements
2626
ToCopyableBuilder<EndpointDiscoveryEndpoint.Builder, EndpointDiscoveryEndpoint> {
2727

core/sdk-core/src/main/java/software/amazon/awssdk/core/endpointdiscovery/providers/EndpointDiscoveryProviderChain.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,13 @@
1818
import java.util.ArrayList;
1919
import java.util.Collections;
2020
import java.util.List;
21-
import org.slf4j.Logger;
22-
import org.slf4j.LoggerFactory;
2321
import software.amazon.awssdk.annotations.SdkProtectedApi;
22+
import software.amazon.awssdk.utils.Logger;
2423

2524
@SdkProtectedApi
2625
public class EndpointDiscoveryProviderChain implements EndpointDiscoveryProvider {
2726

28-
private static final Logger log = LoggerFactory.getLogger(EndpointDiscoveryProviderChain.class);
27+
private static final Logger log = Logger.loggerFor(EndpointDiscoveryProviderChain.class);
2928

3029
private final List<EndpointDiscoveryProvider> providers;
3130

@@ -40,7 +39,8 @@ public boolean resolveEndpointDiscovery() {
4039
try {
4140
return provider.resolveEndpointDiscovery();
4241
} catch (Exception e) {
43-
log.debug("Unable to load endpoint discovery from {}:{}", provider.toString(), e.getMessage());
42+
log.debug(() -> String.format("Unable to load endpoint discovery from %s:%s", provider.toString(),
43+
e.getMessage()));
4444
}
4545
}
4646
return false;

core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/compression/GzipCompressor.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,21 @@
1515

1616
package software.amazon.awssdk.core.internal.compression;
1717

18-
import static software.amazon.awssdk.utils.IoUtils.closeQuietly;
18+
import static software.amazon.awssdk.utils.IoUtils.closeQuietlyV2;
1919

2020
import java.io.ByteArrayOutputStream;
2121
import java.io.IOException;
2222
import java.io.UncheckedIOException;
2323
import java.util.zip.GZIPOutputStream;
24-
import org.slf4j.Logger;
25-
import org.slf4j.LoggerFactory;
2624
import software.amazon.awssdk.annotations.SdkInternalApi;
2725
import software.amazon.awssdk.core.SdkBytes;
26+
import software.amazon.awssdk.utils.Logger;
2827

2928
@SdkInternalApi
3029
public final class GzipCompressor implements Compressor {
3130

3231
private static final String COMPRESSOR_TYPE = "gzip";
33-
private static final Logger log = LoggerFactory.getLogger(GzipCompressor.class);
32+
private static final Logger log = Logger.loggerFor(GzipCompressor.class);
3433

3534
@Override
3635
public String compressorType() {
@@ -49,7 +48,7 @@ public SdkBytes compress(SdkBytes content) {
4948
} catch (IOException e) {
5049
throw new UncheckedIOException(e);
5150
} finally {
52-
closeQuietly(gzipOutputStream, log);
51+
closeQuietlyV2(gzipOutputStream, log);
5352
}
5453
}
5554
}

core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/http/CombinedResponseHandler.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@
1919

2020
import java.io.IOException;
2121
import java.util.Optional;
22-
import org.slf4j.Logger;
23-
import org.slf4j.LoggerFactory;
2422
import software.amazon.awssdk.annotations.SdkInternalApi;
2523
import software.amazon.awssdk.core.Response;
2624
import software.amazon.awssdk.core.exception.RetryableException;
@@ -30,6 +28,7 @@
3028
import software.amazon.awssdk.core.interceptor.ExecutionAttributes;
3129
import software.amazon.awssdk.http.SdkHttpFullResponse;
3230
import software.amazon.awssdk.utils.IoUtils;
31+
import software.amazon.awssdk.utils.Logger;
3332

3433
/**
3534
* Unmarshalls an HTTP response into either a successful response POJO, or into a (possibly modeled) exception based
@@ -40,7 +39,7 @@
4039
*/
4140
@SdkInternalApi
4241
public class CombinedResponseHandler<OutputT> implements HttpResponseHandler<Response<OutputT>> {
43-
private static final Logger log = LoggerFactory.getLogger(CombinedResponseHandler.class);
42+
private static final Logger log = Logger.loggerFor(CombinedResponseHandler.class);
4443

4544
private final HttpResponseHandler<OutputT> successResponseHandler;
4645
private final HttpResponseHandler<? extends SdkException> errorResponseHandler;
@@ -143,7 +142,7 @@ private void closeInputStreamIfNeeded(SdkHttpFullResponse httpResponse,
143142
if (didRequestFail || !successResponseHandler.needsConnectionLeftOpen()) {
144143
Optional.ofNullable(httpResponse)
145144
.flatMap(SdkHttpFullResponse::content) // If no content, no need to close
146-
.ifPresent(s -> IoUtils.closeQuietly(s, log));
145+
.ifPresent(s -> IoUtils.closeQuietlyV2(s, log));
147146
}
148147
}
149148
}

0 commit comments

Comments
 (0)