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();
 

Reply via email to