Skip to content

Commit aef65cb

Browse files
SOLR-17769: Use S3 RetryStrategy instead of RetryPolicy (#3375)
1 parent ea05dc6 commit aef65cb

5 files changed

Lines changed: 23 additions & 12 deletions

File tree

gradle/libs.versions.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ amazon-awssdk-bom = { module = "software.amazon.awssdk:bom", version.ref = "amaz
225225
amazon-awssdk-httpclient-spi = { module = "software.amazon.awssdk:http-client-spi", version.ref = "amazon-awssdk" }
226226
amazon-awssdk-profiles = { module = "software.amazon.awssdk:profiles", version.ref = "amazon-awssdk" }
227227
amazon-awssdk-regions = { module = "software.amazon.awssdk:regions", version.ref = "amazon-awssdk" }
228+
amazon-awssdk-retries-spi = { module = "software.amazon.awssdk:retries-spi", version.ref = "amazon-awssdk" }
228229
amazon-awssdk-s3 = { module = "software.amazon.awssdk:s3", version.ref = "amazon-awssdk" }
229230
amazon-awssdk-sdkcore = { module = "software.amazon.awssdk:sdk-core", version.ref = "amazon-awssdk" }
230231
amazon-awssdk-sts = { module = "software.amazon.awssdk:sts", version.ref = "amazon-awssdk" }

solr/CHANGES.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,8 @@ Bug Fixes
307307
* SOLR-17754: Fix rare bug in overseer main loop in case of high load, that may cause the overseer be fully stuck until
308308
server restart. (Pierre Salagnac)
309309

310+
* SOLR-17769: Use S3 RetryStrategy instead of RetryPolicy. This fixes the error caused by using the "Adaptive" retry mode. (Houston Putman)
311+
310312
Dependency Upgrades
311313
---------------------
312314
* SOLR-17471: Upgrade Lucene to 9.12.1. (Pierre Salagnac, Christine Poerschke)

solr/modules/s3-repository/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ dependencies {
3232
implementation libs.amazon.awssdk.awscore
3333
implementation libs.amazon.awssdk.regions
3434
implementation libs.amazon.awssdk.httpclient.spi
35+
implementation libs.amazon.awssdk.retries.spi
3536
implementation(libs.amazon.awssdk.s3) {
3637
exclude group: 'software.amazon.awssdk', module: 'netty-nio-client'
3738
}

solr/modules/s3-repository/src/java/org/apache/solr/s3/S3StorageClient.java

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,16 @@
3838
import org.slf4j.LoggerFactory;
3939
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
4040
import software.amazon.awssdk.awscore.exception.AwsServiceException;
41+
import software.amazon.awssdk.awscore.retry.AwsRetryStrategy;
4142
import software.amazon.awssdk.core.exception.SdkClientException;
4243
import software.amazon.awssdk.core.exception.SdkException;
4344
import software.amazon.awssdk.core.retry.RetryMode;
44-
import software.amazon.awssdk.core.retry.RetryPolicy;
4545
import software.amazon.awssdk.core.sync.RequestBody;
4646
import software.amazon.awssdk.core.sync.ResponseTransformer;
4747
import software.amazon.awssdk.http.apache.ApacheHttpClient;
4848
import software.amazon.awssdk.http.apache.ProxyConfiguration;
4949
import software.amazon.awssdk.regions.Region;
50+
import software.amazon.awssdk.retries.api.RetryStrategy;
5051
import software.amazon.awssdk.services.s3.S3Client;
5152
import software.amazon.awssdk.services.s3.S3ClientBuilder;
5253
import software.amazon.awssdk.services.s3.S3Configuration;
@@ -137,23 +138,16 @@ private static S3Client createInternalClient(
137138
/*
138139
* Retry logic
139140
*/
140-
RetryPolicy retryPolicy;
141+
RetryStrategy retryStrategy;
141142
if (disableRetries) {
142-
retryPolicy = RetryPolicy.none();
143+
retryStrategy = AwsRetryStrategy.doNotRetry();
143144
} else {
144145
RetryMode.Resolver retryModeResolver = RetryMode.resolver();
145146
if (StrUtils.isNotNullOrEmpty(profile)) {
146147
retryModeResolver.profileName(profile);
147148
}
148149
RetryMode retryMode = retryModeResolver.resolve();
149-
RetryPolicy.Builder retryPolicyBuilder = RetryPolicy.builder(retryMode);
150-
151-
// Do not fail fast on rate limiting
152-
if (retryMode == RetryMode.ADAPTIVE) {
153-
retryPolicyBuilder.fastFailRateLimiting(false);
154-
}
155-
156-
retryPolicy = retryPolicyBuilder.build();
150+
retryStrategy = AwsRetryStrategy.forRetryMode(retryMode);
157151
}
158152

159153
/*
@@ -171,7 +165,7 @@ private static S3Client createInternalClient(
171165
S3ClientBuilder clientBuilder =
172166
S3Client.builder()
173167
.credentialsProvider(credentialsProviderBuilder.build())
174-
.overrideConfiguration(builder -> builder.retryPolicy(retryPolicy))
168+
.overrideConfiguration(builder -> builder.retryStrategy(retryStrategy))
175169
.serviceConfiguration(configBuilder.build())
176170
.httpClient(sdkHttpClientBuilder.build());
177171

solr/modules/s3-repository/src/test/org/apache/solr/s3/S3IncrementalBackupTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,19 @@ public static void ensureCompatibleLocale() {
8888
public static void setupClass() throws Exception {
8989
System.setProperty("aws.accessKeyId", "foo");
9090
System.setProperty("aws.secretAccessKey", "bar");
91+
String retryMode;
92+
switch (random().nextInt(3)) {
93+
case 0:
94+
retryMode = "legacy";
95+
break;
96+
case 1:
97+
retryMode = "standard";
98+
break;
99+
default:
100+
retryMode = "adaptive";
101+
break;
102+
}
103+
System.setProperty("aws.retryMode", retryMode);
91104

92105
AbstractS3ClientTest.setS3ConfFile();
93106

0 commit comments

Comments
 (0)