|
23 | 23 | import org.elasticsearch.common.io.stream.Writeable.Reader;
|
24 | 24 | import org.elasticsearch.search.DocValueFormat;
|
25 | 25 | import org.elasticsearch.search.aggregations.BucketOrder;
|
| 26 | +import org.elasticsearch.search.aggregations.InternalAggregation; |
| 27 | +import org.elasticsearch.search.aggregations.InternalAggregation.ReduceContext; |
26 | 28 | import org.elasticsearch.search.aggregations.InternalAggregations;
|
27 | 29 | import org.elasticsearch.search.aggregations.InternalMultiBucketAggregationTestCase;
|
28 | 30 | import org.elasticsearch.search.aggregations.ParsedMultiBucketAggregation;
|
29 | 31 | import org.elasticsearch.search.aggregations.pipeline.PipelineAggregator;
|
30 | 32 |
|
31 | 33 | import java.util.ArrayList;
|
| 34 | +import java.util.Arrays; |
32 | 35 | import java.util.HashMap;
|
33 | 36 | import java.util.List;
|
34 | 37 | import java.util.Map;
|
@@ -63,6 +66,27 @@ protected InternalHistogram createTestInstance(String name,
|
63 | 66 | return new InternalHistogram(name, buckets, order, 1, null, format, keyed, pipelineAggregators, metaData);
|
64 | 67 | }
|
65 | 68 |
|
| 69 | + // issue 26787 |
| 70 | + public void testHandlesNaN() { |
| 71 | + InternalHistogram histogram = createTestInstance(); |
| 72 | + InternalHistogram histogram2 = createTestInstance(); |
| 73 | + List<InternalHistogram.Bucket> buckets = histogram.getBuckets(); |
| 74 | + if (buckets == null || buckets.isEmpty()) { |
| 75 | + return; |
| 76 | + } |
| 77 | + |
| 78 | + // Set the key of one bucket to NaN. Must be the last bucket because NaN is greater than everything else. |
| 79 | + List<InternalHistogram.Bucket> newBuckets = new ArrayList<>(buckets.size()); |
| 80 | + if (buckets.size() > 1) { |
| 81 | + newBuckets.addAll(buckets.subList(0, buckets.size() - 1)); |
| 82 | + } |
| 83 | + InternalHistogram.Bucket b = buckets.get(buckets.size() - 1); |
| 84 | + newBuckets.add(new InternalHistogram.Bucket(Double.NaN, b.docCount, keyed, b.format, b.aggregations)); |
| 85 | + |
| 86 | + InternalHistogram newHistogram = histogram.create(newBuckets); |
| 87 | + newHistogram.doReduce(Arrays.asList(newHistogram, histogram2), new InternalAggregation.ReduceContext(null, null, false)); |
| 88 | + } |
| 89 | + |
66 | 90 | @Override
|
67 | 91 | protected void assertReduced(InternalHistogram reduced, List<InternalHistogram> inputs) {
|
68 | 92 | Map<Double, Long> expectedCounts = new TreeMap<>();
|
|
0 commit comments