From 435d22adabd6876ea9d369b855004643e6385ba7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20H=C3=B8ydahl?= Date: Sun, 28 Jun 2026 22:33:45 +0200 Subject: [PATCH 1/2] SOLR-18295: Fix flaky ReplicationFactorTest by retrying single-doc sends --- .../solr/cloud/ReplicationFactorTest.java | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java b/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java index eb63af4a5ac5..074c5f376704 100644 --- a/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java +++ b/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java @@ -27,7 +27,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.stream.Collectors; -import org.apache.lucene.tests.util.LuceneTestCase.AwaitsFix; import org.apache.solr.SolrTestCaseJ4.SuppressSSL; import org.apache.solr.client.solrj.SolrClient; import org.apache.solr.client.solrj.SolrServerException; @@ -50,7 +49,6 @@ * after an add or update. */ @SuppressSSL(bugUrl = "https://issues.apache.org/jira/browse/SOLR-5776") -@AwaitsFix(bugUrl = "https://issues.apache.org/jira/browse/SOLR-18295") // 28-Jun-2026 flaky public class ReplicationFactorTest extends AbstractFullDistribZkTestBase { private static final Logger log = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); @@ -492,10 +490,22 @@ protected int sendDoc(String collectionName, int docId) throws Exception { return runAndGetAchievedRf(collectionName, up); } - private int runAndGetAchievedRf(String collectionName, UpdateRequest up) - throws SolrServerException, IOException { - NamedList response = cloudClient.request(up, collectionName); - return cloudClient.getMinAchievedReplicationFactor(collectionName, response); + private int runAndGetAchievedRf(String collectionName, UpdateRequest up) throws Exception { + // This test may fail due to http proxy port manipulation, make sure we retry like sendDocsWithRetry/doDelete + final int maxRetries = 5; + int numRetries = 0; + while (true) { + try { + NamedList response = cloudClient.request(up, collectionName); + return cloudClient.getMinAchievedReplicationFactor(collectionName, response); + } catch (SolrServerException | IOException exc) { + if (++numRetries > maxRetries) { + throw exc; + } + log.warn("Update failed, retrying ({}/{}) ...", numRetries, maxRetries, exc); + Thread.sleep(1000); + } + } } protected void assertRf(int expected, String explain, int actual) throws Exception { From 54f375b0bed805a08e1b456bd782e15dfce74723 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20H=C3=B8ydahl?= Date: Tue, 30 Jun 2026 22:04:04 +0200 Subject: [PATCH 2/2] Tidy --- .../src/test/org/apache/solr/cloud/ReplicationFactorTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java b/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java index 074c5f376704..70cb89321e3f 100644 --- a/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java +++ b/solr/core/src/test/org/apache/solr/cloud/ReplicationFactorTest.java @@ -491,7 +491,8 @@ protected int sendDoc(String collectionName, int docId) throws Exception { } private int runAndGetAchievedRf(String collectionName, UpdateRequest up) throws Exception { - // This test may fail due to http proxy port manipulation, make sure we retry like sendDocsWithRetry/doDelete + // This test may fail due to http proxy port manipulation, make sure we retry like + // sendDocsWithRetry/doDelete final int maxRetries = 5; int numRetries = 0; while (true) {