diff --git a/.travis.yml b/.travis.yml index 5bae0a9..92dd487 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ addons: - rpm env: global: - - TARGE=install + - TARGET=install - secure: aANugu/1kR5uZl2nzd6Cm4hn6aA1eIPNrpUlQ7pI5aFZkkhPQ1g3qxR2e0z5sfKlpOV8iKbVEk+XrnnR2yJiJS3tDma6AHm/8CcvyB+2oEWZroumE/cva914uvwo15wfhNBQPPt6uAjBU8qPRpjrSmbTr/yiwSPQiwYmCYzYatpMLzCw/xjUQSnpu1Q85WJU0bcQe4yYO6xazrdpJgM2XUTvRybq4SEfEcpshm5KV/k3ux/xvwE6QBUYUgU+Cnm1p2jv2wgh3DrYJUVyokMKiwWoBvh21lmXm026T8+nHVvxpdUdXE69YJD250zLrvzLmv4C9sYYcQZGwzuBOWZa+tS4MPSu0kVcgFohC3Y8/fj0nTGmF3RKABGJwwAaq5ZsAGRL4SIBBr+zALdlRMy8dEQsVCc3O8TzQ/hmLVzQj/xmHimbP8KQgSXnFIfj4FyrLDZr/b8Yqo26UQ7n9wzjLcLZ2qPfkF+WHX7YuGSNTgtFDCMx55ukgGD/G57eqgR14052QQxAvAAWMkdJOxw0nJXEtJfRx8LBgVFH17a3FfWAB5x2/1Im4z9yMjTDIMtEP8ruqGwokcvMQXTUha+ye7xZCrLhzSI45dDRxmLcz4z0CLM9nrsJ1OqkY2JPNxhTUI74bJaTDLVGBP9nLsfbaxm8uPGZX93LmiozgXYZ1mE= - secure: CTP8oAraFI2rW5lmeHoZcZ9pS3dDaF9/pKn6CTakkpaAdR0PAeo/NHVGbNE/VSOAyl8VCa9NkNkCO2FESckWcliwJAriposs9MKLrfeWk2MfKSTQKNgDH65BXFaeHRB5WUMW7Vy0upkPpu4a+aB0BqZJfp+bTfKC0Eyhyhiz4oB9PUEwy7jIy+zGDAhU48DXLrj1oS2MOM72hwYhWcnrs5Mrdj987mfrZglq95qXN5qIee8A9JBiPoY/qu7rVYxJ4Nru1S5i57yxwvoz62nn9zrax6kincjQ3w53VL8D8C5bOUaOavFiwrAWC0m/B1MoMNLc+fpzmDZuExM5moJSsIyb3//gWJ0b9FetdK79ET2JGRJwcvtiJTIr/chGDSzdnCOimY4NTwR+FlUGYeJXEm4BhIAtGbttXw0xgknKnDpfAptGUv8+pydJJlN4ytaJ0gPOePGYVxIWbzZEocq6Tg7ZPMjW7CZwiYrF7KcvHSGHJ52Mc6xDf+uts72F/CXG/iAHWwIUsSFRYEWLOO14Jaf+RpdNsT4AHTTY8hAn25GFFO+P/EIkjb2zRZp9ld80kaDNKt7zoXn39ORnc7Ylx20SoIOQtAjaKz5+USx2OWVZ+Za9F7xm74iiR19ceOfL7kK//r+lSZmVAibH5HF9b5TTJoyTDEqHUjK9eAHc0N0= - secure: BdNEBuKIoqqj1ibPMmyT1VLcEvxhrGYlNKOhEa1KPQ6vdORbZICWwXM0HcD59g5W+KMv+5/UcNEqghabXgseH1aytgNN0d5XbFgzojN2C3ZftU2fOAguGrFjkDIcT8ASnmVzi+qz7E8LIDio/4gcooLwU5KvxWeyB++1pyFhW9PsGZ0hMGRq9nzxWYA29LxbhXIhawd7kI5MvbAKQGjY2zAJTPk1ymT4MbFMk8N7qV9bpIo2nE5g0tNmyllPVrG+rwo6uEV9TNnBO05ktHWxl4pctvgBtCLNCMwEE0Y1rcJ8/yFVQu+uVy5wmRCSVm7sJASc6lfG0Ajnonx5lXlmSEKS6PGBoO0JJgHx4HwMuZf9RwBqIU3qItFbURBOGxiO/xiyp8yENgLAuYMGxuYz58Ro5CeGJthrptfHOmprVPFwnJWXwVaWiZSj5zZDK0x/Fw+B6qUjmxEUvyEQ19vMbjPQT3L0tICROuFN/7c1L6Y9CoRsRhLj+nXYIbZCXaahf4yGuskOwRKFphRYN5uflkP7ilFIuhFTu755yX7Ges2dXRQhCUBKCXICIjlikoiWlWnpIJFqnA02AQOHoeCIhkj9NL9Ffixh1g4sNfVThbQFMtOOvhgP9K3cKlaTDD/blMZqJKwN+yz9gR8kB372vAM6Du3UHv8/GY+W3RTDUUY= diff --git a/pom.xml b/pom.xml index 34e62f8..b6bee48 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ jar KairosDB Extensions Extensions for KairosDB. - 2.1.8-SNAPSHOT + 2.1.10-SNAPSHOT diff --git a/src/main/java/io/inscopemetrics/kairosdb/HistogramDataPoint.java b/src/main/java/io/inscopemetrics/kairosdb/HistogramDataPoint.java index 422a8f4..09e5012 100644 --- a/src/main/java/io/inscopemetrics/kairosdb/HistogramDataPoint.java +++ b/src/main/java/io/inscopemetrics/kairosdb/HistogramDataPoint.java @@ -29,13 +29,13 @@ public interface HistogramDataPoint extends DataPoint { * Getter the number of data points originally contained in this HistogramDataPoint. * @return datapoint sample count */ - int getOriginalCount(); + long getOriginalCount(); /** * Getter for sample count contained in this HistogramDataPoint. * @return datapoint sample count */ - int getSampleCount(); + long getSampleCount(); /** * Getter for the sum of all samples contained in this HistogramDataPoint. diff --git a/src/main/java/io/inscopemetrics/kairosdb/HistogramDataPointImpl.java b/src/main/java/io/inscopemetrics/kairosdb/HistogramDataPointImpl.java index 647f511..085eb30 100644 --- a/src/main/java/io/inscopemetrics/kairosdb/HistogramDataPointImpl.java +++ b/src/main/java/io/inscopemetrics/kairosdb/HistogramDataPointImpl.java @@ -41,7 +41,7 @@ public class HistogramDataPointImpl extends DataPointHelper implements Histogram private final double max; private final double mean; private final double sum; - private final int originalCount; + private final long originalCount; /** * Public constructor. @@ -88,7 +88,7 @@ public HistogramDataPointImpl( final double max, final double mean, final double sum, - final int originalCount) { + final long originalCount) { this( timestamp, DEFAULT_PRECISION, @@ -151,7 +151,7 @@ public HistogramDataPointImpl( final double max, final double mean, final double sum, - final int originalCount) { + final long originalCount) { super(timestamp); this.precision = precision; this.map = map; @@ -222,7 +222,7 @@ public double getDoubleValue() { } @Override - public int getOriginalCount() { + public long getOriginalCount() { return originalCount; } @@ -232,7 +232,7 @@ public int getOriginalCount() { * @return the number of samples */ @Override - public int getSampleCount() { + public long getSampleCount() { int count = 0; for (Integer binSamples : map.values()) { count += binSamples; diff --git a/src/main/java/io/inscopemetrics/kairosdb/aggregators/HistogramCountAggregator.java b/src/main/java/io/inscopemetrics/kairosdb/aggregators/HistogramCountAggregator.java index 605ff4b..b459cbb 100644 --- a/src/main/java/io/inscopemetrics/kairosdb/aggregators/HistogramCountAggregator.java +++ b/src/main/java/io/inscopemetrics/kairosdb/aggregators/HistogramCountAggregator.java @@ -68,7 +68,7 @@ private final class HistogramMeanDataPointAggregator implements RangeSubAggregat @Override public Iterable getNextDataPoints(final long returnTime, final Iterator dataPointRange) { - int count = 0; + long count = 0; while (dataPointRange.hasNext()) { final DataPoint dp = dataPointRange.next(); if (dp instanceof HistogramDataPoint) { diff --git a/src/main/java/io/inscopemetrics/kairosdb/aggregators/HistogramFilterAggregator.java b/src/main/java/io/inscopemetrics/kairosdb/aggregators/HistogramFilterAggregator.java index 1b64e70..a6b3134 100644 --- a/src/main/java/io/inscopemetrics/kairosdb/aggregators/HistogramFilterAggregator.java +++ b/src/main/java/io/inscopemetrics/kairosdb/aggregators/HistogramFilterAggregator.java @@ -207,7 +207,7 @@ private HistogramDataPoint filterBins(final DataPoint dp) { double max = -Double.MAX_VALUE; double sum = 0; long count = 0; - int originalCount = 0; + long originalCount = 0; if (dp instanceof HistogramDataPoint) { final HistogramDataPoint hist = (HistogramDataPoint) dp; diff --git a/src/main/java/io/inscopemetrics/kairosdb/aggregators/MovingWindowAggregator.java b/src/main/java/io/inscopemetrics/kairosdb/aggregators/MovingWindowAggregator.java index 0b37ef4..a365285 100644 --- a/src/main/java/io/inscopemetrics/kairosdb/aggregators/MovingWindowAggregator.java +++ b/src/main/java/io/inscopemetrics/kairosdb/aggregators/MovingWindowAggregator.java @@ -406,12 +406,12 @@ public void setDataPointGroup(final DataPointGroup dataPointGroup) { } @Override - public int getOriginalCount() { + public long getOriginalCount() { return wrappedDataPoint.getOriginalCount(); } @Override - public int getSampleCount() { + public long getSampleCount() { return wrappedDataPoint.getSampleCount(); } diff --git a/src/test/java/io/inscopemetrics/kairosdb/Histogram.java b/src/test/java/io/inscopemetrics/kairosdb/Histogram.java index 40bb724..68e8e47 100644 --- a/src/test/java/io/inscopemetrics/kairosdb/Histogram.java +++ b/src/test/java/io/inscopemetrics/kairosdb/Histogram.java @@ -31,11 +31,11 @@ */ @SuppressFBWarnings("FE_FLOATING_POINT_EQUALITY") public class Histogram { - private final TreeMap bins = new TreeMap<>(); + private final TreeMap bins = new TreeMap<>(); private double min; private double max; private double sum; - private int count; + private long count; /** * Public constructor. @@ -70,7 +70,7 @@ public Histogram(final JSONObject json) throws JSONException { final JSONObject binsJson = json.getJSONObject("bins"); for (final Iterator it = (Iterator) binsJson.keys(); it.hasNext();) { final String key = it.next(); - final int value = binsJson.getInt(key); + final long value = binsJson.getLong(key); bins.put(Double.valueOf(key), value); count += value; @@ -143,7 +143,11 @@ public double getSum() { return sum; } - public TreeMap getBins() { + public long getCount() { + return count; + } + + public TreeMap getBins() { return bins; } } diff --git a/src/test/java/io/inscopemetrics/kairosdb/HistogramTest.java b/src/test/java/io/inscopemetrics/kairosdb/HistogramTest.java new file mode 100644 index 0000000..6939cf6 --- /dev/null +++ b/src/test/java/io/inscopemetrics/kairosdb/HistogramTest.java @@ -0,0 +1,30 @@ +package io.inscopemetrics.kairosdb; + +import org.json.JSONException; +import org.json.JSONObject; +import org.junit.Assert; +import org.junit.Test; + +import java.util.TreeMap; + +public class HistogramTest { + @Test + public void testDecodeLargeHistogram() throws JSONException { + final JSONObject serialized = new JSONObject(); + serialized.put("min", 1337d); + serialized.put("max", 1337d); + serialized.put("sum", 11484742549504d); + final JSONObject bins = new JSONObject(); + bins.put("1337", 8589934592d); + serialized.put("bins", bins); + + final Histogram h = new Histogram(serialized); + + Assert.assertEquals(1337, (long) h.getMin()); + Assert.assertEquals(1337, (long) h.getMax()); + Assert.assertEquals(11484742549504L, (long) h.getSum()); + Assert.assertEquals(8589934592L, h.getCount()); + final TreeMap actualBins = h.getBins(); + Assert.assertEquals(8589934592L, actualBins.get(1337d).longValue()); + } +} diff --git a/src/test/java/io/inscopemetrics/kairosdb/aggregators/HistogramCountAggregatorTest.java b/src/test/java/io/inscopemetrics/kairosdb/aggregators/HistogramCountAggregatorTest.java new file mode 100644 index 0000000..5a72f54 --- /dev/null +++ b/src/test/java/io/inscopemetrics/kairosdb/aggregators/HistogramCountAggregatorTest.java @@ -0,0 +1,58 @@ +/* + * Copyright 2020 Dropbox Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.inscopemetrics.kairosdb.aggregators; + +import com.google.common.collect.Maps; +import io.inscopemetrics.kairosdb.HistogramDataPoint; +import io.inscopemetrics.kairosdb.HistogramDataPointImpl; +import org.junit.Assert; +import org.junit.Test; +import org.kairosdb.core.datapoints.DoubleDataPoint; +import org.kairosdb.core.datapoints.DoubleDataPointFactoryImpl; +import org.kairosdb.core.datastore.DataPointGroup; +import org.kairosdb.core.exception.KairosDBException; +import org.kairosdb.testing.ListDataPointGroup; + +import java.util.TreeMap; + +public class HistogramCountAggregatorTest { + + @Test + public void testCombineLargeValues() throws KairosDBException { + final double min = Double.MAX_VALUE; + final double max = -Double.MAX_VALUE; + final double sum = 0; + final TreeMap bins = Maps.newTreeMap(); + bins.put(1337d, 2147483647); + final double mean = 1337d; + + final HistogramDataPoint dp = new HistogramDataPointImpl( + 1L, bins, min, max, mean, sum); + final ListDataPointGroup group = new ListDataPointGroup("testCombineLargeValues"); + group.addDataPoint(dp); + group.addDataPoint(dp); + group.addDataPoint(dp); + group.addDataPoint(dp); + + final HistogramCountAggregator aggregator = new HistogramCountAggregator(new DoubleDataPointFactoryImpl()); + final DataPointGroup result = aggregator.aggregate(group); + + Assert.assertTrue(result.hasNext()); + final DoubleDataPoint resultDataPoint = (DoubleDataPoint) result.next(); + Assert.assertEquals(8589934588L, resultDataPoint.getLongValue()); + } +} diff --git a/src/test/java/io/inscopemetrics/kairosdb/integration/AggregationIT.java b/src/test/java/io/inscopemetrics/kairosdb/integration/AggregationIT.java index 8caeae7..d975f15 100644 --- a/src/test/java/io/inscopemetrics/kairosdb/integration/AggregationIT.java +++ b/src/test/java/io/inscopemetrics/kairosdb/integration/AggregationIT.java @@ -225,7 +225,7 @@ public void testMergeAggregatorSingle() throws IOException, JSONException { public void testMergeAggregatorMulti() throws IOException, JSONException { final List numbers = Lists.newArrayList(); for (Histogram histogram : MULTI_HIST_TEST_DATA) { - for (final Map.Entry entry : histogram.getBins().entrySet()) { + for (final Map.Entry entry : histogram.getBins().entrySet()) { for (int count = 0; count < entry.getValue(); count++) { numbers.add(entry.getKey()); }