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)
