This is an automated email from the ASF dual-hosted git repository.
houston pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git
The following commit(s) were added to refs/heads/main by this push:
new aef65cbd1ad SOLR-17769: Use S3 RetryStrategy instead of RetryPolicy
(#3375)
aef65cbd1ad is described below
commit aef65cbd1ad7b5206e42bcaa84f6c10163daec98
Author: Houston Putman <[email protected]>
AuthorDate: Tue Jun 10 17:24:49 2025 -0500
SOLR-17769: Use S3 RetryStrategy instead of RetryPolicy (#3375)
---
gradle/libs.versions.toml | 1 +
solr/CHANGES.txt | 2 ++
solr/modules/s3-repository/build.gradle | 1 +
.../src/java/org/apache/solr/s3/S3StorageClient.java | 18 ++++++------------
.../org/apache/solr/s3/S3IncrementalBackupTest.java | 13 +++++++++++++
5 files changed, 23 insertions(+), 12 deletions(-)
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 5c0d4cb7239..666548f7c96 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -225,6 +225,7 @@ amazon-awssdk-bom = { module =
"software.amazon.awssdk:bom", version.ref = "amaz
amazon-awssdk-httpclient-spi = { module =
"software.amazon.awssdk:http-client-spi", version.ref = "amazon-awssdk" }
amazon-awssdk-profiles = { module = "software.amazon.awssdk:profiles",
version.ref = "amazon-awssdk" }
amazon-awssdk-regions = { module = "software.amazon.awssdk:regions",
version.ref = "amazon-awssdk" }
+amazon-awssdk-retries-spi = { module = "software.amazon.awssdk:retries-spi",
version.ref = "amazon-awssdk" }
amazon-awssdk-s3 = { module = "software.amazon.awssdk:s3", version.ref =
"amazon-awssdk" }
amazon-awssdk-sdkcore = { module = "software.amazon.awssdk:sdk-core",
version.ref = "amazon-awssdk" }
amazon-awssdk-sts = { module = "software.amazon.awssdk:sts", version.ref =
"amazon-awssdk" }
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index afbbcef4365..275a8f734fe 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -307,6 +307,8 @@ Bug Fixes
* SOLR-17754: Fix rare bug in overseer main loop in case of high load, that
may cause the overseer be fully stuck until
server restart. (Pierre Salagnac)
+* SOLR-17769: Use S3 RetryStrategy instead of RetryPolicy. This fixes the
error caused by using the "Adaptive" retry mode. (Houston Putman)
+
Dependency Upgrades
---------------------
* SOLR-17471: Upgrade Lucene to 9.12.1. (Pierre Salagnac, Christine Poerschke)
diff --git a/solr/modules/s3-repository/build.gradle
b/solr/modules/s3-repository/build.gradle
index 66124511b4f..d1f27267486 100644
--- a/solr/modules/s3-repository/build.gradle
+++ b/solr/modules/s3-repository/build.gradle
@@ -32,6 +32,7 @@ dependencies {
implementation libs.amazon.awssdk.awscore
implementation libs.amazon.awssdk.regions
implementation libs.amazon.awssdk.httpclient.spi
+ implementation libs.amazon.awssdk.retries.spi
implementation(libs.amazon.awssdk.s3) {
exclude group: 'software.amazon.awssdk', module: 'netty-nio-client'
}
diff --git
a/solr/modules/s3-repository/src/java/org/apache/solr/s3/S3StorageClient.java
b/solr/modules/s3-repository/src/java/org/apache/solr/s3/S3StorageClient.java
index d6b52acc4e5..0add42da2d6 100644
---
a/solr/modules/s3-repository/src/java/org/apache/solr/s3/S3StorageClient.java
+++
b/solr/modules/s3-repository/src/java/org/apache/solr/s3/S3StorageClient.java
@@ -38,15 +38,16 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
import software.amazon.awssdk.awscore.exception.AwsServiceException;
+import software.amazon.awssdk.awscore.retry.AwsRetryStrategy;
import software.amazon.awssdk.core.exception.SdkClientException;
import software.amazon.awssdk.core.exception.SdkException;
import software.amazon.awssdk.core.retry.RetryMode;
-import software.amazon.awssdk.core.retry.RetryPolicy;
import software.amazon.awssdk.core.sync.RequestBody;
import software.amazon.awssdk.core.sync.ResponseTransformer;
import software.amazon.awssdk.http.apache.ApacheHttpClient;
import software.amazon.awssdk.http.apache.ProxyConfiguration;
import software.amazon.awssdk.regions.Region;
+import software.amazon.awssdk.retries.api.RetryStrategy;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.S3ClientBuilder;
import software.amazon.awssdk.services.s3.S3Configuration;
@@ -137,23 +138,16 @@ public class S3StorageClient {
/*
* Retry logic
*/
- RetryPolicy retryPolicy;
+ RetryStrategy retryStrategy;
if (disableRetries) {
- retryPolicy = RetryPolicy.none();
+ retryStrategy = AwsRetryStrategy.doNotRetry();
} else {
RetryMode.Resolver retryModeResolver = RetryMode.resolver();
if (StrUtils.isNotNullOrEmpty(profile)) {
retryModeResolver.profileName(profile);
}
RetryMode retryMode = retryModeResolver.resolve();
- RetryPolicy.Builder retryPolicyBuilder = RetryPolicy.builder(retryMode);
-
- // Do not fail fast on rate limiting
- if (retryMode == RetryMode.ADAPTIVE) {
- retryPolicyBuilder.fastFailRateLimiting(false);
- }
-
- retryPolicy = retryPolicyBuilder.build();
+ retryStrategy = AwsRetryStrategy.forRetryMode(retryMode);
}
/*
@@ -171,7 +165,7 @@ public class S3StorageClient {
S3ClientBuilder clientBuilder =
S3Client.builder()
.credentialsProvider(credentialsProviderBuilder.build())
- .overrideConfiguration(builder -> builder.retryPolicy(retryPolicy))
+ .overrideConfiguration(builder ->
builder.retryStrategy(retryStrategy))
.serviceConfiguration(configBuilder.build())
.httpClient(sdkHttpClientBuilder.build());
diff --git
a/solr/modules/s3-repository/src/test/org/apache/solr/s3/S3IncrementalBackupTest.java
b/solr/modules/s3-repository/src/test/org/apache/solr/s3/S3IncrementalBackupTest.java
index 572e8a1274f..17223f6deb2 100644
---
a/solr/modules/s3-repository/src/test/org/apache/solr/s3/S3IncrementalBackupTest.java
+++
b/solr/modules/s3-repository/src/test/org/apache/solr/s3/S3IncrementalBackupTest.java
@@ -88,6 +88,19 @@ public class S3IncrementalBackupTest extends
AbstractIncrementalBackupTest {
public static void setupClass() throws Exception {
System.setProperty("aws.accessKeyId", "foo");
System.setProperty("aws.secretAccessKey", "bar");
+ String retryMode;
+ switch (random().nextInt(3)) {
+ case 0:
+ retryMode = "legacy";
+ break;
+ case 1:
+ retryMode = "standard";
+ break;
+ default:
+ retryMode = "adaptive";
+ break;
+ }
+ System.setProperty("aws.retryMode", retryMode);
AbstractS3ClientTest.setS3ConfFile();