This is an automated email from the ASF dual-hosted git repository. janhoy pushed a commit to branch branch_9_10 in repository https://gitbox.apache.org/repos/asf/solr.git
commit 858d82709130ccd249618bb652d08eba42b2367d Author: Jan Høydahl <[email protected]> AuthorDate: Tue Dec 9 14:01:31 2025 +0100 SOLR-18012 Improve test DistributedFacetSimpleRefinementLongTailTest that failed for some seeds (#3924) (cherry picked from commit 85390422881cbf7120377767147893ac3b3b8c00) (cherry picked from commit fa8c59bf08a7a538c0eb0c38feb002cccc9143f6) --- .../DistributedFacetSimpleRefinementLongTailTest.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/solr/core/src/test/org/apache/solr/search/facet/DistributedFacetSimpleRefinementLongTailTest.java b/solr/core/src/test/org/apache/solr/search/facet/DistributedFacetSimpleRefinementLongTailTest.java index 017b651dd5b..53f90f17462 100644 --- a/solr/core/src/test/org/apache/solr/search/facet/DistributedFacetSimpleRefinementLongTailTest.java +++ b/solr/core/src/test/org/apache/solr/search/facet/DistributedFacetSimpleRefinementLongTailTest.java @@ -39,6 +39,12 @@ import org.junit.Test; */ public class DistributedFacetSimpleRefinementLongTailTest extends BaseDistributedSearchTestCase { + // Percentile calculations use the t-digest approximation algorithm with compression=100. + // When merging t-digests from multiple shards, approximation errors compound, especially + // for extreme percentiles (like 90th). A tolerance of 3.0 (~0.6% relative error for values + // in range [-99,693]) accounts for this distributed aggregation error. + private static final double PERCENTILE_TOLERANCE = 3.0; + private static List<String> ALL_STATS = Arrays.asList( "min", @@ -287,7 +293,7 @@ public class DistributedFacetSimpleRefinementLongTailTest extends BaseDistribute assertEquals(101L, bucket.get("countvals")); assertEquals(0L, bucket.get("missing")); assertEquals(48.0D, bucket.get("sum")); - assertEquals(1.0D, bucket.get("percentile")); + assertEquals(1.0D, (double) bucket.get("percentile"), PERCENTILE_TOLERANCE); assertEquals(0.475247524752475D, (double) bucket.get("avg"), 0.1E-7); assertEquals(54.0D, (double) bucket.get("sumsq"), 0.1E-7); assertEquals(0.55846323792D, (double) bucket.get("stddev"), 0.1E-7); @@ -511,7 +517,7 @@ public class DistributedFacetSimpleRefinementLongTailTest extends BaseDistribute assertEquals(300L, aaa0_Bucket.get("countvals")); assertEquals(0L, aaa0_Bucket.get("missing")); assertEquals(34650.0D, aaa0_Bucket.get("sum")); - assertEquals(486.5D, (double) aaa0_Bucket.get("percentile"), 0.1E-7); + assertEquals(486.5D, (double) aaa0_Bucket.get("percentile"), PERCENTILE_TOLERANCE); assertEquals(115.5D, (double) aaa0_Bucket.get("avg"), 0.1E-7); assertEquals(1.674585E7D, (double) aaa0_Bucket.get("sumsq"), 0.1E-7); assertEquals(206.4493184076D, (double) aaa0_Bucket.get("stddev"), 0.1E-7); @@ -527,7 +533,7 @@ public class DistributedFacetSimpleRefinementLongTailTest extends BaseDistribute assertEquals(0L, tail_Bucket.get("min")); assertEquals(44L, tail_Bucket.get("max")); assertEquals(90L, tail_Bucket.get("countvals")); - assertEquals(40.0D, tail_Bucket.get("percentile")); + assertEquals(40.0D, (double) tail_Bucket.get("percentile"), PERCENTILE_TOLERANCE); assertEquals(45L, tail_Bucket.get("missing")); assertEquals(1980.0D, tail_Bucket.get("sum")); assertEquals(22.0D, (double) tail_Bucket.get("avg"), 0.1E-7); @@ -548,7 +554,7 @@ public class DistributedFacetSimpleRefinementLongTailTest extends BaseDistribute assertEquals(35L, tailB_Bucket.get("min")); assertEquals(40L, tailB_Bucket.get("max")); assertEquals(12L, tailB_Bucket.get("countvals")); - assertEquals(40.0D, tailB_Bucket.get("percentile")); + assertEquals(40.0D, (double) tailB_Bucket.get("percentile"), PERCENTILE_TOLERANCE); assertEquals(5L, tailB_Bucket.get("missing")); assertEquals(450.0D, tailB_Bucket.get("sum")); assertEquals(37.5D, (double) tailB_Bucket.get("avg"), 0.1E-7);
