This is an automated email from the ASF dual-hosted git repository.

houston pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/solr.git

commit 7897e290ca281ecc29252e1a491773227266bbb9
Author: Houston Putman <[email protected]>
AuthorDate: Tue Jun 10 17:24:49 2025 -0500

    SOLR-17769: Use S3 RetryStrategy instead of RetryPolicy (#3375)
    
    (cherry picked from commit aef65cbd1ad7b5206e42bcaa84f6c10163daec98)
---
 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 +++++++++++++
 versions.lock                                          |  2 +-
 5 files changed, 23 insertions(+), 13 deletions(-)

diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 0b265ebe8ae..269e4b2c31d 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -116,6 +116,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 431df0820a1..a43d3f26260 100644
--- a/solr/modules/s3-repository/build.gradle
+++ b/solr/modules/s3-repository/build.gradle
@@ -31,6 +31,7 @@ dependencies {
   implementation(group: 'software.amazon.awssdk', name: 'aws-core')
   implementation(group: 'software.amazon.awssdk', name: 'regions')
   implementation(group: 'software.amazon.awssdk', name: 'http-client-spi')
+  implementation(group: 'software.amazon.awssdk', name: 'retries-spi')
   implementation(group: 'software.amazon.awssdk', name: '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 ecef0889e58..990a051eae8 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 64fbaa85be5..8e033de8c6e 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
@@ -92,6 +92,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();
 
diff --git a/versions.lock b/versions.lock
index a66408d2064..1279bf2e8cb 100644
--- a/versions.lock
+++ b/versions.lock
@@ -431,7 +431,7 @@ software.amazon.awssdk:profiles:2.26.19 (8 constraints: 
6f611a4a)
 software.amazon.awssdk:protocol-core:2.26.19 (5 constraints: 8f48485b)
 software.amazon.awssdk:regions:2.26.19 (7 constraints: 4c50ddb1)
 software.amazon.awssdk:retries:2.26.19 (3 constraints: d5284028)
-software.amazon.awssdk:retries-spi:2.26.19 (6 constraints: 304feb5b)
+software.amazon.awssdk:retries-spi:2.26.19 (7 constraints: a554599f)
 software.amazon.awssdk:s3:2.26.19 (4 constraints: e72f16c1)
 software.amazon.awssdk:sdk-core:2.26.19 (10 constraints: 92871ded)
 software.amazon.awssdk:sts:2.26.19 (2 constraints: d3115915)

Reply via email to