Make DynamoDB client connection pool sizes configurable
This commit is contained in:
parent
e09dec330a
commit
c85ddaeb9c
|
@ -297,6 +297,14 @@
|
||||||
<artifactId>reactor-grpc-stub</artifactId>
|
<artifactId>reactor-grpc-stub</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>software.amazon.awssdk</groupId>
|
||||||
|
<artifactId>apache-client</artifactId>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>software.amazon.awssdk</groupId>
|
||||||
|
<artifactId>netty-nio-client</artifactId>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>software.amazon.awssdk</groupId>
|
<groupId>software.amazon.awssdk</groupId>
|
||||||
<artifactId>sts</artifactId>
|
<artifactId>sts</artifactId>
|
||||||
|
|
|
@ -5,37 +5,27 @@
|
||||||
|
|
||||||
package org.whispersystems.textsecuregcm.configuration;
|
package org.whispersystems.textsecuregcm.configuration;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
|
||||||
import java.time.Duration;
|
import java.time.Duration;
|
||||||
import javax.validation.constraints.NotEmpty;
|
import javax.validation.constraints.NotBlank;
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
import javax.validation.constraints.Positive;
|
||||||
|
|
||||||
public class DynamoDbClientConfiguration {
|
public record DynamoDbClientConfiguration(@NotBlank String region,
|
||||||
|
@NotNull Duration clientExecutionTimeout,
|
||||||
|
@NotNull Duration clientRequestTimeout,
|
||||||
|
@Positive int maxConnections) {
|
||||||
|
|
||||||
private final String region;
|
public DynamoDbClientConfiguration {
|
||||||
private final Duration clientExecutionTimeout;
|
if (clientExecutionTimeout == null) {
|
||||||
private final Duration clientRequestTimeout;
|
clientExecutionTimeout = Duration.ofSeconds(30);
|
||||||
|
|
||||||
@JsonCreator
|
|
||||||
public DynamoDbClientConfiguration(
|
|
||||||
@JsonProperty("region") final String region,
|
|
||||||
@JsonProperty("clientExcecutionTimeout") final Duration clientExecutionTimeout,
|
|
||||||
@JsonProperty("clientRequestTimeout") final Duration clientRequestTimeout) {
|
|
||||||
this.region = region;
|
|
||||||
this.clientExecutionTimeout = clientExecutionTimeout != null ? clientExecutionTimeout : Duration.ofSeconds(30);
|
|
||||||
this.clientRequestTimeout = clientRequestTimeout != null ? clientRequestTimeout : Duration.ofSeconds(10);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotEmpty
|
if (clientRequestTimeout == null) {
|
||||||
public String getRegion() {
|
clientRequestTimeout = Duration.ofSeconds(10);
|
||||||
return region;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Duration getClientExecutionTimeout() {
|
if (maxConnections == 0) {
|
||||||
return clientExecutionTimeout;
|
maxConnections = 50;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Duration getClientRequestTimeout() {
|
|
||||||
return clientRequestTimeout;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,8 @@ package org.whispersystems.textsecuregcm.util;
|
||||||
import org.whispersystems.textsecuregcm.configuration.DynamoDbClientConfiguration;
|
import org.whispersystems.textsecuregcm.configuration.DynamoDbClientConfiguration;
|
||||||
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
|
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
|
||||||
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
|
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
|
||||||
|
import software.amazon.awssdk.http.apache.ApacheHttpClient;
|
||||||
|
import software.amazon.awssdk.http.nio.netty.NettyNioAsyncHttpClient;
|
||||||
import software.amazon.awssdk.regions.Region;
|
import software.amazon.awssdk.regions.Region;
|
||||||
import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient;
|
import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient;
|
||||||
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
|
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
|
||||||
|
@ -11,12 +13,14 @@ public class DynamoDbFromConfig {
|
||||||
|
|
||||||
public static DynamoDbClient client(DynamoDbClientConfiguration config, AwsCredentialsProvider credentialsProvider) {
|
public static DynamoDbClient client(DynamoDbClientConfiguration config, AwsCredentialsProvider credentialsProvider) {
|
||||||
return DynamoDbClient.builder()
|
return DynamoDbClient.builder()
|
||||||
.region(Region.of(config.getRegion()))
|
.region(Region.of(config.region()))
|
||||||
.credentialsProvider(credentialsProvider)
|
.credentialsProvider(credentialsProvider)
|
||||||
.overrideConfiguration(ClientOverrideConfiguration.builder()
|
.overrideConfiguration(ClientOverrideConfiguration.builder()
|
||||||
.apiCallTimeout(config.getClientExecutionTimeout())
|
.apiCallTimeout(config.clientExecutionTimeout())
|
||||||
.apiCallAttemptTimeout(config.getClientRequestTimeout())
|
.apiCallAttemptTimeout(config.clientRequestTimeout())
|
||||||
.build())
|
.build())
|
||||||
|
.httpClientBuilder(ApacheHttpClient.builder()
|
||||||
|
.maxConnections(config.maxConnections()))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,12 +28,14 @@ public class DynamoDbFromConfig {
|
||||||
DynamoDbClientConfiguration config,
|
DynamoDbClientConfiguration config,
|
||||||
AwsCredentialsProvider credentialsProvider) {
|
AwsCredentialsProvider credentialsProvider) {
|
||||||
return DynamoDbAsyncClient.builder()
|
return DynamoDbAsyncClient.builder()
|
||||||
.region(Region.of(config.getRegion()))
|
.region(Region.of(config.region()))
|
||||||
.credentialsProvider(credentialsProvider)
|
.credentialsProvider(credentialsProvider)
|
||||||
.overrideConfiguration(ClientOverrideConfiguration.builder()
|
.overrideConfiguration(ClientOverrideConfiguration.builder()
|
||||||
.apiCallTimeout(config.getClientExecutionTimeout())
|
.apiCallTimeout(config.clientExecutionTimeout())
|
||||||
.apiCallAttemptTimeout(config.getClientRequestTimeout())
|
.apiCallAttemptTimeout(config.clientRequestTimeout())
|
||||||
.build())
|
.build())
|
||||||
|
.httpClientBuilder(NettyNioAsyncHttpClient.builder()
|
||||||
|
.maxConcurrency(config.maxConnections()))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue