diff --git a/processing/src/main/java/io/druid/query/aggregation/hyperloglog/HyperLogLogCollector.java b/processing/src/main/java/io/druid/query/aggregation/hyperloglog/HyperLogLogCollector.java index dbd766c391a28a501e3dc6c7839707a678f840c5..fb64956dcc0da145e74b7008e1e977097d050053 100644 --- a/processing/src/main/java/io/druid/query/aggregation/hyperloglog/HyperLogLogCollector.java +++ b/processing/src/main/java/io/druid/query/aggregation/hyperloglog/HyperLogLogCollector.java @@ -299,8 +299,12 @@ public abstract class HyperLogLogCollector implements Comparable (registerOffset + range)) { - byte currMax = getMaxOverflowValue(); + final byte currMax = getMaxOverflowValue(); if (positionOf1 > currMax) { + if(currMax <= (registerOffset + range)) { + // this could be optimized by having an add without sanity checks + add(getMaxOverflowRegister(), currMax); + } setMaxOverflowValue(positionOf1); setMaxOverflowRegister(bucket); } diff --git a/processing/src/test/java/io/druid/query/aggregation/hyperloglog/HyperLogLogCollectorTest.java b/processing/src/test/java/io/druid/query/aggregation/hyperloglog/HyperLogLogCollectorTest.java index 242561399539bba1005e89122789eef028cb9efd..1a1780fc1e477c59cae7f298321dd09b1080c7a5 100644 --- a/processing/src/test/java/io/druid/query/aggregation/hyperloglog/HyperLogLogCollectorTest.java +++ b/processing/src/test/java/io/druid/query/aggregation/hyperloglog/HyperLogLogCollectorTest.java @@ -844,29 +844,16 @@ public class HyperLogLogCollectorTest ); Collection> permutations = Collections2.permutations(collectors); - Collection> selectPermutations = Lists.>newArrayList( - Iterables.get( - permutations, - 3 - ) - ); - - selectPermutations = permutations; - -// ArrayList> selectPermutations = Lists.>newArrayList( -// Iterables.get( -// permutations, -// 1 -// ) -// ); - for(List permutation : selectPermutations) { + for(List permutation : permutations) { HyperLogLogCollector collector = HyperLogLogCollector.makeLatestCollector(); for (HyperLogLogCollector foldee : permutation) { collector.fold(foldee); } - System.err.println(collector.estimateCardinality()); + Assert.assertEquals(29, collector.getMaxOverflowValue()); + Assert.assertEquals(366, collector.getMaxOverflowRegister()); + Assert.assertEquals(1.0429189446653817E7, collector.estimateCardinality(), 1); } }