Skip to content
Closed
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
6 changes: 6 additions & 0 deletions .changes/next-release/bugfix-AWSCRTHTTPClient-74b3f8f.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"type": "bugfix",
"category": "AWS CRT HTTP Client",
"contributor": "",
"description": "Roll back enabling default connection health monitoring for CRT HTTP clients"
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@
import static software.amazon.awssdk.crtcore.CrtConfigurationUtils.resolveProxy;
import static software.amazon.awssdk.http.SdkHttpConfigurationOption.PROTOCOL;
import static software.amazon.awssdk.http.crt.internal.AwsCrtConfigurationUtils.buildSocketOptions;
import static software.amazon.awssdk.http.crt.internal.AwsCrtConfigurationUtils.defaultConnectionHealthConfiguration;
import static software.amazon.awssdk.http.crt.internal.AwsCrtConfigurationUtils.resolveCipherPreference;
import static software.amazon.awssdk.utils.FunctionalUtils.invokeSafely;

Expand Down Expand Up @@ -99,7 +98,7 @@ abstract class AwsCrtHttpClientBase implements SdkAutoCloseable {
this.maxStreamsPerEndpoint = config.get(SdkHttpConfigurationOption.MAX_CONNECTIONS);
this.monitoringOptions =
resolveHttpMonitoringOptions(builder.getConnectionHealthConfiguration())
.orElseGet(() -> defaultConnectionHealthConfiguration(config));
.orElse(null);
this.maxConnectionIdleInMilliseconds = config.get(SdkHttpConfigurationOption.CONNECTION_MAX_IDLE_TIMEOUT).toMillis();
this.connectionAcquisitionTimeout = config.get(SdkHttpConfigurationOption.CONNECTION_ACQUIRE_TIMEOUT).toMillis();
this.proxyOptions = resolveProxy(builder.getProxyConfiguration(), tlsContext).orElse(null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@

import java.time.Duration;
import software.amazon.awssdk.annotations.SdkInternalApi;
import software.amazon.awssdk.crt.http.HttpMonitoringOptions;

Check warning on line 21 in http-clients/aws-crt-client/src/main/java/software/amazon/awssdk/http/crt/internal/AwsCrtConfigurationUtils.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this unused import 'software.amazon.awssdk.crt.http.HttpMonitoringOptions'.

See more on https://sonarcloud.io/project/issues?id=aws_aws-sdk-java-v2&issues=AZ1zVZrKXC8UQnQhhG41&open=AZ1zVZrKXC8UQnQhhG41&pullRequest=6851
import software.amazon.awssdk.crt.io.SocketOptions;
import software.amazon.awssdk.crt.io.TlsCipherPreference;
import software.amazon.awssdk.http.SdkHttpConfigurationOption;

Check warning on line 24 in http-clients/aws-crt-client/src/main/java/software/amazon/awssdk/http/crt/internal/AwsCrtConfigurationUtils.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this unused import 'software.amazon.awssdk.http.SdkHttpConfigurationOption'.

See more on https://sonarcloud.io/project/issues?id=aws_aws-sdk-java-v2&issues=AZ1zVZrKXC8UQnQhhG42&open=AZ1zVZrKXC8UQnQhhG42&pullRequest=6851
import software.amazon.awssdk.http.crt.AwsCrtAsyncHttpClient;
import software.amazon.awssdk.http.crt.TcpKeepAliveConfiguration;
import software.amazon.awssdk.utils.AttributeMap;

Check warning on line 27 in http-clients/aws-crt-client/src/main/java/software/amazon/awssdk/http/crt/internal/AwsCrtConfigurationUtils.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this unused import 'software.amazon.awssdk.utils.AttributeMap'.

See more on https://sonarcloud.io/project/issues?id=aws_aws-sdk-java-v2&issues=AZ1zVZrKXC8UQnQhhG43&open=AZ1zVZrKXC8UQnQhhG43&pullRequest=6851
import software.amazon.awssdk.utils.Logger;
import software.amazon.awssdk.utils.NumericUtils;

Expand Down Expand Up @@ -72,15 +72,4 @@

return pqTls;
}

public static HttpMonitoringOptions defaultConnectionHealthConfiguration(AttributeMap config) {
HttpMonitoringOptions httpMonitoringOptions = new HttpMonitoringOptions();
httpMonitoringOptions.setMinThroughputBytesPerSecond(1);
long readTimeout = config.get(SdkHttpConfigurationOption.READ_TIMEOUT).getSeconds();
long writeTimeout = config.get(SdkHttpConfigurationOption.WRITE_TIMEOUT).getSeconds();
int maxTimeout = NumericUtils.saturatedCast(Math.max(readTimeout, writeTimeout));
httpMonitoringOptions.setAllowableThroughputFailureIntervalSeconds(maxTimeout);
return httpMonitoringOptions;
}

}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,12 @@
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import software.amazon.awssdk.crt.http.HttpMonitoringOptions;

Check warning on line 29 in http-clients/aws-crt-client/src/test/java/software/amazon/awssdk/http/crt/internal/AwsCrtConfigurationUtilsTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this unused import 'software.amazon.awssdk.crt.http.HttpMonitoringOptions'.

See more on https://sonarcloud.io/project/issues?id=aws_aws-sdk-java-v2&issues=AZ1zVZmUXC8UQnQhhG4y&open=AZ1zVZmUXC8UQnQhhG4y&pullRequest=6851
import software.amazon.awssdk.crt.io.SocketOptions;
import software.amazon.awssdk.crt.io.TlsCipherPreference;
import software.amazon.awssdk.http.SdkHttpConfigurationOption;

Check warning on line 32 in http-clients/aws-crt-client/src/test/java/software/amazon/awssdk/http/crt/internal/AwsCrtConfigurationUtilsTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this unused import 'software.amazon.awssdk.http.SdkHttpConfigurationOption'.

See more on https://sonarcloud.io/project/issues?id=aws_aws-sdk-java-v2&issues=AZ1zVZmUXC8UQnQhhG4z&open=AZ1zVZmUXC8UQnQhhG4z&pullRequest=6851
import software.amazon.awssdk.http.crt.TcpKeepAliveConfiguration;
import software.amazon.awssdk.utils.AttributeMap;

Check warning on line 34 in http-clients/aws-crt-client/src/test/java/software/amazon/awssdk/http/crt/internal/AwsCrtConfigurationUtilsTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this unused import 'software.amazon.awssdk.utils.AttributeMap'.

See more on https://sonarcloud.io/project/issues?id=aws_aws-sdk-java-v2&issues=AZ1zVZmUXC8UQnQhhG40&open=AZ1zVZmUXC8UQnQhhG40&pullRequest=6851

class AwsCrtConfigurationUtilsTest {
@ParameterizedTest
Expand Down Expand Up @@ -103,32 +103,4 @@
)
);
}

@ParameterizedTest
@MethodSource("defaultConnectionHealthConfigurationCases")
void defaultConnectionHealthConfiguration_shouldUseMaxOfReadWriteTimeout(Duration readTimeout,
Duration writeTimeout,
int expectedInterval) {
AttributeMap config = AttributeMap.builder()
.put(SdkHttpConfigurationOption.READ_TIMEOUT, readTimeout)
.put(SdkHttpConfigurationOption.WRITE_TIMEOUT, writeTimeout)
.build();

HttpMonitoringOptions result = AwsCrtConfigurationUtils.defaultConnectionHealthConfiguration(config);

assertThat(result.getMinThroughputBytesPerSecond()).isEqualTo(1);
assertThat(result.getAllowableThroughputFailureIntervalSeconds()).isEqualTo(expectedInterval);
}

private static Stream<Arguments> defaultConnectionHealthConfigurationCases() {
return Stream.of(
Arguments.of(Duration.ofSeconds(30), Duration.ofSeconds(30), 30),
Arguments.of(Duration.ofSeconds(60), Duration.ofSeconds(10), 60),
Arguments.of(Duration.ofSeconds(10), Duration.ofSeconds(45), 45),
// overflow: value exceeding Integer.MAX_VALUE should saturate
Arguments.of(Duration.ofSeconds((long) Integer.MAX_VALUE + 1), Duration.ofSeconds(1), Integer.MAX_VALUE),
Arguments.of(Duration.ofSeconds(1), Duration.ofSeconds((long) Integer.MAX_VALUE + 1), Integer.MAX_VALUE)
);
}

}
Loading