Skip to content

Commit

Permalink
Adding configurable connection count setting for S3 Sync Client
Browse files Browse the repository at this point in the history
Signed-off-by: Gaurav Bafna <[email protected]>
  • Loading branch information
gbbafna committed Jan 26, 2024
1 parent 9f649e0 commit 805b7f9
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,12 @@ final class S3ClientSettings {
key -> Setting.intSetting(key, 500, Property.NodeScope)
);

static final Setting.AffixSetting<Integer> MAX_SYNC_CONNECTIONS_SETTING = Setting.affixKeySetting(
PREFIX,
"max_sync_connections",
key -> Setting.intSetting(key, 100, Property.NodeScope)
);

/** Connection acquisition timeout for new connections to S3. */
static final Setting.AffixSetting<TimeValue> CONNECTION_ACQUISITION_TIMEOUT = Setting.affixKeySetting(
PREFIX,
Expand Down Expand Up @@ -284,9 +290,12 @@ final class S3ClientSettings {
/** The connection TTL for the s3 client */
final int connectionTTLMillis;

/** The max number of connections for the s3 client */
/** The max number of connections for the s3 async client */
final int maxConnections;

/** The max number of connections for the s3 sync client */
final int maxSyncConnections;

/** The connnection acquisition timeout for the s3 async client */
final int connectionAcquisitionTimeoutMillis;

Expand Down Expand Up @@ -318,6 +327,7 @@ private S3ClientSettings(
int connectionTimeoutMillis,
int connectionTTLMillis,
int maxConnections,
int maxSyncConnections,
int connectionAcquisitionTimeoutMillis,
int maxRetries,
boolean throttleRetries,
Expand All @@ -336,6 +346,7 @@ private S3ClientSettings(
this.connectionTimeoutMillis = connectionTimeoutMillis;
this.connectionTTLMillis = connectionTTLMillis;
this.maxConnections = maxConnections;
this.maxSyncConnections = maxSyncConnections;
this.connectionAcquisitionTimeoutMillis = connectionAcquisitionTimeoutMillis;
this.maxRetries = maxRetries;
this.throttleRetries = throttleRetries;
Expand Down Expand Up @@ -386,6 +397,9 @@ S3ClientSettings refine(Settings repositorySettings) {
).millis()
);
final int newMaxConnections = Math.toIntExact(getRepoSettingOrDefault(MAX_CONNECTIONS_SETTING, normalizedSettings, maxConnections));
final int newMaxSyncConnections = Math.toIntExact(
getRepoSettingOrDefault(MAX_SYNC_CONNECTIONS_SETTING, normalizedSettings, maxConnections)
);
final int newMaxRetries = getRepoSettingOrDefault(MAX_RETRIES_SETTING, normalizedSettings, maxRetries);
final boolean newThrottleRetries = getRepoSettingOrDefault(USE_THROTTLE_RETRIES_SETTING, normalizedSettings, throttleRetries);
final boolean newPathStyleAccess = getRepoSettingOrDefault(USE_PATH_STYLE_ACCESS, normalizedSettings, pathStyleAccess);
Expand Down Expand Up @@ -433,6 +447,7 @@ S3ClientSettings refine(Settings repositorySettings) {
newConnectionTimeoutMillis,
newConnectionTTLMillis,
newMaxConnections,
newMaxSyncConnections,
newConnectionAcquisitionTimeoutMillis,
newMaxRetries,
newThrottleRetries,
Expand Down Expand Up @@ -563,6 +578,7 @@ static S3ClientSettings getClientSettings(final Settings settings, final String
Math.toIntExact(getConfigValue(settings, clientName, CONNECTION_TIMEOUT_SETTING).millis()),
Math.toIntExact(getConfigValue(settings, clientName, CONNECTION_TTL_SETTING).millis()),
Math.toIntExact(getConfigValue(settings, clientName, MAX_CONNECTIONS_SETTING)),
Math.toIntExact(getConfigValue(settings, clientName, MAX_SYNC_CONNECTIONS_SETTING)),
Math.toIntExact(getConfigValue(settings, clientName, CONNECTION_ACQUISITION_TIMEOUT).millis()),
getConfigValue(settings, clientName, MAX_RETRIES_SETTING),
getConfigValue(settings, clientName, USE_THROTTLE_RETRIES_SETTING),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,8 @@ protected PasswordAuthentication getPasswordAuthentication() {
}

clientBuilder.socketTimeout(Duration.ofMillis(clientSettings.readTimeoutMillis));
clientBuilder.maxConnections(clientSettings.maxConnections);
clientBuilder.connectionAcquisitionTimeout(Duration.ofMillis(clientSettings.connectionAcquisitionTimeoutMillis));

return clientBuilder;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ public void testThereIsADefaultClientByDefault() {
assertThat(defaultSettings.connectionTimeoutMillis, is(10 * 1000));
assertThat(defaultSettings.connectionTTLMillis, is(5 * 1000));
assertThat(defaultSettings.maxConnections, is(500));
assertThat(defaultSettings.maxSyncConnections, is(100));
assertThat(defaultSettings.maxRetries, is(3));
assertThat(defaultSettings.throttleRetries, is(true));
}
Expand Down

0 comments on commit 805b7f9

Please sign in to comment.