Skip to content

Commit

Permalink
Adding configurable connection count setting for S3 Sync Client (open…
Browse files Browse the repository at this point in the history
…search-project#12028)

* Adding configurable connection count setting for S3 Sync Client

Signed-off-by: Gaurav Bafna <gbbafna@amazon.com>

* Address PR Comments

Signed-off-by: Gaurav Bafna <gbbafna@amazon.com>

* Increase number of connections to 500

Signed-off-by: Gaurav Bafna <gbbafna@amazon.com>

---------

Signed-off-by: Gaurav Bafna <gbbafna@amazon.com>
  • Loading branch information
gbbafna committed Jan 29, 2024
1 parent 0c54326 commit 208e36e
Show file tree
Hide file tree
Showing 4 changed files with 23 additions and 2 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
- Bump OpenTelemetry from 1.32.0 to 1.34.1 ([#11891](https://github.com/opensearch-project/OpenSearch/pull/11891))
- Add `org.opensearch.rest.MethodHandlers` and `RestController#getAllHandlers` ([11876](https://github.com/opensearch-project/OpenSearch/pull/11876))
- Support index level allocation filtering for searchable snapshot index ([#11563](https://github.com/opensearch-project/OpenSearch/pull/11563))
- [S3 Repository] Add setting to control connection count for sync client ([#12028](https://github.com/opensearch-project/OpenSearch/pull/12028))

### Dependencies
- Bumps jetty version to 9.4.52.v20230823 to fix GMS-2023-1857 ([#9822](https://github.com/opensearch-project/OpenSearch/pull/9822))
Expand Down
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, 500, 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,10 +290,13 @@ 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 connnection acquisition timeout for the s3 async client */
/** The max number of connections for the s3 sync client */
final int maxSyncConnections;

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

/** The number of retries to use for the s3 client. */
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.maxSyncConnections);
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,8 @@ public void testThereIsADefaultClientByDefault() {
assertThat(defaultSettings.connectionTimeoutMillis, is(10 * 1000));
assertThat(defaultSettings.connectionTTLMillis, is(5 * 1000));
assertThat(defaultSettings.maxConnections, is(500));
assertThat(defaultSettings.maxSyncConnections, is(500));
assertThat(defaultSettings.connectionAcquisitionTimeoutMillis, is(15 * 60 * 1000));
assertThat(defaultSettings.maxRetries, is(3));
assertThat(defaultSettings.throttleRetries, is(true));
}
Expand Down

0 comments on commit 208e36e

Please sign in to comment.